树莓派上利用python读取传感器DHT11的温湿度
昨晚测试Python操作dht11传感器失败!本来想着利用树莓派,传感器,数据库搭建一个机房环境监控系统,卡在了python读取数据上,怎么读取数据都是有问题。世上无难事,只要肯放弃,决定暂时放弃实验。
本来通过C语言是可以正常读取的,为啥不试试C语言开写入mysql数据库呢。于是准备试试C语言来操作MySQL数据库!太底层的语言了,在github上搜搜现成的代码来试试,说来也巧,找到一个DHT11 Python library,哈哈哈哈!github真是生产力工具!
DHT11传感器接入树莓派和我的上一篇文章一样。

接下里就是克隆代码啦。
sudo git clone https://github.com/szazo/DHT11_Python.git
当然也可以进入github仓库DHT11_Python,按照说明pip install dht11来安装使用。
进入目录。
cd DHT11_Python
修改示例代码的针脚pin值。
sudo nano example.py,将默认的14修改成18,因为gpio的bcm编码是18。

接下里就是运行程序了,大功告成,开源万岁!

利用python将读取到的数据存入mysql数据库,方便对外提供温湿度数据。
整体代码如下:
import RPi.GPIO as GPIO
import MySQLdb
import dht11
import time
import datetime
db = MySQLdb.connect("localhost", "phpmyadmin", "phpmyadmin", "dht11", charset='utf8' )
cursor = db.cursor()
# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
# read data using pin 14
instance = dht11.DHT11(pin=18)
try:
while True:
result = instance.read()
if result.is_valid():
print("Last valid input: " + str(datetime.datetime.now()))
#print(result.humidity)
print("Temperature: %-3.1f C" % result.temperature)
print("Humidity: %-3.1f %%" % result.humidity)
#有误,请看下面的阐述
sql = """INSERT INTO data(temperature, humidity)
VALUES (result.temperature, result.humidity)"""
try:
cursor.execute(sql)
db.commit()
except:
# Rollback in case there is any error
db.rollback()
time.sleep(6)
except KeyboardInterrupt:
print("Cleanup")
GPIO.cleanup()
db.close()
在实践中发现sql语句执行有问题,居然插入数据失败。
sql = """INSERT INTO data(temperature, humidity) VALUES (result.temperature, result.humidity)"""
把result.temperature, result.humidity两个值换成具体的数值,比如12.9可以。这两个数据我看了里面的class是float类型,不知道为啥有问题插入不了数据库!再去python操作数据库的知识看了看,原来是sql语句里面是无法识别参数值的,于是修改成这样后就正常了:
sql = """INSERT INTO data(temperature, humidity)
VALUES (%-3.1f, %-3.1f)""" % (result.temperature,result.humidity)
数据库结构如下:
