问题描述
我该如何修复这个运行时错误? 如果出现错误,我希望它跳过阅读并继续执行程序,但它会停止程序
我有 Adafruit SCD-30 Co2 传感器,当使用他们的示例代码读取数据时,我收到此错误
Traceback (most recent call last):
File "pm.py",line 43,in <module>
print("CO2:",scd.CO2,"PPM")
File "/usr/local/lib/python3.7/dist-packages/adafruit_scd30.py",line 183,in CO2
self._read_data()
File "/usr/local/lib/python3.7/dist-packages/adafruit_scd30.py",line 246,in _read_data
raise RuntimeError("CRC check Failed while reading data")
RuntimeError: CRC check Failed while reading data
这是它失败的行
print("CO2:","PPM")
这是他们代码的crc检查部分
def _read_data(self):
self._send_command(_CMD_READ_MEASUREMENT)
with self.i2c_device as i2c:
i2c.readinto(self._buffer)
crcs_good = True
for i in range(0,18,3):
crc_good = self._check_crc(self._buffer[i : i + 2],self._buffer[i + 2])
if crc_good:
continue
crcs_good = False
if not crcs_good:
raise RuntimeError("CRC check Failed while reading data")
self._co2 = unpack(">f",self._buffer[0:2] + self._buffer[3:5])[0]
self._temperature = unpack(">f",self._buffer[6:8] + self._buffer[9:11])[0]
self._relative_humidity = unpack(
">f",self._buffer[12:14] + self._buffer[15:17]
)[0]
有没有办法让它做这样的事情
if not crcs_good:
skip reading and wait for the next one
解决方法
我遇到了同样的问题。我终于发现我需要在树莓派上降低 I2C 的时钟速度。不确定您是否也在使用 pi,但这里有一个链接,可以很好地写出如何操作 https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/i2c-clock-stretching 。我正在以 10khz 或 10000hz 的频率运行传感器,从那以后就没有出现 crc 错误使我的代码崩溃。