2015-09-30 82 views
0

我有一個傳感器類型DHT22連接到樹莓。 我在Python編寫的腳本,但是當我運行它,我得到的錯誤DHT傳感器Python腳本錯誤

#!/usr/bin/python 
import MySQLdb 
import subprocess 
import re 
import sys 
import time 
import datetime 
import Adafruit_DHT 

conn = MySQLdb.connect("localhost","zeus","gee3g673r","logi") 
while(True): 
date = time.strftime("%d/%m/%Y") 
clock = time.strftime("%H:%M") 

#output = subprocess.check_output(["/usr/bin/AdafruitDHT.py 2302", "4"]); 
output = Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, 4) 
matches = re.search("Temp =\s+([0-9.]+)", output) 
if (not matches): 
time.sleep(0) 
continue 
temp = float(matches.group(1)) 

matches = re.search("Hum =\s+([0-9.]+)", output) 
if (not matches): 
time.sleep(0) 
continue 
humidity = float(matches.group(1)) 

# MYSQL DATA Processing 
c = conn.cursor() 

c.execute("INSERT INTO data_th (date, clock, temp, hum) VALUES (%s, %s,%s, %s)",(date, clock, temp, humidity)) 

#print "DB Loaded" 

time.sleep(360) 

這是運行腳本中遇到的錯誤:

[email protected]:/home# ./hdt.py 
Traceback (most recent call last): 
File "./dht.py", line 22, in <module> 
matches = re.search("Temp =\s+([0-9.]+)", output) 
File "/usr/lib/python2.7/re.py", line 142, in search 
return _compile(pattern, flags).search(string) 
TypeError: expected string or buffer 
+0

我發現的唯一的事情是你做你的正則表達式中的字符串。我通常使用這樣的原始字符串方法:'searchObj = re.search(r'(。*)是(。*?)。*',line,re.M | re.I)' –

+0

您的輸出可能是不正確的類型。你能強制它串起來嗎? '再版(輸出)'? –

回答

0

Adafruit_DHT.read_retry()不返回字符串。 re.search期望字符串作爲第二個參數。

請看看下面的代碼(從Adafruit_Python_DHT/examples拍攝):

# Try to grab a sensor reading. Use the read_retry method which will retry up 
# to 15 times to get a sensor reading (waiting 2 seconds between each retry). 
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) 

# Un-comment the line below to convert the temperature to Fahrenheit. 
# temperature = temperature * 9/5.0 + 32 

# Note that sometimes you won't get a reading and 
# the results will be null (because Linux can't 
# guarantee the timing of calls to read the sensor). 
# If this happens try again! 
if humidity is not None and temperature is not None: 
    print 'Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity) 
else: 
    print 'Failed to get reading. Try again!' 
    sys.exit(1)