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

?>

 

五、效果圖


實物效果圖

 


網頁效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM