树莓派 i2c 读/写错误

2022-01-05 00:00:00 python raspberry-pi raspbian c++ i2c

像许多人一样,我使用 Pi 已经有一段时间了,但从未真正用它做过任何事情.我终于有时间连接一个 MPU6050 IMU 来玩了.它使用 i2c 进行通信,所以我遵循了 Adafruit 的指南关于启用此处显示的 i2c

然后下载官方的 Adafruit 库:

  • C++
  • Python

使用$ sudo raspi-config检查树莓派的I2C是否启用,并确保I2C地址正确,另外使用$ i2cdetect -y 1检查,像这样:

尝试:总线 = Adafruit_I2C(地址=0)打印(默认 I2C 总线是可访问的")除了:print("访问默认I2C总线时出错")mcp = 无对于我在范围内(0x00,0x28):尝试:mcp = Adafruit_MCP230XX(address=i, num_gpios=16)休息除了:经过

Like many people, I've had a Pi for a while but never really done anything with it. I've finally got round to hooking up an MPU6050 IMU to play around with. It uses i2c for communication so I followed the guide by Adafruit regarding enabling i2c shown here Adafruit i2c.

I then hooked up the MPU6050 to the i2c bus, and using i2cdetect -y 1 I was able to see a device at 0x68.

However, when trying to read or write from the device I got a permission denied error, so I followed this post to solve that problem /dev/i2c-x permission. It told me to modify /lib/udev/rules.d/60-i2c-tools.rules with

KERNEL=="i2c-0"     , GROUP="i2c", MODE="0660"
KERNEL=="i2c-[1-9]*", GROUP="i2c", MODE="0666"

This worked, but then when actually trying to read or write using C++, I get "Input/output error". Similarly, using smbus in Python I get [Errno 5] Input/output error When connected to an Arduino I can get this device to work perfectly.

I've exhausted every forum post I can find. Hopefully I've just done something stupid. Anyone got any ideas?

Original model B RPi running Raspbian, if that's of any help.

Cheers

解决方案

In normal cases you don't really need to change the /lib/udev/rules.d/60-i2c-tools.rules file, so I would recommend resinstalling raspbian.

Connect the MPU6050 to the correct pins:

Then download an official Adafruit library:

  • C++
  • Python

Check if the Raspberry Pi's I2C is enabled with $ sudo raspi-config and make sure the I2C address is correct, besides checking it with $ i2cdetect -y 1, like this:

try:
  bus = Adafruit_I2C(address=0)
  print("Default I2C bus is accessible")
except:
  print("Error accessing default I2C bus")

mcp = None

for i in range(0x00, 0x28):
    try:
        mcp = Adafruit_MCP230XX(address=i, num_gpios=16)
        break
    except:
        pass

相关文章