Python做智能家居温湿度报警系统


Posted in Python onSeptember 25, 2018

物联网技术开创了一个智慧城市的新时代,从智能摄像头到部署各种传感器,以此对城市各种数据进行收集,并经云端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,可全速写入显示数据。

Python做智能家居温湿度报警系统

LCD5110 显示屏共有8个引脚,不同的板子可能标注的英文略有不同,具体参照如下:

Python做智能家居温湿度报警系统

2 .  DHT11温湿度说明

DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

Python做智能家居温湿度报警系统

DHT11温湿度共有3个引脚-VCC,DATA,GND。

四、接线方式

1 .  针脚对应图

DHT11温湿度传感器和LCD5110显示屏的使用方法上面都介绍过了,接下来,就要动手和我们的TPYBoard v102 接起来了。

TPYBoard v102连接LCD5110显示屏

Python做智能家居温湿度报警系统

TPYBoard v102连接DHT11温湿度传感器

Python做智能家居温湿度报警系统

TPYBoard v102连接TPYBoard v202

Python做智能家居温湿度报警系统

2. 实物连接图

Python做智能家居温湿度报警系统

五、源代码

TPYBoard v102 源代码

Python做智能家居温湿度报警系统 

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. 实物效果图 

Python做智能家居温湿度报警系统

2. 网页效果图

Python做智能家居温湿度报警系统 

总结

以上所述是小编给大家介绍的Python做智能家居温湿度报警系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python tempfile模块学习笔记(临时文件)
May 25 Python
python新手经常遇到的17个错误分析
Jul 30 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
python之pandas用法大全
Mar 13 Python
Python高级property属性用法实例分析
Nov 19 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python 创建守护进程的示例
Sep 29 Python
Python实现FTP文件定时自动下载的步骤
Dec 19 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 Python
python+splinter自动刷新抢票功能
Sep 25 #Python
python+Splinter实现12306抢票功能
Sep 25 #Python
一百多行python代码实现抢票助手
Sep 25 #Python
python爬虫之自动登录与验证码识别
Jun 15 #Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 #Python
python绘制多个曲线的折线图
Mar 23 #Python
python使用Matplotlib绘制分段函数
Sep 25 #Python
You might like
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue实现计算器功能
2020/02/22 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
你懂得怎么写自荐信吗?
2013/12/27 职场文书
社会实践感言
2014/01/25 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
2015年度保密工作总结
2015/04/24 职场文书
民事申诉状范本
2015/05/20 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android