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创建和使用字典实例详解
Nov 01 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
用Python抢过年的火车票附源码
Dec 07 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
python与字符编码问题
May 24 Python
python的faker库用法
Nov 28 Python
python requests模拟登陆github的实现方法
Dec 26 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
python文件排序的方法总结
Sep 13 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&amp;java(三)
2006/10/09 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php中对2个数组相加的函数
2011/06/24 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
微信自定义分享php代码分析
2016/11/24 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python write无法写入文件的解决方法
2019/01/23 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
市级文明单位申报材料
2014/05/07 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年教研工作总结
2014/12/06 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
承兑汇票延期证明
2015/06/23 职场文书
创业计划书之面包店
2019/09/17 职场文书