如何在进行 crc 检查时修复此运行时错误 python 3 scd-30 co2 Sensor

问题描述

我该如何修复这个运行时错误? 如果出现错误,我希望它跳过阅读并继续执行程序,但它会停止程序

我有 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 错误使我的代码崩溃。