用MicroPython制作家庭无线温湿度检测气象站

一、实验器件


1、TPYBoard v102 1块
2、TPYBoard v202 1块
3、Nokia 5110LCD显示屏 1块
4、DHT11温湿度传感器 1个
5、micro USB 数据线 2根
6、面包板 1块
7、杜邦线 若干
(该套件组合某宝可以买到)

 


二、实验步骤


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


三、实验方法


1、Nokia 5110 LCD显示屏说明


LCD5110是一款84x48 的点阵LCD,可以显示4 行汉字。采用串行接口与主处理器进行通信,支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据。

 


Nokia 5110 LCD共有8个引脚,不同的板子可能标注的英文略有不同,具体参照如下:

 

标注

功能

GND

接地

BL

背景灯

Vcc

3.3V

CLK

时钟信号

DIN

数据流

DC

当为0时表示命令状态,当为1时表示数据状态

CE

使能端

RST

RESET

 

2.DHT11温湿度说明


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

 


DHT11温湿度共有3个引脚,具体参照如下:

 

标注

功能

GND

接地

DATA

信号输入输出

Vcc

5V

 

四、接线方式


1、针脚对应图


DHT11和LCD5110的使用方法上面都介绍过了,接下来,就要动手和我们的TPYBoard v102
接起来了。


TPYBoard v102连接LCD5110

 

LCD5110

TPYBoard v102

RST

Y11

CE

Y10

DC

Y9

Din

X8

Clk

X6

Vcc

3.3V

BL

X4

GND

GND


 

 

 

 

 

 

 

 

 

 

 

 

 

TPYBoard v102连接DHT11

 

DHT11

TPYBoard v102

GND

GND

DATA

X12

VCC

VIN(5V)


 

 

 

 

 

 

TPYBoard v102连接TPYBoard v202

 

TPYBoard v202

TPYBoard v102

RX

Y1

TX

Y2


 

 

 

 

2、实物连接图

 


四、源代码


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_;

?>

 

五、效果图


实物效果图

 


网页效果图

 

posted @ 2018-09-11 15:57  小小su  阅读(3480)  评论(0编辑  收藏  举报