基于Python与TPYBoard的智能家居温湿度监控报警系统
本文详细介绍如何利用Python语言及TPYBoard系列开发板构建一套低成本智能家居温湿度报警系统。通过TPYBoard v102采集DHT11传感器数据并在LCD5110显示,经由v202(ESP8266模块)通过HTTP协议上传至云端服务器,实现远程实时监控与报警功能。
物联网技术正推动智慧城市进入全新阶段,从智能摄像头到遍布各处的传感器,城市各类数据得以收集,并经云端AI处理后,显著提升了交通与街道等公共管理效率。与此同时,物联网的发展也催生了智能家居的新模式,智能机器人、智能冰箱、智能电视等产品相继问世,让智能家居逐渐走进大众生活。本文将演示如何使用Python基于HTTP协议搭建一套低成本的温湿度报警系统。
物联网应用通常包含数据采集与处理两个环节。本方案选用TPYBoard v102作为核心处理设备。为实现无线数据传输,我们搭配使用搭载ESP8266模块的TPYBoard v202,通过Wi-Fi将数据传至云端。数据采集端采用简单的DHT11温湿度传感器,显示端则选用性价比高的5110液晶显示屏。这些主要组件均可在电商平台购得,结合使用即可实现数据的云端查看与本地实时显示,随时掌握环境温湿度状况。
一、 实验器材
1. TPYBoard v102 开发板 1块 2. TPYBoard v202(含ESP8266模块) 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点的点阵液晶显示屏,支持显示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. 网页效果图
总结
以上介绍了基于Python的智能家居温湿度报警系统的搭建过程,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。在此感谢大家对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









