MicroPython TPYBoard v702實現HTTP應用功能
[Micropython]TPYBoard v702 HTTP應用功能
轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流群:157816561,公眾號:MicroPython玩家匯
什麼是TPYBoard v702
TPYBoard v702是山東蘿蔔電子科技有限公司最新開發的,目前市面上唯一支援通訊通訊功能的MicroPython開發板:支援Python3.0及以上版本直接執行。支援GPS+北斗雙模通訊、GPRS通訊、簡訊功能、電話功能;板載溫溼度、光敏、三軸加速度感測器、蜂鳴器、LCD5110顯示屏。免費提供通訊測試服務平臺。
**TPYBoard v702實物圖**
MicroPython TPYBoard v702實現HTTP應用功能
**具體要求**
利用TPYBoard v702完成HTTP應用功能的測試,分別進行GET請求和POST請求。
**所需器件**
- TPYBoard v702開發板 1塊
- LCD5110顯示屏 1塊
- SIM卡 1張(支援移動、聯通)
板載通訊功能及使用介紹
------------------------------
TPYBoard v702的開發板的整體整體亮點置一就是能板載通訊功能,只要在開發板的卡槽上插上一張可以使用的手機卡(不支援電信),即可使用該功能。開發闆闆載的通訊功能包括了電話,簡訊,GPRS等功能,在這個實驗裡面我們只使用電話這個功能。
實現過程
---------------------
為了方便測試,這裡用PHP寫了一個接收GET和POST請求的程式,程式碼非常簡單,可以直接放到自己伺服器上測試,也可以直接用,訪問地址在下面原始碼中有。
**PHP測試程式**
<?php $backstr = "error"; $getStr = $_GET["t"]; if($getStr!=""){ $backstr = "{\"status\":\"0\",\"method\":\"GET\",\"data\":\"".$getStr."\"}"; }else{ $postStr = file_get_contents("php://input"); if($postStr!=""){ $backstr = "{\"status\":\"0\",\"method\":\"POST\",\"data\":\"".$postStr."\"}"; } } echo $backstr; ?>
**編寫v702上的程式**
HTTP應用是通過板載的GU620模組來實現的,所以我們需要知道該模組HTTP應用的相關AT指令,才能去編寫程式實現功能。
`點選下載AT指令說明文件 <http://old.tpyboard.com/downloads/docs/TPYBoard%20v702_GU620%E8%B5%84%E6%96%99.rar>`_
**GET請求實現程式碼**
import pyb from machine import SPI,Pin from pyb import UART import json #GU620模組初始化 N1 = Pin('Y6', Pin.OUT_PP)#定義通訊系統啟動引腳 N1.low() pyb.delay(2000) N1.high() pyb.delay(10000)#拉高拉低引腳,啟動通訊系統 u2 = UART(4,115200,timeout = 50)#定義串列埠4,設定 波特率為115200 #初始化 HTTP 應用 u2.write('AT+HTTPINIT\r\n') getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php?t=123456"\r\n' #getURLCMD = 'AT+HTTPPARA=1,"https://www.baidu.com"\r\n' while True: if u2.any() > 0: dataRead = u2.read() print('_dataRead:',dataRead) print('-'*30) if dataRead.find(b'OK') > -1: #AT命令執行成功 #判斷是執行的哪一步操作 if dataRead.find(b'AT+HTTPINIT') > -1: #初始化HTTP成功 #設定 HTTP 引數值 設定url u2.write(getURLCMD) elif dataRead.find(b'AT+HTTPPARA=1') > -1: #HTTP引數設定成功 #發起GET請求獲取資料 u2.write('AT+HTTPACTION=0\r\n') elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1: #返回可用的資料資訊,進行解析 獲取到資料長度 datalen = dataRead.decode().split(':')[1].split(',')[0] print('datalen:',datalen) #從第0位開始 讀取指定長度的資料 u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen)) elif dataRead.find(b'HTTP/1.1 200 OK') > -1: #成功讀取資料後 停止HTTP應用 u2.write('AT+HTTPTERM') #進行資料解析 提取出我們需要的資訊 b = dataRead.decode() c = "{"+b.split('{')[-1].split('}')[0]+"}" #轉成json物件 檢視是否請求成功 jsonobj = json.loads(c) print(jsonobj["status"]) pyb.delay(100) break elif dataRead.find(b'ERROR') > -1: #AT命令執行失敗 if dataRead.find(b'AT+HTTPINIT') > -1: #初始化HTTP失敗 有可能是之前的沒有停止等原因 #傳送停止HTTP命令 再重新初始化 u2.write('AT+HTTPTERM\r\n') pyb.delay(300) u2.write('AT+HTTPINIT\r\n') else: if dataRead.find(b'\r\n+HTTPACTION: 0, 200') > -1: #收到的資料提示 說明請求成功 #查詢當前可用資料 u2.write('AT+HTTPREAD\r\n')
**執行效果**
**POST請求實現程式碼**
import pyb from machine import SPI,Pin from pyb import UART import json #GU620模組初始化 N1 = Pin('Y6', Pin.OUT_PP)#定義通訊系統啟動引腳 N1.low() pyb.delay(2000) N1.high() pyb.delay(10000)#拉高拉低引腳,啟動通訊系統 u2 = UART(4,115200,timeout = 50)#定義串列埠4,設定 波特率為115200 #初始化 HTTP 應用 u2.write('AT+HTTPINIT\r\n') getURLCMD = 'AT+HTTPPARA=1,"http://old.tpyboard.com/v702/httptest.php"\r\n' sendData = "I am TPYBoard v702!" while True: if u2.any() > 0: dataRead = u2.read() print('_dataRead:',dataRead) print('-'*30) if dataRead.find(b'OK') > -1: #AT命令執行成功 #判斷是執行的哪一步操作 if dataRead.find(b'AT+HTTPINIT') > -1: #初始化HTTP成功 #設定 HTTP 引數值 設定url u2.write(getURLCMD) elif dataRead.find(sendData.encode()+b'\r\nOK\r\n') > -1: #POST需要傳送的資料設定成功 #發起POST請求 u2.write('AT+HTTPACTION=1\r\n') elif dataRead.find(b'AT+HTTPPARA=1') > -1: #HTTP引數設定成功 #輸入HTTP資料AT+HTTPDATA=<size>,<time> #<size>:傳送的資料位元組數 #<time>:最大輸入資料的時間以毫秒為單位 u2.write('AT+HTTPDATA={},100\r\n'.format(len(sendData))) elif dataRead.find(b'AT+HTTPREAD\r\n\r\n+HTTPREAD') > -1: #返回可用的資料資訊,進行解析 獲取到資料長度 datalen = dataRead.decode().split(':')[1].split(',')[0] print('datalen:',datalen) #從第0位開始 讀取指定長度的資料 u2.write('AT+HTTPREAD=0,{}\r\n'.format(datalen)) elif dataRead.find(b'HTTP/1.1 200 OK') > -1: #成功讀取資料後 停止HTTP應用 u2.write('AT+HTTPTERM') #進行資料解析 提取出我們需要的資訊 b = dataRead.decode() c = "{"+b.split('{')[-1].split('}')[0]+"}" #轉成json物件 檢視是否請求成功 jsonobj = json.loads(c) print(jsonobj["status"]) pyb.delay(100) break elif dataRead.find(b'ERROR') > -1: #AT命令執行失敗 if dataRead.find(b'AT+HTTPINIT') > -1: #初始化HTTP失敗 有可能是之前的沒有停止等原因 #傳送停止HTTP命令 再重新初始化 u2.write('AT+HTTPTERM\r\n') pyb.delay(300) u2.write('AT+HTTPINIT\r\n') else: if dataRead.find(b'\r\n+HTTPACTION: 1, 200') > -1: #收到的資料提示 說明POST請求成功 #查詢當前可用資料 u2.write('AT+HTTPREAD\r\n') elif dataRead.find(b'AT+HTTPDATA') > -1 and dataRead.find(b'>') > -1: #提示>符號 串列埠直接傳送POST資料 u2.write(sendData)
- `下載原始碼 <https://github.com/TPYBoard/TPYBoard-v702&g