我有一个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命令。如果我可以做到这一点,那么我真的能够自动化我的系统,而不必经常检查崩溃。
我是编程新手,所以这可能是基本的东西。
答案 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,需要将复位引脚拉高。