一、实验器件

  • 1、TPYBoard v102 1块
  • 2、TPYBoard v202 1块
  • 3、Nokia 5110LCD显示屏 1块
  • 4、DHT11温湿度传感器 1个
  • 5、micro USB 数据线 2根
  • 6、面包板 1块
  • 7、杜邦线 若干
二、实验步骤

  • 1、TPYBoard v102连接DHT11,采集温湿度信息;
  • 2、TPYBoard v102将采集到的温湿度信息显示在LCD5110上;
  • 3、TPYBoard v102通过串口将温湿度信息发送给TPYBoard v202;
  • 4、TPYBoard v202 将串口的数据读取出来,同时传递到服务器上。
三、实验方法

Nokia 5110 LCD显示屏说明LCD5110是一款84x48 的点阵LCD,可以显示4 行汉字。采用串行接口与主处理器进行通信,支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据。
Nokia 5110 LCD共有8个引脚,不同的板子可能标注的英文略有不同,具体参照如下:
DHT11温湿度说明DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。DHT11温湿度共有3个引脚,具体参照如下:
 四、接线方式

针脚对应图DHT11和LCD5110的使用方法上面都介绍过了,接下来,就要动手和我们的TPYBoard v102 接起来了。TPYBoard v102连接LCD5110
TPYBoard v102连接DHT11
TPYBoard v102连接TPYBoard v202
实物连接图
四、源代码

TPYBoard v102 源代码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 源代码只有1个main.py 文件:
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_;
?>

  

五、效果图

实物效果图
网页效果图

[Micropython]TPYBoard v202 v102+v202 家庭无线温湿度检测的更多相关文章

  1. [MicroPython]TPYBoard开发板DIY小型家庭气象站

    对于喜欢登山的人来说,都会非常关心自己所处的高度跟温度,海拔高度的测量方法,海拔测量一般常用的有两种方式,一是通过GPS全球定位系统,二是通过测出大气压,根据气压值算出海拔高度. BMP180是一直常 ...

  2. MicroPython TPYBoard v702实现HTTP应用功能

    [Micropython]TPYBoard v702 HTTP应用功能 转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:Micro ...

  3. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...

  4. [Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台

    一提到智能家庭,大家可能首先想到的是各种大佬级公司搞的牛逼产品,或者说是创新产品.想想就觉得很复杂,有的用工控机,有的用树莓派,还有的用arduino,不管用什么,都绕不过服务器进行控制,比如yeel ...

  5. [Micropython]TPYBoard v202 智能WIFI远控小车

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言---------------------- 之 ...

  6. MicroPython TPYBoard v102 无线红外遥控舵机(基于红外解/编码模块)

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 红外解码/编码模块介绍 模块上搭载了红外接收头.红外 ...

  7. micropython TPYBoard v202 超声波测距

    实验目的 了解超声波模块的工作原理 学习使用超声波模块测量距离 实验器材 TPYBoard v202 1块 超声波模块(HC-SR04)1个 micro USB数据线 1条 杜邦线 若干 超声波模块的 ...

  8. Micropython TPYBoard v102 温湿度短信通知器(基于SIM900A模块)

    前言 前段时间看了追龙2,感受就是如果你是冲着追龙1来看追龙2的话,劝你还是不要看了,因为追龙2跟追龙1压根没什么联系,给我的感觉就像是看拆弹专家似的,估计追龙2这个名字就是随便蹭蹭追龙1的热度来的. ...

  9. MicroPython TPYBoard v201 简易家庭气象站的实现过程

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 上一篇教程中我们实现了一个简单网页的显示.本篇 ...

随机推荐

  1. BZOJ1058: [ZJOI2007]报表统计(set)

    Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 4190  Solved: 1420[Submit][Status][Discuss] Descript ...

  2. Mysql sql 功能分类

    分类 DDL:数据定义语言,用于定义数据库对象,比如创建表,列,库等 DML:数据操作语言,用于添加.删除.修改数据 DQL:数据查询语言,用于查询(结果集是虚拟表,放在内存中) DCL:数据控制语言 ...

  3. Linux 进程调度的主要策略

    1.Linux 下进程分为5种类别,分别是停止类.截止类.实时类.公平类.空闲类, 每种类别都有一个运行队列,每次调度时,就是先按照类别优先级排序,再按照每个类别内的最高优先级任务调度运行. 文件:c ...

  4. View在测量时的MeasureSpec由什么决定?

    我们都知道系统要确定View的大小,首先得先获得MeasureSpec,再通过MeasureSpec来决定View的大小. MeasureSpec(32为int值)由两部分组成: SpecMode(高 ...

  5. Android为TV端助力 自定义view中findViewById为空的解决办法

    网上说的都是在super(context, attrs);构造函数这里少加了一个字段, 其实根本不只这一个原因,属于view生命周期的应该知道,如果你在 自定义view的构造函数里面调用findVie ...

  6. Android为TV端助力 deep link(深度链接)与自定义协议!

    此自定义仅供参考! 首先打开androidManifest.xml 在MainActivity中添加如下内容: <activity android:name=".MainActivit ...

  7. leetcode-26.删除重复数组中的重复项

    leetcode-26.删除重复数组中的重复项 题意 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数 ...

  8. 章节三、6-Getters-Setters和this关键字part02

    一.如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员,如下: //如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员 Car bm ...

  9. 安卓程序中手机后退键与标题栏后退键是不同的,前者回出发onBackPressed()函数,后者需要重重写temclick函数

    安卓程序中手机后退键与标题栏后退键是不同的,前者回出发onBackPressed()函数,后者需要重重写temclick函数

  10. 虚机抓取Hyper-V宿主的镜像流量(Windows Server 2012R2)

    1.将交换机流量镜像到Hyper-V宿主的一块网卡(eth4) 2.在Hyper-V宿主上新建虚拟交换机(Network_Mirror),选择外部网络,扩展属性中启用“Microsoft NDIS捕获 ...