处理偶尔的i2c写入错误,Python + Raspberry Pi

时间:2015-03-31 20:10:23

标签: python raspberry-pi i2c

我有一个RaspberryPi通过其i2c总线连接到温度/湿度传感器。通常一切都很好,我发送写命令并听取响应。但是,不时的脚本都会因为同样的错误而崩溃。

Traceback (most recent call last):
  File "humidify.py", line 20, in <module>
    humidity = HTU21DF.read_humidity()
  File "/home/pi/Desktop/Projects/HTU21DF.py", line 51, in read_humidity
    pi.i2c_write_byte(handle, rdhumi) # send read humi command
  File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 1861, in i2c_write_byte
    _pigpio_command(self.sl, _PI_CMD_I2CWS, handle, byte_val))
  File "/usr/local/lib/python2.7/dist-packages/pigpio.py", line 683, in _u2i
    raise error(error_text(v))
pigpio.error: 'I2C write failed'

我不打算清除导致偶然错误的原因,我希望我的脚本等一下再尝试i2c write命令。如果我可以做到这一点,那么我真的能够自动化我的系统,而不必经常检查崩溃。

我是编程新手,所以这可能是基本的东西。

2 个答案:

答案 0 :(得分:0)

阅读异常处理。在python中,您创建一个try块,其中包含您正在尝试的操作,后跟一个或多个except块,每个块都命名一个或多个您有兴趣处理的异常类。在这种情况下,您会看到pigpio.error个例外。

你可能做的是:

# try up to 3 times on a failure
success = False
caught_exception = None
for _ in range(3):
    try:
        pi.i2c_write_byte(...etc...)
        # if we get here, we succeeded, so break out of the loop
        success = True
        break
    except pigpio.error as e:
        print "error: %s"%(e)
        # wait a second for the retry
        time.sleep(1)

if not success:
    print "Failed after 3 retries!"

答案 1 :(得分:0)

我自己处理这个问题,Raspberry Pi2&lt; - &gt; MCP23016,最有可能的答案是,您使用的是MCP230xx,需要将复位引脚拉高。