我正在尝试使用Waveshare BME280环境传感器设置树莓派3b +。我按照本指南连接电缆,并运行提供的bme280.py脚本。我的传感器有2个额外的电缆,CS和ADDR/MISO,它们不存在于指南上的模型中,但其余的都插入到相同的GPIO引脚上。I2C和SPI接口已启用,我正在运行最新的Raspbian OS Lite。
当我运行脚本时,我得到以下消息:Traceback (most recent call last):
File "bme280.py", line 172, in <module>
main()
File "bme280.py", line 161, in main
(chip_id, chip_version) = readBME280ID()
File "bme280.py", line 56, in readBME280ID
(chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2)
OSError: [Errno 121] Remote I/O error
还有另一个奇怪的问题:当我运行i2cdetect -y 1
时,我得到每行都有破折号,但如果我在之后立即运行第二次,我得到x77显示,但x76仍然没有。
我发现了一个类似的线程,并试图通过添加i2c_baudrate=100000
和重启来修改我的/boot/config.txt文件,但没有修复它。
我确定使用gpiotest测试pi,结果返回Skipped non-user gpios: 0 1 28 29 30 31
Tested user gpios: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
Failed user gpios: None
我使用DHT11传感器和运行Adafruit库得到了类似的问题,并得到了一个错误,表明没有数据从传感器流出。我尝试了几种不同的传感器和树莓派,并重新安装了几次操作系统。在这一点上,我不确定如何继续。如有任何帮助,不胜感激。
我设法为这个问题创建了一个非常粗糙的解决方案。由于i2cdetect似乎只在第二次(或更晚)运行时读取设备,因此我决定在传感器脚本中模拟运行它。
我在代码中添加了以下行:
import os
from time import sleep
os.system('i2cdetect -y 1')
sleep(0.1)
os.system('i2cdetect -y 1')
输出仍然显示第一个i2cdetect命令没有读取任何设备,因此我必须添加第二个命令。我注意到有时它们都没有读取数据,所以我添加了1/10秒睡眠命令。
这会从i2cdetect命令中获得不必要的输出,但我忽略它,只将温度数据发送到我的服务器。