博客專欄

        EEPW首頁 > 博客 > MicroPython TPYBoard v201 簡易家庭氣象站的實(shí)現(xiàn)過程

        MicroPython TPYBoard v201 簡易家庭氣象站的實(shí)現(xiàn)過程

        發(fā)布人:bodasister 時(shí)間:2019-07-29 來源:工程師 發(fā)布文章
        前言

        上一篇教程中我們實(shí)現(xiàn)了一個(gè)簡單網(wǎng)頁的顯示。本篇呢,增加上溫濕、時(shí)間等信息的展示,實(shí)現(xiàn)一個(gè)簡單的家庭氣象站。

        TPYBoard v201實(shí)物圖:

        v201.jpg


        準(zhǔn)備工作


        硬件&工具


        - TPYBoard v201 開發(fā)板 1塊

        - TPYBoard v201 網(wǎng)絡(luò)參數(shù)配置的工具

        - 路由器、電腦、網(wǎng)線等

        - DHT11溫濕度模塊 1個(gè)

        - DS3231時(shí)鐘模塊 1個(gè)


        知識(shí)儲(chǔ)備


        - 了解基本的TCP、HTTP通信協(xié)議等相關(guān)的知識(shí)。不知道的可自行去百度,相關(guān)教程很多。

        - 掌握DHT11溫濕度模塊的使用方法。

        - 掌握DS3231時(shí)鐘模塊的使用方法。


        TPYBoard v201網(wǎng)絡(luò)參數(shù)配置


        USR-K2資料和工具下載: <https://github.com/TPYBoard/Documentation/blob/master/tpyboard_docs/tpyboard/tutorial/doc/USR-K2%E8%B5%84%E6%96%99.rar> 

        下載地址是在GitHub上,如果下載速度很慢的話,你也可以加TPYBoard技術(shù)交流群:157816561 文件里下載。


        首先,將TPYBoard v201開發(fā)板通過網(wǎng)線與你使用的電腦接入同一個(gè)局域網(wǎng)內(nèi)。雙擊運(yùn)行<USR-M0_V2.2.1.272.exe>,點(diǎn)擊搜索設(shè)備,成功的情況下會(huì)在上面的列表中顯示搜索到的設(shè)備。


        0.png


        點(diǎn)擊搜素到的設(shè)備,可以讀取到該設(shè)備的相關(guān)參數(shù)。同時(shí)也可以進(jìn)行修改并保存。接下來,我們要進(jìn)行IP地址、端口等設(shè)置。IP地址我這里設(shè)置了靜態(tài)IP<192.168.0.99>,防止每次重新啟動(dòng)時(shí)會(huì)改變IP。


        1.png


        接下來端口設(shè)置,模塊工作方式選擇TCP Server。大家可以注意到基礎(chǔ)設(shè)置中有一個(gè)HTTP服務(wù)端口的設(shè)置,是因?yàn)閁SR-K2中本身就有一個(gè)內(nèi)嵌的網(wǎng)頁用于參數(shù)的設(shè)置,默認(rèn)是啟用了80端口,那我們下面開啟的TCP Server的服務(wù)端口就使用81端口吧。


        2.png


        設(shè)置完畢后,點(diǎn)擊軟件最下方的保存設(shè)置。左側(cè)的操作日志顯示框會(huì)顯示保存的進(jìn)度和狀態(tài)。


        3.png


        這時(shí)再重新搜索設(shè)備,驗(yàn)證下模塊的IP地址是否和我們設(shè)置的一致。


        4.png



        接線說明


        *進(jìn)行器件接線時(shí),請先斷開開發(fā)板的電源,防止接錯(cuò)導(dǎo)致器件燒壞。*


          

        程序?qū)崿F(xiàn)


        TPYBoard  v201通過板子上的串口6與USR-K2模塊之間通信。我們不用去管TCP鏈接等問題,只需要將想要發(fā)送的數(shù)據(jù)通過串口6發(fā)送給K2模塊即可。其實(shí)我們的程序主要就是讀取和寫入串口的工作,當(dāng)我們從串口讀取到HTTP請求報(bào)文時(shí),開始采集DHT11和DS3231的數(shù)據(jù),采集完成后組成一個(gè)完整的響應(yīng)報(bào)文寫入到串口發(fā)送回去就可以了。


        這里只展示main.py文件,其中里面還需要DHT11和DS3231的驅(qū)動(dòng)文件,文章末有下載鏈接大家可自行下載參考。


        main.py 源碼:

        import pyb
        from pyb import Timer,UART
        from ds3231 import DS3231
        from dht11 import DHT11
        
        #串口6初始化
        uart = UART(6,115200,timeout = 100)
        #響應(yīng)報(bào)文
        header = """
        HTTP/1.1 200 OK
        Content-Type:text/html
        Content-Length:{0}
        
        {1}
        """
        #HTML頁面
        html = """
        <html>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <head> <title>TPYBoard v201</title> </head>
            <body>
                <h1>TPYBaord 家庭氣象站</h1><br />
                <p>時(shí)間:{}</p>
                <p>溫度:{}</p>
                <p>濕度:{}</p>
            </body>
        </html>
        """
        
        #------------------------DS3231----------------------------------#
        ds=DS3231(2) #設(shè)置DS3231為I2C2接口,對應(yīng)SCL-Y9,SDA-Y10
        #初始日期和時(shí)間,設(shè)置一次即可
        #ds.DATE([19,7,27])   #設(shè)置初始日期年、月、日
        #ds.TIME([14,50,0])   #設(shè)置初始時(shí)間時(shí)、分、秒
        #------------------------DHT11----------------------------------#
        d = DHT11('X12')
        
        def updateDisplay():
        
            DATE = [str(i) for i in ds.DATE()] #將返回的時(shí)間數(shù)據(jù)int轉(zhuǎn)str
            TIME = [str(i) for i in ds.TIME()]
            time = '-'.join(DATE) + ' ' + ':'.join(TIME) #讀取日期和時(shí)間,拼接成正常的時(shí)間格式
            data = d.read_data()             #讀取溫濕度的值
            return time,data
        
        while True:
            if uart.any() > 0:
                request = uart.read().decode()
                print('request:',request)
                #當(dāng)接收到GET請求頭時(shí),進(jìn)行響應(yīng).同時(shí)把favicon.ico請求過濾掉
                if request.find('GET') > -1 and request.find('favicon.ico') < 0:
                    time,data = updateDisplay()
                    print(data)
                    HTML = html.format(time,data[0],data[1])
                    #print(HTML)
                    uart.write(header.format(len(HTML),HTML))


        保存代碼。打開瀏覽器,輸入U(xiǎn)RL進(jìn)行訪問。URL=ip:81,例如我的URL就是192.168.0.99:81。

        6.png


        如果訪問時(shí)頁面出現(xiàn)了亂碼,主要有以下地方需要注意下:


        - 1.main.py文件的編碼格式修改為UTF-8 無BOM格式;

        - 2.代碼中的HTML字符串中需要添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        - 3.通過瀏覽器開發(fā)者工具查看,接收到的Response體是否完整。


        大家可以依照本實(shí)驗(yàn)的基礎(chǔ)加上自己喜歡的顯示屏,然后用紙盒等包裝起來,DIY一個(gè)超棒的家庭氣象站。同時(shí)也可以做一個(gè)路由器映射,這樣就可以隨時(shí)隨地查看家里的環(huán)境信息了。


        下載源碼:https://github.com/TPYBoard/TPYBoard-v201


        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。

        dc相關(guān)文章:dc是什么


        pwm相關(guān)文章:pwm是什么


        51單片機(jī)相關(guān)文章:51單片機(jī)教程


        單片機(jī)相關(guān)文章:單片機(jī)教程


        單片機(jī)相關(guān)文章:單片機(jī)視頻教程


        單片機(jī)相關(guān)文章:單片機(jī)工作原理




        關(guān)鍵詞:

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 榆林市| 桦南县| 海南省| 北辰区| 博野县| 婺源县| 云南省| 金乡县| 浮梁县| 安图县| 东方市| 凤冈县| 蒲城县| 泸水县| 东乡族自治县| 齐齐哈尔市| 武威市| 鹿邑县| 南涧| 隆化县| 苏尼特右旗| 涞水县| 金昌市| 特克斯县| 梅州市| 镇巴县| 惠州市| 峨眉山市| 乐陵市| 灵宝市| 宁河县| 大兴区| 胶州市| 武穴市| 晋州市| 宣武区| 嵊州市| 高台县| 安塞县| 弋阳县| 浦城县|