1. 程式人生 > >MicroPython TPYBoard v702實現HTTP應用功能

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等功能,在這個實驗裡面我們只使用電話這個功能。

開發闆闆載的通訊功能已經設計的很完善,在接到來電的時候,會主動的把來電的資訊通過串列埠4傳送進來,這樣一來作為使用者的我們就是需要把資料進行相應的處理加顯示就可以了。

實現過程
---------------------

為了方便測試,這裡用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