这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 用MicroPython制作家庭无线温湿度检测气象站

共1条 1/1 1 跳转至

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

助工
2018-09-11 15:49:37     打赏

    一、实验器件


    1、TPYBoard v102 1块

    2、TPYBoard v202 1块

    3、Nokia 5110LCD显示屏 1块

    4、DHT11温湿度传感器 1个

    5、micro USB 数据线 2根

    6、面包板 1块

    7、杜邦线 若干

    (该套件组合某宝可以买到)


1.png


    二、实验步骤


    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,可全速写入显示数据。


2.jpg


    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℃。


3.jpg


    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 源代码


6.png


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

?>


    五、效果图


    实物效果图


7.jpg


    网页效果图


8.png



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]