微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。