https://www.cnblogs.com/yangfengwu/p/10891908.html
視頻教程:
https://www.bilibili.com/video/av55663292
請先自行補充基礎內(nèi)容
https://www.cnblogs.com/yangfengwu/p/6921832.html
https://www.cnblogs.com/yangfengwu/category/1383497.html1-3節(jié)
這一節(jié)的GPRS程序和https://www.cnblogs.com/yangfengwu/p/10875886.html這節(jié)的WIFI做相同的功能,整體功能也一樣,單片機復位自動升級
?現(xiàn)在測試
1,下載GPRS程序 ,主要的GPRS程序就是收到連接TCP指令就去連接TCP,然后透傳...
require "socket"
module(..., package.seeall)
--串口配置
local globalSendData1 = nil
local globalSendData = nil
local UART_ID = 1 --uart1
local uartReadData = "";
local uartReadDataFlage = false;
local ip=nil
local port=nil
local asyncClient
sys.taskInit(function()
? while true do
? ? ? while not socket.isReady() do sys.wait(1000) end
? ? ? if? port~=nil and ip~=nil? then
? ? ? ? ? asyncClient = socket.tcp()
? ? ? ? ? if? asyncClient:connect(ip, port)? then
? ? ? ? ? ? ? uart.write(1,"{\"datemcu\":\"updata\",\"state\":\"ConnectOK\"}")--發(fā)送鏈接成功指令
? ? ? ? ? ? ? print("{\"datemcu\":\"updata\",\"state\":\"ConnectOK\"}");
? ? ? ? ? else
? ? ? ? ? ? ? uart.write(1,"{\"datemcu\":\"updata\",\"state\":\"ConnectNO\"}")
? ? ? ? ? end
? ? ? ? ? port = nil;
? ? ? ? ? ip=nil;
? ? ? ? ? while asyncClient:asyncSelect(60, "ping") do end--必須有這個,負責TCP的后臺運行
? ? ? ? ? asyncClient:close()
? ? ? end
? ? ? sys.wait(1000)
? end
end)
-- TCP接受到數(shù)據(jù),發(fā)送串口
sys.subscribe("SOCKET_RECV", function(id)
? ? if? asyncClient.id == id then
? ? ? ? local data = asyncClient:asyncRecv()
? ? ? ? uart.write(1,data)
? ? end
end)
local jsondata,result,errinfo;
--定時器空閑中斷檢測(串口空閑接收數(shù)據(jù))
local TimerFunc4Cnt = 0;
local function TimerFunc4()
? ? if? uartReadDataFlage == true then
? ? ? ? TimerFunc4Cnt = TimerFunc4Cnt+1;
? ? ? ? if? TimerFunc4Cnt >= 20 then
? ? ? ? ? ? TimerFunc4Cnt=0;
? ? ? ? ? ? uartReadDataFlage = false;
? ? ? ? ? ? globalSendData = uartReadData;
? ? ? ? ? ? uartReadData = "";
? ? ? ? end
? ? end
? ? if? globalSendData ~= nil? then
? ? ? ? jsondata,result,errinfo = json.decode(globalSendData)--判斷是不是json
? ? ? ? if? result and type(jsondata)=="table" then -- 是json數(shù)據(jù)
? ? ? ? ? ? if? jsondata["datemcu"] ~= nil and jsondata["datemcu"] =="updata"? then
? ? ? ? ? ? ? ? if? jsondata["cmd"] ~= nil and jsondata["cmd"] =="ConnectTCP"? then
? ? ? ? ? ? ? ? ? ? if? jsondata["ip"] ~= nil and jsondata["port"] ~=nil? then
? ? ? ? ? ? ? ? ? ? ? ? ip = jsondata["ip"]
? ? ? ? ? ? ? ? ? ? ? ? port = jsondata["port"]
? ? ? ? ? ? ? ? ? ? end? ?
? ? ? ? ? ? ? ? end? ?
? ? ? ? ? ? end? ?
? ? ? ? else
? ? ? ? ? ? if? asyncClient ~=nil? then
? ? ? ? ? ? ? ? asyncClient:asyncSend(globalSendData)--TCP發(fā)送數(shù)據(jù)
? ? ? ? ? ? end
? ? ? ? end
? ? ? ? globalSendData = nil;
? ? end
end
sys.timerLoopStart(TimerFunc4,10)
--讀取串口接收到的數(shù)據(jù)
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;
? ? ? ? uartReadDataFlage = true
? ? ? ? TimerFunc4Cnt = 0;
? ? end
end
uart.on(UART_ID,"receive",read)
--配置并且打開串口
uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1)
后期文章改動,根據(jù)文章標題查找
?下載單片機IAP程序
?云端的還是這個
?測試
修改云端版本,復位下單片機