内容简介:物联网技术开创了一个智慧城市的新时代,从智能摄像头到部署各种传感器,以此对城市各种数据进行收集,并经云端AI技术处理后,有助于提高对交通和街道等城市公共管理能力;物联网的发展也为智能家居带来了新的玩法,智能机器人,智能冰箱,智能电视等相继推出,智能家居离我们越来越近。下面带大家用Python通过HTTP协议做一个廉价的温湿度报警系统。
*本文作者:小柠檬Emm,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
物联网技术开创了一个智慧城市的新时代,从智能摄像头到部署各种传感器,以此对城市各种数据进行收集,并经云端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 如下:
#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 如下:
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)
服务器源码
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. 网页效果图
这样我们就可以即可通过网络读取温湿度,又可以通过显示屏读取温湿度了,自己动手做一个属于自己的物联网应用吧!!!!!!!!!
*本文作者:小柠檬Emm,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
以上所述就是小编给大家介绍的《厉害了!Python竟然可以做智能家居温湿度报警系统》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 【监控系统】配合Graphite使用的报警系统
- 极简监控报警系统
- Prometheus配合Alertmanager报警系统
- Prometheus 与 Grafana:监控报警系统中的银弹
- 马蜂窝大交通业务监控报警系统架构设计与实现
- 谈谈业务系统的监控报警
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Haskell School of Music
Paul Hudak、Donya Quick / Cambridge University Press / 2018-10-4 / GBP 42.99
This book teaches functional programming through creative applications in music and sound synthesis. Readers will learn the Haskell programming language and explore numerous ways to create music and d......一起来看看 《The Haskell School of Music》 这本书的介绍吧!