美文网首页
树莓派上利用python读取传感器DHT11的温湿度

树莓派上利用python读取传感器DHT11的温湿度

作者: 刘小白DOER | 来源:发表于2021-01-23 14:58 被阅读0次

       昨晚测试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)

    数据库结构如下:

    相关文章

      网友评论

          本文标题:树莓派上利用python读取传感器DHT11的温湿度

          本文链接:https://www.haomeiwen.com/subject/pdkyzktx.html