2017-05-03 7 views
0

私は以下のコードでCO2レベルを検出しています。 以下は、モデルに関する情報の一部です。Co2 k30センサーがラズベリーパイ3で働いていない

CO2センサー - K30 ラズベリーパイ3

私はドキュメント以下 http://www.co2meters.com/Documentation/AppNotes/AN137-K30-sensor-raspberry-pi-uart.pdf

以下のとおりパイとK-30との間の接続を行っているが、私のPythonコードは、私は

import serial 
import time 
ser = serial.Serial("/dev/ttyS0",baudrate =9600,timeout = .5) 
print " AN-137: Raspberry Pi3 to K-30 Via UART\n" 
ser.flushInput() 
time.sleep(1) 
for i in range(1,21): 

    ser.flushInput() 
    time.sleep(1) 
    ser.write("\xFE\x44\x00\x08\x02\x9F\x25") 
    time.sleep(1) 
    resp = ser.read(7) 

    high = ord(resp[3]) 
    low = ord(resp[4]) 
    co2 = (high*256) + low 
    print "i = ",i, " CO2 = " +str(co2) 
    time.sleep(.5) 

です一貫した出力を得られない。

私は

[email protected]:~/i2c $ sudo python test-co2.py 
AN-137: Raspberry Pi3 to K-30 Via UART 

i = 1 CO2 = 2458 
i = 2 CO2 = 2457 
i = 3 CO2 = 2448 
Traceback (most recent call last): 
File "test-co2.py", line 16, in <module> 
    high = ord(resp[3]) 
IndexError: string index out of range 
[email protected]:~/i2c $ sudo python test-co2.py 
AN-137: Raspberry Pi3 to K-30 Via UART 

i = 1 CO2 = 2207 
Traceback (most recent call last): 
File "test-co2.py", line 16, in <module> 
    high = ord(resp[3]) 
IndexError: string index out of range 
[email protected]:~/i2c $ 

の下には、任意の助けに感謝何かを取得していますか?

+0

インデックスを作成する前に、結果の内容を確認してください。明らかに、期待している結果列が少ないことは明らかです。 – Carcigenicate

答えて

0

high = ord(resp[3])

IndexError: string index out of range

これは文字列respの長さは、その特定の呼び出しのために0であり、コードは、文字列の3番目の要素を指すようにしようとしていることを意味します。そのため、範囲外のインデックスを取得するのです。

すべての反復でlen(rep)を表示しようとすると、その特定の反復でエラーが発生した場合は0が表示されますが、最初にデータがあるためシリアルポートを少なくとも読み取ることができます。

問題は、センサの電源/ GNDピンまたはRX/TXピンの接続が緩んでいる可能性があります。

PI3のシリアルポートからデータを取得するためにやったことを正確にやっているのですか?sudo chmod g + r/dev/ttyS0?

+0

これは1/2の答えと1/2の質問です。別の質問をする必要がある場合は、答えを渡してください。 –

関連する問題