处理偶尔的 i2c 写入错误,Python + Raspberry Pi
Dealing with occational i2c write errors, Python + RaspberryPi
我有一个 RaspberryPi 通过它的 i2c 总线连接到一个 temperature/humidity 传感器。通常一切都很好,我发送写入命令并监听响应。然而,脚本时不时地因同样的错误而崩溃。
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 写入命令。如果我能做到这一点,那么我就真的能够自动化我的系统,而不必经常检查它是否崩溃。
我是编程新手,所以这可能是一些基础知识。
阅读异常处理。在 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!"
我自己一直在处理这个问题,Raspberry Pi2 <-> MCP23016,答案很可能是,您使用的是 MCP230xx,您需要将复位引脚连接到高电平。
我有一个 RaspberryPi 通过它的 i2c 总线连接到一个 temperature/humidity 传感器。通常一切都很好,我发送写入命令并监听响应。然而,脚本时不时地因同样的错误而崩溃。
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 写入命令。如果我能做到这一点,那么我就真的能够自动化我的系统,而不必经常检查它是否崩溃。
我是编程新手,所以这可能是一些基础知识。
阅读异常处理。在 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!"
我自己一直在处理这个问题,Raspberry Pi2 <-> MCP23016,答案很可能是,您使用的是 MCP230xx,您需要将复位引脚连接到高电平。