如何解决Raspberry Pi [Errno 121] 温度传感器的远程 I/O 错误
我正在尝试使用 Waveshare BME280 Environmental Sensor 设置 Raspberry Pi 3 B+。我按照 this guide 连接电缆并运行提供的 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 仍然没有。>
我发现了一个类似的 thread 并尝试通过添加 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 库时遇到了类似的问题,并收到错误消息,表明传感器没有数据流出。我尝试使用几种不同的传感器和 Raspberry Pi,并多次重新安装操作系统。 在这一点上,我不确定如何继续。任何帮助表示赞赏。
解决方法
我设法为这个问题创建了一个非常hacky的解决方案。 由于 i2cdetect 似乎只在第二次(或更晚)运行时读取设备,因此我决定在传感器脚本中模拟运行它。
我在代码中添加了以下几行:
import os
from time import sleep
os.system('i2cdetect -y 1')
sleep(0.1)
os.system('i2cdetect -y 1')
输出仍然显示第一个 i2cdetect 命令没有读取任何设备,所以我不得不添加第二个。我注意到有时它们都没有读取数据,所以我添加了一个 1/10 秒的睡眠命令。
这会从 i2cdetect 命令中获得不必要的输出,但我忽略了它,只将温度数据发送到我的服务器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。