2017-10-19 13 views
0

私はSensirion SGP30センサー(Raspberry Pi 3)との間でi2cメッセージを読み書きしようとしていますが、私はsmbus libの周りを頭で囲むのに苦労します。Python smbus libとSensirion SGP30

SGP30のドキュメント(https://cdn.sos.sk/productdata/46/c9/ba351164/sgp30.pdf)はINITにhexdecimalsを示し、測定を開始テーブルを持っています

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秒の定期的な間隔で送信することがあります。

ラストベリーpiでループがうまく動かないので、スリープ時間が少し長くなる必要があるようです。

なぜ私はそのバイトを2つに分割する必要があるのか​​、良い説明が見つかりませんでした。

0

あなたがこれを認識しているかどうかわかりませんが、SGP30には+ 1.8VのVDDが必要です。 i2cゲートをその電圧にプルアップするとPi i2cが正しく動作しないか、または+ 3.3VからSGP30に電力を供給していると、短くてもメリットがあり、死にました。 SGP30に正しく電源を供給し、通信にi2cレベルシフタを使用していますか?さもなければあなたが言及する問題は期待されるべきです。

+0

私は電圧レギュレータを持っていますので、その部分には問題ありません。どのように私はそれが働くようになった答えを投稿しました。 – Sharko

関連する問題