轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流群:157816561,公眾號:MicroPython玩家匯
前言
TPYBoard v201開發板上搭載了乙太網轉TTL串列埠模組(USR-K2),從而實現了TCP通訊的功能。既然可以TCP通訊,自然也可以實現HTTP協議通訊。於是,就萌發了本教程。本教程很簡單,僅是實現了一個簡單的靜態頁面,希望可以給大家帶來不一樣的啟發。
TPYBoard v201開發板實物
準備工作
硬體&工具
- TPYBoard v201 開發板 1塊
- TPYBoard v201 網路引數配置的工具
- 路由器、電腦、網線等
知識儲備
- 瞭解基本的TCP、HTTP通訊協議等相關的知識。不知道的可自行去百度,相關教程很多。
TPYBoard v201網路引數配置
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技術交流/*裙*/;157816561 檔案裡下載。
首先,將TPYBoard v201開發板通過網線與你使用的電腦接入同一個區域網內。雙擊執行<USR-M0_V2.2.1.272.exe>,點選搜尋裝置,成功的情況下會在上面的列表中顯示搜尋到的裝置。
點選搜素到的裝置,可以讀取到該裝置的相關引數。同時也可以進行修改並儲存。接下來,我們要進行IP地址、埠等設定。IP地址我這裡設定了靜態IP<192.168.0.99>,防止每次重新啟動時會改變IP。
接下來埠設定,模組工作方式選擇TCP Server。大家可以注意到基礎設定中有一個HTTP服務埠的設定,是因為USR-K2中本身就有一個內嵌的網頁用於引數的設定,預設是啟用了80埠,那我們下面開啟的TCP Server的服務埠就使用81埠吧。
設定完畢後,點選軟體最下方的儲存設定。左側的操作日誌顯示框會顯示儲存的進度和狀態。
這時再重新搜尋裝置,驗證下模組的IP地址是否和我們設定的一致。
程式實現
TPYBoard v201通過板子上的串列埠6與USR-K2模組之間通訊。我們不用去管TCP連結等問題,只需要將想要傳送的資料通過串列埠6傳送給K2模組即可。其實我們的程式主要就是讀取和寫入串列埠的工作,
當我們從串列埠讀取到HTTP請求報文時,組成一個簡單的響應報文寫入到串列埠傳送回去就可以了。
main.py 原始碼:
1 import pyb 2 from pyb import UART 3 4 #串列埠6初始化 5 uart = UART(6,115200,timeout = 100) 6 #響應報文 7 header = """ 8 HTTP/1.1 200 OK 9 Content-Type:text/html 10 Content-Length:{0} 11 12 {1} 13 """ 14 #HTML頁面 15 html = """<!DOCTYPE html> 16 <html> 17 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 18 <head> <title>TPYBoard</title> </head> 19 <body> 20 <h1>TPYBoard v201</h1><br /> 21 <h2>Simple HTTP server</h2> 22 </body> 23 </html> 24 """ 25 26 while True: 27 if uart.any() > 0: 28 request = uart.read().decode() 29 print('request:',request) 30 #當接收到GET請求頭時,進行響應 31 if request.find('GET') > -1: 32 data = header.format(len(html),html) 33 uart.write(data)
儲存程式碼。開啟瀏覽器,輸入URL進行訪問。URL=ip:81,例如我的URL就是192.168.0.99:81。
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檔案作為訪問網頁的圖示,這個可以忽略掉,不影響功能。也可以在程式中進行過濾。