轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流群:157816561,公眾號:MicroPython玩家匯
前言
上一篇教程中我們實現了一個簡單網頁的顯示。本篇呢,增加上溫溼、時間等資訊的展示,實現一個簡單的家庭氣象站。
TPYBoard v201實物圖:
準備工作
硬體&工具
- TPYBoard v201 開發板 1塊
- TPYBoard v201 網路引數配置的工具
- 路由器、電腦、網線等
- DHT11溫溼度模組 1個
- DS3231時鐘模組 1個
知識儲備
- 瞭解基本的TCP、HTTP通訊協議等相關的知識。不知道的可自行去百度,相關教程很多。
- 掌握DHT11溫溼度模組的使用方法。
- 掌握DS3231時鐘模組的使用方法。
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請求報文時,開始採集DHT11和DS3231的資料,採集完成後組成一個完整的響
應報文寫入到串列埠傳送回去就可以了。
這裡只展示main.py檔案,其中裡面還需要DHT11和DS3231的驅動檔案,文章末有下載連結大家可自行下載參考。
main.py 原始碼:
1 import pyb 2 from pyb import Timer,UART 3 from ds3231 import DS3231 4 from dht11 import DHT11 5 6 #串列埠6初始化 7 uart = UART(6,115200,timeout = 100) 8 #響應報文 9 header = """ 10 HTTP/1.1 200 OK 11 Content-Type:text/html 12 Content-Length:{0} 13 14 {1} 15 """ 16 #HTML頁面 17 html = """ 18 <html> 19 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 20 <head> <title>TPYBoard v201</title> </head> 21 <body> 22 <h1>TPYBaord 家庭氣象站</h1><br /> 23 <p>時間:{}</p> 24 <p>溫度:{}</p> 25 <p>溼度:{}</p> 26 </body> 27 </html> 28 """ 29 30 #------------------------DS3231----------------------------------# 31 ds=DS3231(2) #設定DS3231為I2C2介面,對應SCL-Y9,SDA-Y10 32 #初始日期和時間,設定一次即可 33 #ds.DATE([19,7,27]) #設定初始日期年、月、日 34 #ds.TIME([14,50,0]) #設定初始時間時、分、秒 35 #------------------------DHT11----------------------------------# 36 d = DHT11('X12') 37 38 def updateDisplay(): 39 40 DATE = [str(i) for i in ds.DATE()] #將返回的時間資料int轉str 41 TIME = [str(i) for i in ds.TIME()] 42 time = '-'.join(DATE) + ' ' + ':'.join(TIME) #讀取日期和時間,拼接成正常的時間格式 43 data = d.read_data() #讀取溫溼度的值 44 return time,data 45 46 while True: 47 if uart.any() > 0: 48 request = uart.read().decode() 49 print('request:',request) 50 #當接收到GET請求頭時,進行響應.同時把favicon.ico請求過濾掉 51 if request.find('GET') > -1 and request.find('favicon.ico') < 0: 52 time,data = updateDisplay() 53 print(data) 54 HTML = html.format(time,data[0],data[1]) 55 #print(HTML) 56 uart.write(header.format(len(HTML),HTML))
儲存程式碼。開啟瀏覽器,輸入URL進行訪問。URL=ip:81,例如我的URL就是192.168.0.99:81。
如果訪問時頁面出現了亂碼,主要有以下地方需要注意下:
- 1.main.py檔案的編碼格式修改為UTF-8 無BOM格式;
- 2.程式碼中的HTML字串中需要新增<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- 3.通過瀏覽器開發者工具檢視,接收到的Response體是否完整。
大家可以依照本實驗的基礎加上自己喜歡的螢幕,然後用紙盒等包裝起來,DIY一個超棒的家庭氣象站。同時也可以做一個路由器對映,這樣就可以
隨時隨地檢視家裡的環境資訊了。
下載原始碼:https://github.com/TPYBoard/TPYBoard-v201