Raspberry Pi [Errno 121] 温度传感器远程 I/O 错误

问题描述 投票:0回答:2

我正在尝试使用 Waveshare BME280 环境传感器 设置 Raspberry Pi 3 B+。我按照本指南连接电缆并运行提供的 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,并多次重新安装操作系统。 此时,我不确定如何继续。如有任何帮助,我们将不胜感激。

python-3.x raspberry-pi hardware gpio i2c
2个回答
1
投票

我设法为这个问题创建了一个非常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 命令获得不必要的输出,但我忽略它,只将温度数据发送到我的服务器。


0
投票

如果您查找 BME280 环境传感器的数据表,您会发现它需要一点延迟才能与 I2C 配合使用。

我根据数据表在代码中添加了以下延迟,现在它工作得很好:

start_delay = 0.002 #for startup 
sampling_delay = 0.070 #for the loop

您可以将它们与前面提到的 time.sleep() 函数一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.