在Raspberry Pi上启用I2C接口

30

I2C是用于将低速外围设备连接到计算机和嵌入式系统的多设备总线。 Raspberry Pi在其GPIO接头上支持此接口,这是连接传感器和设备的好方法。配置完成后,您可以连接一个以上的设备,而无需使用接头连接器上的其他引脚。

第1步–启用I2C接口

默认情况下,默认的Raspbian映像禁用I2C,因此必须先启用接口才能使用它。可以使用两种方法之一来完成。一世’将介绍所有方法,但第一种方法可能更容易,更快捷。

方法1– Using “Raspi-config” 上 Command Line

在命令行或“终端”窗口中,通过运行以下命令开始:

sudo raspi-config

这将启动raspi-config实用程序。选择“Interfacing Options” :

Raspi-Config-接口

突出显示“I2C”选择并激活“<Select>”.

Raspi-Config-接口-I2C

选择 and activate “<Yes>” :

Raspi-Config-接口-I2C 1

突出显示并激活“<Ok>” :Raspi-Config-接口-I2C 2

当提示重新启动时,突出显示并激活“<Yes>” :

Raspi-Config-重新启动提示

Raspberry Pi将重新启动并启用界面。

方法二– Using “Raspberry Pi配置”

如果您的Pi启动到桌面,则可以打开终端窗口并使用方法1或使用图形工具“Raspberry Pi配置”。在下面找到 菜单> Preferences > Raspberry Pi配置

Raspberry Pi配置 launch from menu

然后,您只需选择“Interfaces” tab and set I2C to “Enabled” :

Raspberry Pi配置 - 介面 Tab - I2C

点击“OK”按钮。如果提示重新启动,请选择“Yes”这样更改才能生效。

Raspberry Pi配置 - Reboot Prompt

Raspberry Pi将重新启动并启用I2C接口。

第2步– Install Utilities

为了帮助调试并允许在Python中使用该接口,我们可以安装“python-smbus” and “i2c-tools” :

sudo apt-get update
sudo apt-get install -y 蟒蛇-smbus i2c工具 

第三步– Shutdown

使用以下命令关闭您的Pi:

sudo halt

等待十秒钟,断开Pi的电源,现在就可以连接I2C硬件了。

Checking If I2C Is 已启用 (Optional)

在打开电源或重新启动Pi时,可以使用以下命令检查i2c模块是否正在运行:

lsmod | grep i2c_

这将列出所有以“i2c_”. If it lists “i2c_bcm2708”则模块运行正常。

测试硬件(可选)

一旦您’已连接硬件,请仔细检查接线。确保3.3V输入正确的引脚’没有短路。给树莓派上电,等待它启动。

如果你’拥有模型A,B版本2或B + Pi,然后键入以下命令:

i2cdetect -y 1

如果你’获得原始的Model B Rev 1 Pi,然后输入以下命令:

i2cdetect -y 0

为什么会有所不同?在Pi的Rev 1和Rev 2版本之间,他们更改了到达GPIO接头连接器上的Pin 3和Pin 5的信号。这将需要与I2C一起使用的设备号从0更改为1。

我使用了连接传感器的Pi 2 B型,输出如下所示:

[email protected] ~ $ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

这表明我’连接了一个设备,其地址为0x20(十进制为32)。


可以找到具有此接口的完整教程列表。 点击这里.

最后,在Wikipedia p上有关于I2C的更多技术信息。年龄 如果你感兴趣。

分享。

30条留言

  1. 波佩斯库·利维(Popescu Liviu)

    我尝试了所有这些,但出现了此错误。我有Rpi B +

    错误:无法打开文件`/ dev / i2c-1′ or `/dev/i2c/1′: 无此文件或目录

    • 与具有最新Raspbian(内核3.18.6-v7 +)的Raspberry Pi 2相同。
      使用raspi-config绝对不会修改配置文件。
      手动修改配置文件也不会带来什么好消息。

      解决方案:搜索网络时,似乎使用新内核(3.18)’修改另一个文件是必需的。编辑/boot/config.txt并添加以下行:
      dtparam = i2c_arm = 上

      好像在那里’s要添加的另一行,但是我在没有此代码的情况下使i2c工作:
      dtparam = i2c1 =开启

      良好的结冰效果

      • 经过一点实验’我的i2c硬件正常工作。一世’我已经更新了我的文章,希望它们现在能够反映出Raspbian中所做的更改。

  2. 您的/ etc / modules脚本中有错误。您需要更改其休假条件才能在新的Rpi2板上工作。

    “i2c-bcm2708” -> “i2c-bcm2835”.

    2708适用于原始Rpi1板,但适用于新的Rpi2板。您需要将其更改为2835。

    • i2c-bcm2708可在两个板上使用。 i2c-bcm2835适用于Pi 2,但停止B +引导。所以目前我可以’t see why you wouldn’t使用i2c-bcm2708并使SD卡在B +和Pi 2中工作。

  3. 但是,当我键入时,请按照上面显示的步骤进行操作“sudo i2cdetect -y 1我收到一条错误消息“could not open file ‘/dev/i2c-1’无此文件或目录。我对Raspberry Pi完全陌生’的操作系统,所以不要’不知道目录是否已更新或如何更正。任何帮助,将不胜感激。

  4. 谢谢– best 文章 I’我看过这个问题。它’很高兴看到您保持最新状态。一旦我的IMU正常工作,我已经预订了将您的站点标记为将来参考。

    顺便说一句:i2c-bcm2835模块做什么,而i2c-bcm2708模块做什么?’? (我有一个PI 2 B板,我从您的评论中收集到它确实没有’无关紧要,但很高兴知道)。

  5. 这里’提示:如果出现I2C错误,请确保IMU和PI之间的距离较短。我已经为各种Arduino模块制作了测试电缆,该电缆很长,因此我可以移动模型进行测试。我能够在Arduino上成功运行IMU,并且工作正常,但是当我将其连接到PI时,我会得到“I2C 113,无法读取FIFO计数器”,错误,并且所提供的软件均不起作用。

    我发现我的Freetronics 9自由度IMU(http://www.freetronics.com.au/collections/modules/products/9-dof-imu-accelerometer-gyroscope-magnetometer)有两个4.5K上拉电阻,应该用Pi禁用这些电阻,因为它有’自己的纸浆电阻器1.8K,所以你真的不知道’t想要在电路中添加任何额外的电阻,因为它们并联连接并大大降低了总上拉值(1 /(1 / 1.8K + 1 / 4.5K)= 1.285K,!)。

  6. 我有新改良的Pi2 1gb。我正在使用Raspbian,并且我尝试了所有启用i2c的步骤。语句-lsmod | grep i2c_确实会返回“ i2c_bcm2708”和另一个模块。
    但是,sudo i2cdetect -y 1不能完全一样。“sudo:i2cdetect:找不到命令”是结果。我想知道问题是否出在我安装的RTC上。它没有任何指示’自己和其他人在Pi2上使用RTC时遇到麻烦。

      • 是。迷你RTC或Tiny 通用输入输出设备。实时时钟现在很好用,但我希望他们能提供说明。
        虽然便宜。非常感谢您的帮助。

  7. 好吧,我刚刚让i2cdetect在运行Raspbian的Pi2上工作。我的麻烦全都归因于我在安装python-smbus和i2c-tools时尝试使用Wi-Fi适配器的事实。我连接了网络电缆,然后重试。这次一切都很好,我可以继续在新的RTC(实时时钟)上设置日期和时间。
    谢谢for the info. Your instructions are the best I have found 上 the Internet.

  8. 嘿,我真的可以’似乎没有正确的选择。奇怪的是,当连接一台设备并扫描i2c设备时,我得到了每个可能的地址,而不仅仅是0x20。关于我可能做错的任何想法?

  9. 放弃所有步骤后,我’m收到错误:错误:无法打开文件“ / dev / i2c-1”或“ / dev / i2c / 1”:没有这样的文件或目录

    在这次讨论中,我尝试了所有建议,但没有运气。 pi和nano之间的接线可以吗?是否有任何图片或方案?

    谢谢

    • 您使用的是Raspbian的最新版本吗?您的/boot/config.txt是否包含以下行:
      dtparam = i2c_arm = 上
      如果没有,则使用以下命令编辑文件,最后将其添加:
      sudo nano /boot/config.txt

  10. 你好
    我已按照上述所有步骤进行操作。直到lsmod | grep i2c_都可以正常工作。但是,当我键入i2cdetect -y 1时,我可以’无法检测到我的设备的地址。我正在使用带有ina219的Raspi B +。有人可以帮我吗?谢谢!!!

  11. 比利·布莱恩特

    我已经按照这里的每个步骤,我’m使用RaspberryPI 2 B + 1GB和DS3231 RTC模块。我正在运行Raspbian的最新构建版本,并安装了i2c工具。引导时,看起来像看到该模块,详细的展位显示该模块标识i2c控制器和设备。但是,当我运行i2cdetect -y 1时,它告诉我找不到'/ dev / i2c-1'或`/ dev / i2c / 1'。我正在使用UNIONFS的/ etc和/ var只读分区。一世’在我的智慧尽头,我该如何工作?

  12. 正在尝试安装RTC,并试图连接到IC2总线。该指南帮助我整理了所有内容,非常感谢。 (那里有很多非常差的东西,要么是错误的,要么就是在滥用先验知识)

  13. 我在Arduino上使用了I2C,经过大量的重击后,我开始表现出来。 Pi看起来要困难得多。您的出色文章将使我难免要让Newhaven NHD-0216K3Z-FL-GBW 液晶屏来完成我想做的事情。

  14. 谢谢你的这篇文章
    我的问题是

    我可以通过i2c连接多少个设备?

    如果我想连接许多arduino? i2c可以将多少arduino连接到树莓派

    非常感谢

  15. 有问题。
    当我做i2cdetect -y 1

    我没有在图表中列出任何其他数字…。左下00至70。和0-9…a-f along top.

    关于什么问题的任何想法?谢谢

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.