物联网技术开创了一个智慧城市的新时代,从智能摄像头到部署各种传感器,以此对城市各种数据进行收集,并经云端ai技术处理后,有助于提高对交通和街道等城市公共管理能力;物联网的发展也为智能家居带来了新的玩法,智能机器人,智能冰箱,智能电视等相继推出,智能家居离我们越来越近。下面带大家用python通过http协议做一个廉价的温湿度报警系统。
物联网应用需要检测设备和处理设备,我们选用tpyboard v102作为中心处理设备。为了方便我选择用无线传输,选了tpyboard v202(esp8266模块)用wifi来往云端传输数据,检测设备我们用一个比较简单的温湿度检测模块-dht11温湿度传感器,显示设备我们就用廉价的显示屏-5110液晶显示屏,这些是主要的设备,在某宝上都能买得到,通过这些我们就可以做到网上看数据,现实看数据了,了解当前的温度和湿度了。
一、 实验器材
1.tpyboard v102 1块
2.tpyboard v202 1块
3.lcd5110显示屏 1块
4.dht11温湿度传感器 1个
5.安卓数据线 2条
6.面包板 1块
7.杜邦线 若干
二、实验步骤
1.用tpyboard v102连接dht11温湿度传感器采集温湿度信息;
2.将采集到的温湿度信息显示在lcd5110上;
3.将采集到的温湿度信息通过tpyboard v102发送给tpyboard v202;
4.通过tpyboard v202 将串口的数据读取出来,同时传到服务器上
5.通过网页的形式显示采集到的实时温湿度
三、实验方法
1. lcd 5110显示屏说明
lcd5110是一款84×48 的点阵lcd,可以显示4 行汉字。采用串行接口与主处理器进行通信,支持多种串行通信协议(如avr 单片机的spi等),传输速率高达4mbps,可全速写入显示数据。
lcd5110 显示屏共有8个引脚,不同的板子可能标注的英文略有不同,具体参照如下:
2 . dht11温湿度说明
dht11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%rh, 温度+-2℃,量程湿度20-90%rh, 温度0~50℃。
dht11温湿度共有3个引脚-vcc,data,gnd。
四、接线方式
1 . 针脚对应图
dht11温湿度传感器和lcd5110显示屏的使用方法上面都介绍过了,接下来,就要动手和我们的tpyboard v102 接起来了。
tpyboard v102连接lcd5110显示屏
tpyboard v102连接dht11温湿度传感器
tpyboard v102连接tpyboard v202
2. 实物连接图
五、源代码
tpyboard v102 源代码
main.py 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#main.py import pyb import upcd8544 from machine import spi,pin from dht11 import dht11 def main(lcd_5110,dht,uart6): data_ = dht.read_data() lcd_5110.lcd_write_string( ' ' , 0 , 1 ) #添加一个分隔行 lcd_5110.lcd_write_string( 'temp:' + str (data_[ 0 ]), 2 , 2 ) lcd_5110.lcd_write_string( ' ' , 0 , 3 ) lcd_5110.lcd_write_string( ' hum:' + str (data_[ 1 ]), 2 , 4 ) uart6.write( str (data_[ 0 ]) + ',' + str (data_[ 1 ])) #通过串口将数据发送给v202 if __name__ = = '__main__' : #init uart u6 = pyb.uart( 6 , 115200 ) #init dht11 dht = dht11( 'x12' ) #init lcd5110 spi = pyb.spi( 1 ) rst = pyb.pin( 'y11' ) ce = pyb.pin( 'y10' ) dc = pyb.pin( 'y9' ) light = pyb.pin( 'x4' ) #din=>x8-mosi/clk=>x6-sck #din =>spi(1).mosi 'x8' data flow (master out, slave in) #clk =>spi(1).sck 'x6' spi clock lcd_5110 = upcd8544.pcd8544(spi, rst, ce, dc, light) lcd_5110.lcd_write_string( 'tpyboard v102' , 1 , 0 ) while true: main(lcd_5110,dht,u6) pyb.delay( 2000 ) |
tpyboard v202 源代码
main.py 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import machine import network import socket from machine import pin from machine import uart import time u2 = uart( 0 , 115200 ) #串口初始化 led = pin( 2 , pin.out).value( 1 ) #板载小蓝灯 默认关闭 def http_get(temp,hum): url = 'http://www.tpyboard.com/esp8266/sensortest.php?t=' + temp + '&h=' + hum + '' _, _, host, path = url.split( '/' , 3 ) addr = socket.getaddrinfo(host, 80 )[ 0 ][ - 1 ] s = socket.socket() s.connect(addr) s.send(bytes( 'get /%s http/1.0\r\nhost: %s\r\n\r\n' % (path, host), 'utf8' )) while true: data = s.recv( 50 ) if data: recive = str (data, 'utf8' ).upper() #print(str(data, 'utf8'), end='') if (recive.find( 'yes' )> - 1 ): print ( 'send data ok' ) else : break s.close() def do_connect(): wlan = network.wlan(network.sta_if) wlan.active(true) if not wlan.isconnected(): print ( 'connecting to network...' ) wlan.connect( 'ssid' , 'pwd' ) while not wlan.isconnected(): pass print ( 'network config:' , wlan.ifconfig()) do_connect() led = pin( 2 , pin.out).value( 0 ) #连接wifi成功 点亮led while 1 : data_ = u2.readall() if data_! = none: data_ = data_.decode( 'utf8' ) #数组转成字符串 data_a = data_.split( ',' ) #分割 temp_ = str (data_a[ 0 ]) #温度 hum_ = str (data_a[ 1 ]) #湿度 http_get(temp_,hum_) #发送给服务器 time.sleep( 2 ) |
服务器源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
sensordata.php 文件内容如下: <!doctype html> <html> <head> <meta charset = "utf-8" > <title>温湿度传感器实验< / title> <script type = "text/javascript" > var t; var te_html_str = "n/a" ; function timedcount() { <?php $myfile = fopen( "sensor.txt" , "r" ); $txt = fread($myfile,filesize( "sensor.txt" )); fclose($myfile); if ($txt! = "") { echo "te_html_str='" .$txt. "';" ; } ?> document.getelementbyid( 'test' ).innerhtml = te_html_str; t = settimeout( "javascript:location=location;" , 1000 ) } < / script> < / head> <body onload = "timedcount()" > <center> <div style = "margin-top:80px" > <h2>tpyboardv202_温湿度传感器实验< / h2> <div id = "test" >< / div> < / div> < / center> < / body> < / html> sensortest.php 文件内容如下: <?php $time_ = "获取时间:" .date( 'y-m-d h:i:s' ); $data_ = "传感器数据:sensor error!" ; $state_ = "no" ; if (is_array($_get)&&count($_get)> 1 ) { $data_ = ""; / / 获取温度 if (isset($_get[ "t" ])) { $para = $_get[ "t" ]; $data_. = "传感器数据:温度:" .$para. " ℃ - " ; } / / 获取湿度 if (isset($_get[ "h" ])) { $para = $_get[ "h" ]; $data_. = "湿度:" .$para. " % " ; $state_ = "yes" ; } } $myfile = fopen( "sensor.txt" , "w" ); $txt = $time_. "<br /><br />" .$data_; fwrite($myfile, $txt); fclose($myfile); echo $state_; ?> |
六、效果图
1. 实物效果图
2. 网页效果图
总结
以上所述是小编给大家介绍的python做智能家居温湿度报警系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://4hou.win/wordpress/