echarts 湿度_使用树莓派+DHT22做一个温湿度计

先上一些照片。

硬件:树莓派+DHT22温湿度传感器(白色的那个就是)。

e800fdee0aaba89f4d7690f588d7b411.png

网页,显示当前时间、最新一条监测记录。

000239dfcaedb0440be1907d1634c534.png

传感器记录写入DB程序。

aba957dfe3fdbb5da63032ef3dd669ce.png

一个简单的查询数据程序。

cfc6a644ed77fab8c982a35983af2ec7.png

整个程序下来,涉及了:

树莓派、DHT22温湿度传感器、Python3、SQLite3、Nginx、JQuery。


缘起:

因为疫情原因,在家的时间比较长,一直是在书房工作学习。偶尔去趟客厅,现在天热,客厅朝南,又没开空调,就比较闷热潮湿。我就比较想知道客厅的温湿度。

家里倒是有个物理温湿度计,就是这玩意儿:

654e12fd060c8e547af1028b8e4c017b.png

不过作为一个IT男,数据不数码化,总觉得很不爽,所以就动了心思买个电子温度计,家里小米的多,就想买这个:

579865fdc3f081a100367086f4c4ee0c.png

但是现在穷的叮当响,又恰好翻箱底的时候,翻出了我的老树莓派——确实很老了,是很多年前,刚出来的时候买的,GPIO引脚还是26针的,配套的SD卡也找着了,因为这款没有WIFI,恰好又有富余的网线,一装系统还能运行,所以干脆就自己搞吧。


过程:不能放外链,大家想用就搜搜吧。

1、安装系统:

1.1 格式化SD卡:去SD官方网站下载专门的格式化工具

bee2b805d464ad4b3a8739da19831ea9.png

1.2 安装树莓派系统:

下载烧录程序

effbc56eeb387612d496dd55ddc44560.png

下载系统

440c1ffe337205b953a0aec670ccbdba.png

分别是:桌面+命令行版、桌面版、命令行版。我选的是第一个,回头可以在配置里将启动改为进入命令行界面。

烧录:

d3946bacb8599a4db8c5a8611725c69b.png

这个没啥了,选系统镜像,选SD卡,写入。


1.2 系统配置:

升级:

sudo apt-get updatesudo apt-get dist-upgrade

通过桌面首选项,可以打开VNC、SSH服务。

VNC是桌面连接,我们在电脑上用VNC Viewer可以访问树莓派桌面。

SSH是远程命令行访问,在终端上使用命令"ssh pi@树莓派IP"即可。

安装Python3.

安装Nginx、安装SQLite。

安装ufw防火墙,打开端口:

sudo ufw allow 80#Nginx端口sudo ufw allow 8080#Python的HTTP服务接口sudo ufw allow 22#SSH端口sudo ufw allow 5900#VNC端口

2、硬件安装:

去某宝买了DHT22温湿度传感器+杜邦线,20块钱,从汕头发过来的。

传感器一共有三个针脚“+、-、out”

我的树莓派比较老旧,只有26个针脚:

c6171ef3e4b16a607c27ee37e912ff91.png

如图,+接入3.3v,-接入Ground,out接入GPIO2。

正负极可不能接反了,会烧的。


3、程序:

3.1 创建数据库、表:

#!/usr/bin/pythonimport sqlite3conn=sqlite3.connect('temper.db')print("Open temperDB")c = conn.cursor()c.execute('''CREATE TABLE temper       (ID INTEGER PRIMARY KEY   autoincrement,       create_time DEFAULT (datetime('now', 'localtime')),       temp            CHAR(50)     NOT NULL,       humi        CHAR(50) NOT NULL);''')print('Table created successfully')conn.commit()conn.close()

3.2 下载读取传感器相关驱动:

sudo apt-get install build-essential python-devgit clone https://github.com/adafruit/Adafruit_Python_DHT.gitcd Adafruit_Python_DHTsudo python3 setup.py install

3.3 每隔10分钟,读取传感器记录写入到数据库

#!/usr/bin/pythonimport Adafruit_DHTfrom datetime import datetimeimport timeimport sqlite3sensor = Adafruit_DHT.DHT22#pin = 'P8_11'pin = 2def timer(n):    while True:        humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)        if humidity is not None and temperature is not None:            print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))            print('温度={0:0.1f}*C  湿度={1:0.1f}%'.format(temperature, humidity))            conn = sqlite3.connect('temper.db')            c = conn.cursor()            c.execute("INSERT INTO temper (temp,humi) VALUES ("+'{0:0.1f}'.format(temperature)+","+'{0:0.1f}'.format(humidity)+")")            conn.commit()            conn.close()        else:            print('Failed to get reading. Try again!')        time.sleep(n)timer(600)

3.4 Python服务端,返回JSON格式的最新记录:

#!/usr/bin/pythonfrom http.server import HTTPServer, BaseHTTPRequestHandlerimport jsonimport sqlite3host = ('0.0.0.0', 8080)#开8080端口class Resquest(BaseHTTPRequestHandler):    def do_GET(self):        self.send_response(200)        self.send_header('Content-type', 'application/json')        self.send_header('Accexx-Control-Allow-Origin','*')#解决跨域问题        self.end_headers()        conn = sqlite3.connect('temper.db')        c = conn.cursor()        cursor = c.execute("SELECT *  from temper order by id desc limit 0,1")        for row in cursor:            data = {'id':row[0],'time':row[1],'temp':row[2],'humi':row[3]}        result="returnTemp("+json.dumps(data)+")"        self.wfile.write(result.encode())if __name__ == '__main__':    server = HTTPServer(host, Resquest)    print("Starting server, listen at: %s:%s" % host)    server.serve_forever()

3.5 网页

编辑/var/www/html/index.nginx-debian.html

温湿度计

4、启动:

分别启动Nginx、dht.py、serv.py

访问网页http://192.168.31.88

504630ee7e08dcc0c925bccbded8b4d8.png

5、一些问题:

因为我毕竟是搞Java服务端开发的,用Python也只是处理一下数据,页面跨域的问题在实际工作中,运维人员就解决了,所以搞这一块有点手生,不过也是很快解决了。

本来我想让开机自启动的,但是查了不少资料,做了不少测试,总是有问题,所以暂时也不弄,就这么跑者吧。


6、后续的一些规划:

因为数据都入库了,我准备使用ECharts,将历史数据做一个折线图。

另外某宝上也看了墨水屏,可以接到树莓派上,将网页上的信息展示在上面。不过那玩意儿也太贵了,4.2寸的要快200了,舍不得啊。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值