树莓派 - 访问0x40时出错:检查I2C地址

0 投票
1 回答
6105 浏览
提问于 2025-04-18 10:36

我在我的树莓派上运行这个Python舵机脚本。这个代码是我从这里找到的:

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/blob/master/Adafruit_PWM_Servo_Driver/Servo_Example.py

Python舵机脚本

#!/usr/bin/python

from Adafruit_PWM_Servo_Driver import PWM
import time

# ===========================================================================
# Example Code
# ===========================================================================

# Initialise the PWM device using the default address
# bmp = PWM(0x40, debug=True)
pwm = PWM(0x40, debug=True)

servoMin = 150  # Min pulse length out of 4096
servoMax = 600  # Max pulse length out of 4096

def setServoPulse(channel, pulse):
  pulseLength = 1000000                   # 1,000,000 us per second
  pulseLength /= 60                       # 60 Hz
  print "%d us per period" % pulseLength
  pulseLength /= 4096                     # 12 bits of resolution
  print "%d us per bit" % pulseLength
  pulse *= 1000
  pulse /= pulseLength
  pwm.setPWM(channel, 0, pulse)

pwm.setPWMFreq(60)                        # Set frequency to 60 Hz
while (True):
  # Change speed of continuous servo on channel O
  pwm.setPWM(0, 0, servoMin)
  time.sleep(1)
  pwm.setPWM(0, 0, servoMax)
  time.sleep(1)

我试过这个解决方案,但没有帮助。

https://learn.adafruit.com/downloads/pdf/adafruit-16-channel-servo-driver-with-raspberry-pi.pdf

在这里输入图片描述

在这里输入图片描述

我接下来可以尝试什么呢?

1 个回答

0

首先,你不需要每次都以管理员身份登录:只在需要的时候加上sudo,然后输入密码就可以了。

其次,你的i2c总线可能没有正确配置,或者接线有问题。命令i2cdetect没有检测到任何连接的设备。你已经安装了smbus和i2ctools,但你有没有把i2c-bcm2708从黑名单中移除呢?

你需要输入:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

并在i2c-dev和i2c-bcm2708那一行前面加一个#。

从:

blacklist i2c-dev
blacklist i2c-bcm2708

变成:

#blacklist i2c-dev
#blacklist i2c-bcm2708

然后你需要在启动时添加i2c的模块。

sudo nano /etc/modules

并在文件的末尾添加这两行:

i2c-bcm2708 
i2c-dev

现在你可以用以下命令手动加载这些模块:

sudo modprobe i2c-bcm2708
sudo modprobe i2c-dev

然后再输入:

sudo i2cdetect -y 0 #if you have a rev1 board

sudo i2cdetect -y 1 #if you have a rev2 board

现在,如果你在图表中看到除了点以外的东西(就像之前那样),检查一下你的接线。如果你看到了一些东西,那就是伺服驱动器的地址。

撰写回答