博客專欄

        EEPW首頁 > 博客 > MicroPython TPYBoard v201 簡單的web服務器實現(xiàn)過程

        MicroPython TPYBoard v201 簡單的web服務器實現(xiàn)過程

        發(fā)布人:bodasister 時間:2019-07-22 來源:工程師 發(fā)布文章

        前言

        TPYBoard v201開發(fā)板上搭載了以太網轉TTL串口模塊(USR-K2),從而實現(xiàn)了TCP通信的功能。既然可以TCP通信,自然也可以實現(xiàn)HTTP協(xié)議通信。于是,就萌發(fā)了本教程。本教程很簡單,僅是實現(xiàn)了一個簡單的靜態(tài)頁面,希望可以給大家?guī)聿灰粯拥膯l(fā)。

        TPYBoard v201實物圖:

        v201.jpg

        準備工作

        硬件&工具

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

        - TPYBoard v201 網絡參數配置的工具

        - 路由器、電腦、網線等

        知識儲備

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

        TPYBoard v201網絡參數配置

        USR-K2資料和工具下載: 點擊下載

        下載地址是在GitHub上,如果下載速度很慢的話,你也可以加TPYBoard技術交流/*裙*/;157816561 文件里下載。


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

        0.png

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

        1.png

        接下來端口設置,模塊工作方式選擇TCP Server。大家可以注意到基礎設置中有一個HTTP服務端口的設置,是因為USR-K2中本身就有一個內嵌的網頁用于參數的設置,默認是啟用了80端口,那我們下面開啟的TCP Server的服務端口就使用81端口吧。

        2.png

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

        3.png

        這時再重新搜索設備,驗證下模塊的IP地址是否和我們設置的一致。

        4.png

        程序實現(xiàn)

        TPYBoard  v201通過板子上的串口6與USR-K2模塊之間通信。我們不用去管TCP鏈接等問題,只需要將想要發(fā)送的數據通過串口6發(fā)送給K2模塊即可。其實我們的程序主要就是讀取和寫入串口的工作,當我們從串口讀取到HTTP請求報文時,組成一個簡單的響應報文寫入到串口發(fā)送回去就可以了。

        main.py 源碼:

        import pyb
        from pyb import UART
        
        #串口6初始化
        uart = UART(6,115200,timeout = 100)
        #響應報文
        header = """
        HTTP/1.1 200 OK
        Content-Type:text/html
        Content-Length:{0}
        
        {1}
        """
        #HTML頁面
        html = """<!DOCTYPE html>
        <html>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <head> <title>TPYBoard</title> </head>
            <body>
              <h1>TPYBoard v201</h1><br />
              <h2>Simple HTTP server</h2>
            </body>
        </html>
        """
        
        while True:
            if uart.any() > 0:
                request = uart.read().decode()
                print('request:',request)
                #當接收到GET請求頭時,進行響應
                if request.find('GET') > -1:
                    data = header.format(len(html),html)
                    uart.write(data)

        保存代碼。打開瀏覽器,輸入URL進行訪問。URL=ip:81,例如我的URL就是192.168.0.99:81。

        1563777258990186.png

        PuTTY中打印了接收到的請求頭的數據,如下:

           request: GET / HTTP/1.1
            Host: 192.168.0.99:81
            Connection: keep-alive
            Cache-Control: max-age=0
            Upgrade-Insecure-Requests: 1
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.7 Safari/537.36
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
            Accept-Encoding: gzip, deflate
            Accept-Language: zh-CN,zh;q=0.9

        我用的是谷歌瀏覽器,不同瀏覽器可能會有些不同,但是大同小異,只要符合HTTP請求報文格式即可,有興趣的朋友可以多去了解些。細心的朋友會注意到,每次訪問時瀏覽器會發(fā)送兩次請求,其中有一個 GET /favicon.ico HTTP/1.1,這是因為瀏覽器想找favicon.ico文件作為訪問網頁的圖標,這個可以忽略掉,不影響功能。也可以在程序中進行過濾。


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

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



        關鍵詞:

        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 南开区| 铜陵市| 当涂县| 新沂市| 武宣县| 板桥市| 历史| 元阳县| 城步| 南江县| 亳州市| 巨鹿县| 绵阳市| 永安市| 翁牛特旗| 惠水县| 亳州市| 北海市| 法库县| 邵阳市| 聂荣县| 怀安县| 舞钢市| 永州市| 丹棱县| 嵩明县| 昌宁县| 吉隆县| 阿坝县| 汶川县| 青岛市| 焦作市| 桓台县| 合肥市| 锡林郭勒盟| 蚌埠市| 阿拉尔市| 福海县| 登封市| 巴林左旗| 子长县|