2017-10-19 277 views
0

我試圖讀取和寫入Raspberry Pi 3的Sensirion SGP30傳感器的i2c消息,但我很難將頭繞在smbus lib上。與Sensirion的Python smbus庫SGP30

SGP30文檔(https://cdn.sos.sk/productdata/46/c9/ba351164/sgp30.pdf)的表,其中顯示hexdecimals至Init,並開始測量:

SGP30 commands

這裏是我如何設法得到它運行起來:

bus = smbus.SMBus(1) 
address = 0x58 

time.sleep(.5) 
bus.write_i2c_block_data(address, 0x2003, []) 
time.sleep(.5) 
bus.write_i2c_block_data(address, 0x2008, []) 
time.sleep(.5) 

while 1: 
    print bus.read_i2c_block_data(address, 0) 

這打印我陣列

[0, 0, 129, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] 

但是傳感器對酒精沒有反應。

我真的需要的是關於i2c通信和smbus(python)相同的傻瓜教程。看來,我見過的每一個教程都是那些「只是把這些字節放在這裏,而且你很好去」的教程。

那麼我該如何得到這個工作?謝謝! :)

回答

0

得到它的工作。

bus = smbus.SMBus(1) 
address = 0x58 

bus.write_i2c_block_data(address, 0x20, [0x03]) 
time.sleep(.5) 

while 1: 
    bus.write_i2c_block_data(address, 0x20, [0x08]) 
    time.sleep(.6) 
    print bus.read_i2c_block_data(address, 0) 
    time.sleep(.8) 

走到文檔通一次,因爲它說

「Measure_air_quality」命令已在1秒的定期發送,以保證 動態基線補償算法的正確操作。

似乎睡眠時間需要稍大一點,因爲在樹莓派上環路運行不太順暢。

仍然沒有找到很好的解釋,爲什麼我需要將該字節分成兩部分。

0

不確定您是否知道這一點,但SGP30需要+ 1.8V的VDD。如果您將i2c門拉到該電壓,Pi i2c可能無法正常工作,或者,如果您從+ 3.3V爲SGP30供電,它可能有短暫但快樂的生活,現在已經死亡。你是否正確地爲SGP30供電,並使用i2c電平轉換器進行通信?否則,你提到的問題是可以預料的。

+0

我之間有穩壓器,所以一切都很好。剛剛發佈的答案,我怎麼得到它的工作。 – Sharko