RasPI:长时间使用 ADS1115 时出现 I/O 错误 121.sleep()

问题描述


我目前正在尝试通过连接到我的 RaspBerry Pi 4 的 ADS1115 从 pH 探针读取值。使用 https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/python-circuitpython 上的说明我让它用这个简单的代码运行(不是我写的)

import time,board,busio
import adafruit_ads1x15.ads1015 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

i2c = busio.I2C(board.SCL,board.SDA) # Create the I2C bus

ads = ADS.ADS1015(i2c) # Create the ADC object using the I2C bus

chan = AnalogIn(ads,ADS.P0) # Create single-ended input on channel 0

print("{:>5}\t{:>5}".format('raw','v'))

while True:
    print("{:>5}\t{:>5.3f}".format(chan.value,chan.voltage))
    time.sleep(0.1)

但是,如果我将 time.sleep() 更改为大于 2 秒的任何值,我会得到一个 [Errno 121] Remote I/O error

 Traceback (most recent call last):
  File "simpletestadc.py",line 22,in <module>
    print("{:>5}\t{:>5.3f}".format(chan.value,chan.voltage))
  File "/home/pi/.local/lib/python3.7/site-packages/adafruit_ads1x15/analog_in.py",line 64,in value
    self._pin_setting,is_differential=self.is_differential
  File "/home/pi/.local/lib/python3.7/site-packages/adafruit_ads1x15/ads1x15.py",line 144,in read
    return self._read(pin)
  File "/home/pi/.local/lib/python3.7/site-packages/adafruit_ads1x15/ads1x15.py",line 172,in _read
    self._write_register(_ADS1X15_POINTER_CONfig,config)
  File "/home/pi/.local/lib/python3.7/site-packages/adafruit_ads1x15/ads1x15.py",line 205,in _write_register
    i2c.write(self.buf)
  File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py",line 102,in write
    self.i2c.writeto(self.device_address,buf,start=start,end=end)
  File "/usr/local/lib/python3.7/dist-packages/busio.py",line 115,in writeto
    return self._i2c.writeto(address,memoryview(buffer)[start:end],stop=stop)
  File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py",line 49,in writeto
    self._i2c_bus.write_bytes(address,buffer[start:end])
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py",line 308,in write_bytes
    self._device.write(buf)
OSError: [Errno 121] Remote I/O error

这对我来说似乎非常违反直觉,特别是因为循环内的一个简单的 print(i2c.scan()) 似乎可以防止崩溃(输出为 [72] btw),尽管现在速度急剧下降。 在我的项目中,我对每十分之一秒获取一次值不感兴趣,而是每 1 分钟左右快速连续获取十个值。

到目前为止,我所看到的每个问题似乎都以某种方式表明 ADC 和电路板之间存在错误连接,但我相信在我的情况下并非如此。

顺便说一句:sudo i2cdetect -y 1 始终在 0x48 处产生已建立的连接。

现在我很困惑,怀疑出了什么问题。另外,请注意这是我对 RaspBerryPi 的第一次认真尝试。

我将不胜感激。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...