2015-03-31 41 views
0

我有一個RaspberryPi通過它的i2c總線連接到溫度/溼度傳感器。通常情況下,一切都很好,我發送寫命令並收聽響應。但是,不時出現同樣的錯誤,腳本崩潰了。處理Occational i2c寫入錯誤,Python + RaspberryPi

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寫命令。如果我能做到這一點,那麼我將能夠自動化我的系統,而不必經常檢查崩潰。

我是一個編程新手,所以這可能是一些基本的東西。

+0

我會試着弄清楚爲什麼它不會忽略它,如果你看看源代碼告訴你爲什麼會出現錯誤,你也可以將'pigpio.exceptions設置爲False'並自己處理返回代碼 – 2015-03-31 20:19:18

回答

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!" 
0

已經一直在處理這個問題我自己,覆盆子PI2 < - > MCP23016,答案最有可能的是,你使用的是MCP230xx,你需要配合復位引腳爲高電平。