MicroPython TPYBoard v702實現HTTP應用功能

[Micropython]TPYBoard v702 HTTP應用功能

轉載請註明文章來源,更多教程可自助參考docs.tpyboard.com,QQ技術交流羣:157816561,公衆號:MicroPython玩家匯php

什麼是TPYBoard v702

TPYBoard v702是山東蘿蔔電子科技有限公司最新開發的,目前市面上惟一支持通訊通訊功能的MicroPython開發板:支持Python3.0及以上版本直接運行。支持GPS+北斗雙模通訊、GPRS通訊、短信功能、電話功能;板載溫溼度、光敏、三軸加速度傳感器、蜂鳴器、LCD5110顯示屏。免費提供通訊測試服務平臺。python

**TPYBoard v702實物圖**git

MicroPython TPYBoard v702實現HTTP應用功能

**具體要求**github

利用TPYBoard v702完成HTTP應用功能的測試,分別進行GET請求和POST請求。json

**所需器件**服務器

- TPYBoard v702開發板 1塊
- LCD5110顯示屏 1塊
- SIM卡 1張(支持移動、聯通)post


板載通訊功能及使用介紹
------------------------------

TPYBoard v702的開發板的總體總體亮點置一就是能板載通訊功能,只要在開發板的卡槽上插上一張可使用的手機卡(不支持電信),便可使用該功能。開發闆闆載的通訊功能包括了電話,短信,GPRS等功能,在這個實驗裏面咱們只使用電話這個功能。
開發闆闆載的通訊功能已經設計的很完善,在接到來電的時候,會主動的把來電的信息經過串口4發送進來,這樣一來做爲用戶的咱們就是須要把數據進行相應的處理加顯示就能夠了。測試

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

爲了方便測試,這裏用PHP寫了一個接收GET和POST請求的程序,代碼很是簡單,能夠直接放到本身服務器上測試,也能夠直接用,訪問地址在下面源碼中有。url

**PHP測試程序**spa

<?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>`_

相關文章
相關標籤/搜索