17-GPRS(Air202)串口

現在看一下官方給的demo

其實只要有兩個就好說了

module(...,package.seeall)

--[[
函數名:print
功能  :打印接口,此文件中的所有打印都會加上test前綴
參數  :無
返回值:無
]]
local function print(...)
    _G.print("test",...)
end


--串口配置
local UART_ID = 1 --uart1
local uartReadData = "";
local uartReadDataCnt = 0;


--定時器空閒中斷檢測(串口空閒接收數據)
local UartTimerCnt = 0;
local function UartTimer()
    if  uartReadDataCnt ~= 0 then
        UartTimerCnt = UartTimerCnt+1;
        if  UartTimerCnt >= 20 then
            UartTimerCnt=0;
            uartReadDataCnt = 0;
            uart.write(UART_ID,uartReadData);
            uartReadData = "";
        end
    end
end
sys.timer_loop_start(UartTimer,10)


--讀取串口接收到的數據
local uartdata = ""
local function read()
    uartdata = ""
    while true do
        uartdata = uart.read(UART_ID,"*l",0)
        if not uartdata or string.len(uartdata) == 0 then break end
        uartReadData = uartReadData..uartdata;
        uartReadDataCnt = uartReadDataCnt +1
        UartTimerCnt = 0;
    end
end


--註冊串口的數據接收函數,串口收到數據後,會以中斷方式,調用read接口讀取數據
sys.reguart(UART_ID,read)
--配置並且打開串口
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1)

現在下載測試,就是發送給串口1什麼就回什麼

可以了,現在發指令控制GPIO5 

指令就用

{data:switch,bit:1,status:0}   控制GPIO5輸出低電平

{data:switch,bit:1,status:1}   控制GPIO5輸出高電平

有可能會問,搞這麼複雜的指令幹嘛。。。。爲了後期統一,而且現在物聯網通信json格式用的很多,所以。。。。

module(...,package.seeall)

--[[
函數名:print
功能  :打印接口,此文件中的所有打印都會加上test前綴
參數  :無
返回值:無
]]
local function print(...)
    _G.print("test",...)
end


--串口配置
local UART_ID = 1 --uart1
local uartReadData = "";
local uartReadDataCnt = 0;


pio.pin.setdir(pio.OUTPUT,pio.P0_5)
pio.pin.setval(0,pio.P0_5)


--定時器空閒中斷檢測(串口空閒接收數據)
local UartTimerCnt = 0;
local function UartTimer()
    if  uartReadDataCnt ~= 0 then
        UartTimerCnt = UartTimerCnt+1;
        if  UartTimerCnt >= 20 then--有200ms不進去中斷接受數據了,就認爲收完了一條數據
            UartTimerCnt=0;
            uartReadDataCnt = 0;
      
            if  uartReadData=="{data:switch,bit:1,status:0}" then
                pio.pin.setval(0,pio.P0_5)
                uart.write(UART_ID,uartReadData);--返回數據
            elseif  uartReadData=="{data:switch,bit:1,status:1}" then
                pio.pin.setval(1,pio.P0_5)      
                uart.write(UART_ID,uartReadData);--返回數據
            end
            
            uartReadData = "";
        end
    end
end
sys.timer_loop_start(UartTimer,10)--10MS的循環定時器


--讀取串口接收到的數據
local uartdata = ""
local function read()
    uartdata = ""
    while true do
        uartdata = uart.read(UART_ID,"*l",0)
        if not uartdata or string.len(uartdata) == 0 then break end
        uartReadData = uartReadData..uartdata;--接收數據
        uartReadDataCnt = uartReadDataCnt +1
        UartTimerCnt = 0;
    end
end


--註冊串口的數據接收函數,串口收到數據後,會以中斷方式,調用read接口讀取數據
sys.reguart(UART_ID,read)
--配置並且打開串口
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1)

資料源碼鏈接

鏈接:https://pan.baidu.com/s/1-SRfsKGQ7rZVvFmp1ObHWw 密碼:p9qs

基礎教程源碼鏈接如果失效,請在淘寶介紹中下載,由於鏈接還是失效,請聯繫賣家,謝謝

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-18540610442.6.36a74814ZSaRsu&id=569295486025

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章