Co2 k30传感器不能与Raspberry pi 3一起使用

时间:2017-05-03 14:57:14

标签: python iot raspberry-pi3

我有以下用于检测CO2水平的代码。 以下是有关模型的一些信息。

CO2传感器 - K30 Raspberry Pi 3

我已经根据以下文件完成了pi和k-30之间的连接 http://www.co2meters.com/Documentation/AppNotes/AN137-K30-sensor-raspberry-pi-uart.pdf

下面是我的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)

我没有得到一致的输出。

我收到了以下内容

pi@raspberrypi:~/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
pi@raspberrypi:~/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
pi@raspberrypi:~/i2c $

感谢任何帮助吗?

1 个答案:

答案 0 :(得分:0)

  

high = ord(resp [3])

     

IndexError:字符串索引超出范围

这意味着对于该特定调用,字符串resp的长度为0,并且代码试图指向字符串的第3个元素。这就是为什么你的索引超出范围。

如果您尝试在每次迭代中看到len(rep),那么对于发生错误的特定迭代,您将得到0但是因为您在开头有数据意味着您至少能够读取序列端口。

可能的问题在于电源/ gnd的连接松动甚至传感器的RX / TX引脚。

你能分享一下你从PI3的串口获取数据到底做了什么,或尝试做:sudo chmod g + r / dev / ttyS0?