天天看點

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

前言

TPYBoard v201開發闆上搭載了以太網轉TTL序列槽子產品(USR-K2),進而實作了TCP通信的功能。既然可以TCP通信,自然也可以實作HTTP協定通信。于是,就萌發了本教程。本教程很簡單,僅是實作了一個簡單的靜态頁面,希望可以給大家帶來不一樣的啟發。

TPYBoard v201實物圖:

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

準備工作

硬體&工具

TPYBoard v201 開發闆 1塊

TPYBoard v201 網絡參數配置的工具

路由器、電腦、網線等

知識儲備

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

TPYBoard v201網絡參數配置

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

下載下傳位址是在GitHub上,如果下載下傳速度很慢的話,你也可以加TPYBoard技術交流/裙/;157816561 檔案裡下載下傳。

首先,将TPYBoard v201開發闆通過網線與你使用的電腦接入同一個區域網路内。輕按兩下運作,點選搜尋裝置,成功的情況下會在上面的清單中顯示搜尋到的裝置。

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

點選搜素到的裝置,可以讀取到該裝置的相關參數。同時也可以進行修改并儲存。接下來,我們要進行IP位址、端口等設定。IP位址我這裡設定了靜态IP<192.168.0.99>,防止每次重新啟動時會改變IP。

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

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

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

設定完畢後,點選軟體最下方的儲存設定。左側的記錄檔顯示框會顯示儲存的進度和狀态。

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

這時再重新搜尋裝置,驗證下子產品的IP位址是否和我們設定的一緻。

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

程式實作

TPYBoard v201通過闆子上的序列槽6與USR-K2子產品之間通信。我們不用去管TCP連結等問題,隻需要将想要發送的資料通過序列槽6發送給K2子產品即可。其實我們的程式主要就是讀取和寫入序列槽的工作,當我們從序列槽讀取到HTTP請求封包時,組成一個簡單的響應封包寫入到序列槽發送回去就可以了。

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 = """

TPYBoard

TPYBoard v201

Simple HTTP server

"""

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。

micropython 網頁伺服器,MicroPython TPYBoard v201 簡單的web伺服器實作過程

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請求封包格式即可,有興趣的朋友可以多去了解些。細心的朋友會注意到,每次通路時浏覽器會發送兩次請求,其中有一個 GET /favicon.ico HTTP/1.1,這是因為浏覽器想找favicon.ico檔案作為通路網頁的圖示,這個可以忽略掉,不影響功能。也可以在程式中進行過濾。