上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743502.html
直接上源码:注意源码有两部分,第一部分是一开始的时候写在模块内部的,另一部分是存在手机内部的,方便后期更新功能
看第一部分的源码
亲们可以直接把下面的第一部分(注意只下载第一部分就行)的程序下载到8266里面就可以用自己的APP实现远程控制
怎么下载看我以前的文章,LUA开发的
--[[ GPIO0--3 GPIO1--10 GPIO2--4 GPIO3--9 GPIO4--2 GPIO5--1 GPIO9--11 GPIO10--12 GPIO12--6 GPIO13--7 GPIO14--5 GPIO15--8 GPIO16--0 0--GPIO16 1--GPIO5 2--GPIO4 3--GPIO0 4--GPIO2 5--GPIO14 6--GPIO12 7--GPIO13 8--GPIO15 9--GPIO3 10--GPIO1 11--GPIO9 12--GPIO10 ]] RelayPin=2; splitStart = 1 splitIdex=0; splitTable={} function split(s, delim) if type(delim) ~= "string" or string.len(delim) <= 0 then return end splitStart = 1 splitTable = {} while true do splitIdex = string.find (s, delim, splitStart, true) -- plain find if not splitIdex then break end table.insert (splitTable, string.sub (s, splitStart, splitIdex - 1)) splitStart = splitIdex + string.len (delim) end table.insert (splitTable, string.sub (s, splitStart)) return splitTable end wifi.setmode(wifi.STATION) local updataFlage = 0 YouInitData1 = "NULL"; YouInitData2 = "NULL"; YouInitData3 = "NULL"; YouInitData4 = "NULL"; MyInitData1 = ""; MyInitData2 = ""; MyInitData3 = ""; MyInitData4 = ""; NodeMcuTimeInSecond = 0; NodeMcuTimeInUSecond = 0; NodeMcuTimeInrate = 0; NodeMcuYear = 0; NodeMcuMonth = 0; NodeMcuDay= 0; NodeMcuHour= 0; NodeMcuMinute= 0; NodeMcuSecond= 0; NodeMcuWeekday= 0; NodeMcuRtctime={}; NodeMcuTimer={}; NodeMcuTimerList={}; NodeMcuDataString="nil" NodeMcuTimeString="nil"; NodeMcuWeekdayString="nil"; mqttConnectedFlage = 0; NodeMcuRequestTime=0 sntpAddress="nil"; updataCnt = 0; linkcnt=0; printtimeCnt=0; TCPReadDataOverTime = 0; tmr.softwd(60)--watchdog 60S clientid = wifi.sta.getmac() SubscribeTopic = "yang/sw/"..clientid PublishTopic = "feng/sw/"..clientid if file.open("InitData.lua", "r") then local MyInitData = file.read(); local DataList = split(MyInitData, ';'); if DataList[1] == "MyData" then MyInitData1 = DataList[2] MyInitData2 = DataList[3] MyInitData3 = DataList[4] MyInitData4 = DataList[5] end else print("no InitData") end print("Topic = switch/"..clientid) print("MyInitData1 = "..MyInitData1) print("MyInitData2 = "..MyInitData2) print("MyInitData3 = "..MyInitData3) print("MyInitData4 = "..MyInitData4) --[[Connect the phone to the ap]] apcfg={} apcfg.ssid="qqqqqq" apcfg.pwd="11223344" wifi.sta.config(apcfg) wifi.sta.connect() --wifi.sta.autoconnect(1) --[[The connection serve phone]] connectIP="192.168.1.102" ClientConnectedFlage = 0 ReceiveData = ""; ReceiveDataCopy = ""; UpdataDataCopy=""; ReceiveDataCnt = 0; ReceiveDataCntCopy = 0; function InitTimer0function() if ClientConnectedFlage == 0 then Client = net.createConnection(net.TCP, 0) --Client:connect(8888,connectIP) Client:connect(8888,gateway) Client:on("receive", function(Client, data) ReceiveData = ReceiveData..data; ReceiveDataCnt = ReceiveDataCnt + 1; end) Client:on("connection", function(sck, c) ClientConnectedFlage = 1 TcpConnect = Client print("Link OK") tmr.stop(0) Client:on("disconnection", function(sck, c) ClientConnectedFlage = 0 TcpConnect = nil tmr.start(0) end) end) if ClientConnectedFlage == 0 then print("Link Error") updataCnt = 0; updataFlage = 0; linkcnt = linkcnt+1 if linkcnt >= 6 then linkcnt = 0 if TcpConnect ~= nil then TcpConnect:close() end tmr.stop(0) tmr.stop(1) dofile("updata.lua"); end end end end tmr.alarm(0, 1000, 1, InitTimer0function) function disposedata(data) local DataList = split(data, ';'); if DataList[1] == "MyData" then if file.open("InitData.lua", "w+") then file.write(data)--MyInitData file.close() MyInitData1 = DataList[2] MyInitData2 = DataList[3] MyInitData3 = DataList[4] MyInitData4 = DataList[5] print("MyInitData1 = "..DataList[2]) print("MyInitData2 = "..DataList[3]) print("MyInitData3 = "..DataList[4]) print("MyInitData4 = "..DataList[5]) if TcpConnect ~= nil then TcpConnect:send(data); end print("write InitData success") end elseif DataList[1] == "YouData" then if TcpConnect ~= nil then TcpConnect:send("YouData;"..clientid..";"..SubscribeTopic..";"..PublishTopic..";"..YouInitData1..";".. YouInitData2..";"..YouInitData3..";"..YouInitData4); end print("Send YouData success") elseif DataList[1] == "UpdataData" then updataFlage = 1; if TcpConnect ~= nil then TcpConnect:send("WaitUpdataData0;"); end print("WaitUpdataData......") file.open("updata.lua", "w+") end ReceiveDataCopy = ""; end function InitTimer1function() if ReceiveDataCnt ~=0 then if ReceiveDataCnt == ReceiveDataCntCopy then TCPReadDataOverTime = 0; ReceiveDataCopy = ReceiveData; ReceiveData = ""; ReceiveDataCnt = 0; ReceiveDataCntCopy = 0; if updataFlage == 0 then disposedata(ReceiveDataCopy); else if ReceiveDataCopy ~= "UpdataDataSuccess" then file.write(ReceiveDataCopy) updataCnt = updataCnt + 1 if TcpConnect ~= nil then TcpConnect:send("WaitUpdataData"..updataCnt..";"); end print("start down...") else if TcpConnect ~= nil then TcpConnect:send("UpdataDataSuccess"); TcpConnect:close() end file.close() updataFlage = 0 print("UpdataDataSuccess") tmr.stop(0) tmr.stop(1) --dofile("main.lua"); node.compile("updata.lua") dofile("updata.lua"); --dofile("main.lc"); end ReceiveDataCopy = ""; end else ReceiveDataCntCopy = ReceiveDataCnt end end end tmr.alarm(1, 400, 1, InitTimer1function) gpio.mode(4,gpio.OUTPUT)--输出模式 tmr.alarm(2, 500, 1, function() if mqttConnectedFlage==1 then gpio.write(4,1-gpio.read(4)) if NodeMcuRequestTime == 0 then sntp.sync(sntpAddress, function() print("sync succeeded:"..sntpAddress) NodeMcuRequestTime = 1; end, function(index) print("failed : "..index) end) end end NodeMcurRtctime = rtctime.epoch2cal(rtctime.get()+28800) NodeMcuTimer = string.format("%04d;%02d;%02d;%02d;%02d;%02d;%01d", NodeMcurRtctime["year"], NodeMcurRtctime["mon"], NodeMcurRtctime["day"], NodeMcurRtctime["hour"]+8, NodeMcurRtctime["min"], NodeMcurRtctime["sec"], NodeMcurRtctime["wday"]) NodeMcuTimerList = split(NodeMcuTimer, ';'); NodeMcuYear = tonumber(NodeMcuTimerList[1]); NodeMcuMonth = tonumber(NodeMcuTimerList[2]); NodeMcuDay = tonumber(NodeMcuTimerList[3]); NodeMcuHour = tonumber(NodeMcuTimerList[4]); NodeMcuMinute = tonumber(NodeMcuTimerList[5]); NodeMcuSecond = tonumber(NodeMcuTimerList[6]); NodeMcuWeekday = tonumber(NodeMcuTimerList[7]); NodeMcuHour = NodeMcuHour - 8; NodeMcuDataString=NodeMcuYear.."/"..NodeMcuMonth.."/"..NodeMcuDay; NodeMcuTimeString=NodeMcuHour..":"..NodeMcuMinute..":"..NodeMcuSecond; NodeMcuWeekdayString = NodeMcuWeekday..""; NodeMcuTimeInSecond,NodeMcuTimeInUSecond,NodeMcuTimeInrate= rtctime.get() if NodeMcuHour == 2 and NodeMcuMinute == 2 and NodeMcuSecond == 2 then NodeMcuRequestTime = 0; end printtimeCnt = printtimeCnt +1; if printtimeCnt >20 then printtimeCnt = 0; print("Year="..NodeMcuYear..";Month="..NodeMcuMonth..";Day="..NodeMcuDay..";Hour=".. NodeMcuHour..";Minute="..NodeMcuMinute..";Second="..NodeMcuSecond..";Weekday=".. NodeMcuWeekdayString..";TimeInSecond="..NodeMcuTimeInSecond) end if TcpConnect ~= nil then TCPReadDataOverTime = TCPReadDataOverTime +1; if TCPReadDataOverTime > 20 then TCPReadDataOverTime = 0; TcpConnect:close() dofile("updata.lua"); end end tmr.softwd(60); end) printip = 0 wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) printip = 0 end) wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip == 0 then ip,netmask,gateway = wifi.sta.getip() print(ip) end printip = 1 end)
说一下源码
关于SNTP获取网络时间的问题,用阿里的博客写的
https://yq.aliyun.com/articles/511601?spm=a2c4e.11155435.0.0.15873312ZAcLKJ
直接把源码一贴,不好讲了,因为涉及的多...所以还是看后期自己一点一点的写源码吧
现在贴上第二部分源码,也就是存在手机上的,手机上就是这样存的,前面一点是接收用户配置的MQTT和WIFI的一些信息,所以做成这样子了
\n是换行 \" 的意思就是" 是因为特殊的字符在手机APP源码上要这样写
还有 \"% 其实就是 "% 也是因为特殊字符的问题
<string name="initupdata0"> configwifissid = \"%1$s\";\n configwifipwd= \"%2$s\";\n MqttUserString = \"%3$s\";\n MqttPwdString = \"%4$s\";\n MqttIPString = \"%5$s\";\n MqttPort = %6$d;\n if configwifipwd == \"nil\" then\n configwifipwd = nil\n end\n globalSendData =\"nil\"; \n globalSendData1=\"nil\";\n globalSendData2=\"nil\";\n MemoryRelayState = \"3\"; regulartime={};\n regularoption={};\n regularrepetition={};\n DisposeOnceTime="nil";\n RegularTimeLabel=0;\n RegularTimeData=\"0\";\n RegularOptionLabel=0;\n RegularOptionData=\"0\";\n RegularRepetitionLabel=0;\n RegularRepetitionData=\"0\";\n RegularCustom={}\n RegularCustomLabel=0;\n RegularCustomData=\"0\";\n DelayData={};\n DelayTime={};\n DelayOption={};\n DelayUnixTime={};\n DelayunixTime=0;\n DelayIndex=0;\n DelayTimeLabel=0;\n DelayTimeData=\"0\";\n DelayTimeDataNumber=0;\n RelayNowState=0\n RelayNowStateCopy=0\n UsartReceiveData=\"\"; UsartReceiveDataCnt=0; UsartReceiveDataCntCopy=0; for i=0,7 do\n if file.open(\"regular=\"..i..\".lua\", \"r\") then\n local list = split(file.read(), \";\")\n for _, s in ipairs(list) do\n local mlist = split(s, \"=\")\n if string.find(mlist[1],\"time\") then\n regulartime[i] = mlist[2];print(regulartime[i])\n elseif string.find(mlist[1],\"option\") then \n regularoption[i] = mlist[2];print(regularoption[i])\n elseif string.find(mlist[1],\"repetition\") then \n regularrepetition[i] = mlist[2];print(regularrepetition[i])\n end\n end\n file.close() \n end\n if file.open(\"delay=\"..i..\".lua\", \"r\") then\n local list = split(file.read(), \";\")\n for _, s in ipairs(list) do\n local mlist = split(s, \"=\")\n if string.find(mlist[1],\"data\") then\n DelayData[i] = mlist[2];print(DelayData[i])\n elseif string.find(mlist[1],\"time\") then\n DelayTime[i] = mlist[2];print(DelayTime[i])\n elseif string.find(mlist[1],\"option\") then \n DelayOption[i] = mlist[2];print(DelayOption[i]) \n elseif string.find(mlist[1],\"unixTime\") then \n DelayUnixTime[i] = mlist[2];print(DelayUnixTime[i]) \n end \n end\n file.close() \n end\n end\n if file.open(\"initpower.lua\",\"r\") then\n end\n </string> <string name="initupdata0_0" formatted="false"> if file.open(\"switch=1.lua\", \"r\") then\n if file.read() == \"relay=1\" then\n gpio.write(RelayPin,1)\n gpio.mode(RelayPin,gpio.OUTPUT)\n RelayNowState=1\n RelayNowStateCopy=1\n print(\"relay=1\")\n end\n if file.read() == \"relay=0\" then\n gpio.write(RelayPin,0)\n gpio.mode(RelayPin,gpio.OUTPUT)\n RelayNowState=0\n RelayNowStateCopy=0\n print(\"relay=0\")\n end\n file.close() \n else\n print(\"open RelayState.lua faild\") \n end\n apcfg={}\n apcfg.ssid=configwifissid\n apcfg.pwd=configwifipwd\n wifi.sta.config(apcfg)\n --wifi.sta.connect()\n wifi.sta.autoconnect(1)\n Mymqtt = mqtt.Client(clientid, 120,MqttUserString, MqttPwdString);\n tmr.alarm(3, 1000, 1, function()\n Mymqtt:connect(MqttIPString, MqttPort, 0,ConnectSuccess,ConnectFailed)\n end)\n function ConnectSuccess(client)\n client:subscribe(SubscribeTopic, 0, subscribeSuccess)\n print(\"connected\")\n mqttClient = client;\n tmr.stop(3);\n if sntpAddress == \"nil\" then \n sntpAddress=\"ntp2.aliyun.com\"; \n end \n mqttConnectedFlage = 1;\n end\n function ConnectFailed(client,reason)\n mqttConnectedFlage = 0;\n print(\"failed reason: \" .. reason)\n tmr.start(3)\n end\n function subscribeSuccess(client)\n print(\"subscribe success\") \n end\n </string> <string name="initupdata0_1" formatted="false"> Mymqtt:on(\"message\", function(client, topic, data) \n local list = split(data, \";\")\n ControlRelayFlage = -1;\n uart.write(0,data)\n if string.find(list[1],\"regular\") ~= nil then\n if file.open(list[1]..\".lua\", \"w+\") then\n file.write(data)\n file.close() \n for _, s in ipairs(list) do\n local mlist = split(s, \"=\")\n local aa = string.match(mlist[1],\"%d\"); \n if string.find(mlist[1],\"time\") then\n regulartime[tonumber(aa)] = mlist[2];\n elseif string.find(mlist[1],\"option\") then \n regularoption[tonumber(aa)] = mlist[2];\n elseif string.find(mlist[1],\"repetition\") then \n regularrepetition[tonumber(aa)] = mlist[2];\n end\n end\n globalSendData1 = data\n end elseif string.find(list[1],\"delay\") ~= nil then\n if file.open(list[1]..\".lua\", \"w+\") then\n file.write(data)\n file.close() \n for _, s in ipairs(list) do\n local mlist = split(s, \"=\")\n local aa = string.match(mlist[1],\"%d\");\n if string.find(mlist[1],\"data\") then\n DelayIndex = tonumber(aa);\n DelayData[tonumber(aa)] = mlist[2];\n elseif string.find(mlist[1],\"time\") then\n DelayTime[tonumber(aa)] = mlist[2];\n elseif string.find(mlist[1],\"option\") then \n DelayOption[tonumber(aa)] = mlist[2]; \n elseif string.find(mlist[1],\"unixTime\") then \n DelayUnixTime[tonumber(aa)] = mlist[2];\n DelayunixTime = tonumber(mlist[2]);\n end \n end\n if DelayunixTime < NodeMcuTimeInSecond and DelayunixTime ~= 0 and DelayunixTime ~= 1 then\n globalSendData1 = \"delayerror=\"..DelayIndex..\";data\"..DelayIndex..\"=\"..\n NodeMcuDataString..\";\"..\"time\"..DelayIndex..\"=\"..NodeMcuTimeString\n else\n globalSendData1 = data;\n end\n DelayunixTime=0; \n end elseif string.find(list[1],\"switch\") ~= nil then \n if file.open(list[1]..\".lua\", \"w+\") then \n file.write(list[2]) \n file.close() \n for _, s in ipairs(list) do \n if string.find(s,\"relay=0\") ~= nil then \n gpio.write(RelayPin,0) \n gpio.mode(RelayPin,gpio.OUTPUT) \n globalSendData1 = data \n end\n if string.find(s,\"relay=1\") ~= nil then \n gpio.write(RelayPin,1) \n gpio.mode(RelayPin,gpio.OUTPUT) \n globalSendData1 = data \n end\n end\n end \n elseif string.find(list[1],\"initpower\") ~= nil then\n if file.open(list[1]..\".lua\", \"w+\") then\n file.write(list[2])\n file.close() \n globalSendData1 = data\n end \n elseif string.find(list[1],\"SWStatus\") ~= nil then \n globalSendData1 = \"switch=1;relay=\"..RelayNowState \n end \n end) \n </string> <string name="initupdata0_2" formatted="false"> tmr.alarm(4, 10, 1, function() \n if mqttClient ~= nil and mqttConnectedFlage == 1 then \n RelayNowState = gpio.read(RelayPin) \n if RelayNowState ~= RelayNowStateCopy then \n RelayNowStateCopy = RelayNowState \n globalSendData1 = \"switch=1;relay=\"..RelayNowState \n end \n if globalSendData1~=\"nil\" then \n globalSendData=globalSendData1; \n globalSendData1=\"nil\" \n elseif globalSendData2 ~=\"nil\" then \n globalSendData=globalSendData2; \n globalSendData2=\"nil\" \n else \n globalSendData=\"nil\"; \n end \n if globalSendData ~= \"nil\" then \n mqttClient:publish(PublishTopic,globalSendData, 0, 0, function(client) \n end) \n end \n end \n if UsartReceiveDataCnt ~= 0 then \n if UsartReceiveDataCntCopy == UsartReceiveDataCnt then \n UsartReceiveDataCnt=0; \n UsartReceiveDataCntCopy = 0; \n globalSendData2 = UsartReceiveData; \n UsartReceiveData=\"\"; \n else \n UsartReceiveDataCntCopy = UsartReceiveDataCnt; \n end \n end \n end) \n uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1) uart.on(\"data\",0,function(data) UsartReceiveData = UsartReceiveData..data; UsartReceiveDataCnt = UsartReceiveDataCnt + 1; end, 0) tmr.alarm(0, 500, 1, function() \n for RegularTimeLabel, RegularTimeData in pairs (regulartime) do \n if RegularTimeData == NodeMcuTimeString and DisposeOnceTime ~= NodeMcuTimeString then \n DisposeOnceTime = NodeMcuTimeString; \n if regularrepetition[RegularTimeLabel] == \"everyday\" then \n print(\"everyday\") \n DisposeData(RegularTimeLabel); \n elseif regularrepetition[RegularTimeLabel] == \"work\" then \n if NodeMcuWeekdayString==\"2\" or NodeMcuWeekdayString==\"3\" or NodeMcuWeekdayString==\"4\" or NodeMcuWeekdayString==\"5\" or NodeMcuWeekdayString==\"6\" then print(\"work\") \n DisposeData(RegularTimeLabel); \n end \n else \n RegularCustom={} \n RegularCustom = split(regularrepetition[RegularTimeLabel], \",\"); \n for RegularCustomLabel, RegularCustomData in ipairs (RegularCustom) do \n if RegularCustomData == NodeMcuWeekdayString then \n print(\"custom\") \n DisposeData(RegularTimeLabel); \n end \n end \n end \n else \n negationOnceTime=\"nil\"; \n end \n end \n for DelayTimeLabel, DelayTimeData in pairs (DelayUnixTime) do \n --DelayTimeDataNumber = tonumber(DelayTimeData); \n if DelayTimeData == NodeMcuTimeInSecond..\"\" then \n if DelayOption[DelayTimeLabel] == \"on\" then \n gpio.write(RelayPin,1) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"on\") \n elseif DelayOption[DelayTimeLabel] == \"off\" then \n gpio.write(RelayPin,0) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"off\") \n elseif DelayOption[DelayTimeLabel] == \"negation\" then \n gpio.write(RelayPin,1-gpio.read(RelayPin)) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"negation\") \n end \n end \n end \n end) \n function DisposeData(label) \n if regularoption[label] == \"on\" then \n gpio.write(RelayPin,1) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"on\") \n elseif regularoption[label] == \"off\" then \n gpio.write(RelayPin,0) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"off\") \n elseif regularoption[label] == \"negation\" then \n gpio.write(RelayPin,1-gpio.read(RelayPin)) \n gpio.mode(RelayPin,gpio.OUTPUT) \n print(\"negation\") \n end \n print(\"pin=\"..gpio.read(RelayPin)) \n end \n </string>
上面的不方便看,给大家一个直接可以下载用的
前面是路由器的和MQTT的信息,屏蔽了
--configwifissid = ""; --configwifipwd=""; --MqttUserString = ""; --MqttPwdString = ""; --MqttIPString = ""; --MqttPort = ; if configwifipwd == "nil" then configwifipwd = nil end globalSendData ="nil"; globalSendData1="nil"; globalSendData2="nil"; MemoryRelayState = "3"; regulartime={}; regularoption={}; regularrepetition={}; DisposeOnceTime=""; RegularTimeLabel=0; RegularTimeData=""; RegularOptionLabel=0; RegularOptionData=""; RegularRepetitionLabel=0; RegularRepetitionData=""; RegularCustom={} RegularCustomLabel=0; RegularCustomData=""; DelayData={}; DelayTime={}; DelayOption={}; DelayUnixTime={}; DelayunixTime=0; DelayIndex=0; DelayTimeLabel=0; DelayTimeData=""; DelayTimeDataNumber=0; RelayNowState=0 RelayNowStateCopy=0 UsartReceiveData=""; UsartReceiveDataCnt=0; UsartReceiveDataCntCopy=0; for i=0,7 do if file.open("regular="..i..".lua", "r") then local list = split(file.read(), ';') for _, s in ipairs(list) do local mlist = split(s, '=') if string.find(mlist[1],"time") then regulartime[i] = mlist[2];print(regulartime[i]) elseif string.find(mlist[1],"option") then regularoption[i] = mlist[2];print(regularoption[i]) elseif string.find(mlist[1],"repetition") then regularrepetition[i] = mlist[2];print(regularrepetition[i]) end end file.close() end if file.open("delay="..i..".lua", "r") then local list = split(file.read(), ';') for _, s in ipairs(list) do local mlist = split(s, '=') if string.find(mlist[1],"data") then DelayData[i] = mlist[2];print(DelayData[i]) elseif string.find(mlist[1],"time") then DelayTime[i] = mlist[2];print(DelayTime[i]) elseif string.find(mlist[1],"option") then DelayOption[i] = mlist[2];print(DelayOption[i]) elseif string.find(mlist[1],"unixTime") then DelayUnixTime[i] = mlist[2];print(DelayUnixTime[i]) end end file.close() end end if file.open("initpower.lua","r") then end if file.open("switch=1.lua", "r") then if file.read() == "relay=1" then gpio.write(RelayPin,1) gpio.mode(RelayPin,gpio.OUTPUT) RelayNowState=1 RelayNowStateCopy=1 print("relay=1") end if file.read() == "relay=0" then gpio.write(RelayPin,0) gpio.mode(RelayPin,gpio.OUTPUT) RelayNowState=0 RelayNowStateCopy=0 print("relay=0") end file.close() else print("open RelayState.lua faild") end apcfg={} apcfg.ssid=configwifissid apcfg.pwd=configwifipwd wifi.sta.config(apcfg) --wifi.sta.connect() wifi.sta.autoconnect(1) Mymqtt = mqtt.Client(clientid, 120,MqttUserString, MqttPwdString); tmr.alarm(3, 1000, 1, function() Mymqtt:connect(MqttIPString, MqttPort, 0,ConnectSuccess,ConnectFailed) end) function ConnectSuccess(client) client:subscribe(SubscribeTopic, 0, subscribeSuccess) print("connected") mqttClient = client; tmr.stop(3); if sntpAddress == "nil" then sntpAddress="ntp2.aliyun.com"; end mqttConnectedFlage = 1; end function ConnectFailed(client,reason) mqttConnectedFlage = 0; print("failed reason: " .. reason) tmr.start(3) end function subscribeSuccess(client) print("subscribe success") end Mymqtt:on("message", function(client, topic, data) local list = split(data, ';') ControlRelayFlage = -1; uart.write(0,data) if string.find(list[1],"regular") ~= nil then if file.open(list[1]..".lua", "w+") then file.write(data) file.close() for _, s in ipairs(list) do local mlist = split(s, '=') local aa = string.match(mlist[1],"%d"); if string.find(mlist[1],"time") then regulartime[tonumber(aa)] = mlist[2];print(regulartime[tonumber(aa)]) elseif string.find(mlist[1],"option") then regularoption[tonumber(aa)] = mlist[2];print(regularoption[tonumber(aa)]) elseif string.find(mlist[1],"repetition") then regularrepetition[tonumber(aa)] = mlist[2];print(regularrepetition[tonumber(aa)]) end end globalSendData1 = data end elseif string.find(list[1],"delay") ~= nil then if file.open(list[1]..".lua", "w+") then file.write(data) file.close() for _, s in ipairs(list) do local mlist = split(s, '=') local aa = string.match(mlist[1],"%d"); if string.find(mlist[1],"data") then DelayIndex = tonumber(aa); DelayData[tonumber(aa)] = mlist[2];print(DelayData[tonumber(aa)]) elseif string.find(mlist[1],"time") then DelayTime[tonumber(aa)] = mlist[2];print(DelayTime[tonumber(aa)]) elseif string.find(mlist[1],"option") then DelayOption[tonumber(aa)] = mlist[2];print(DelayOption[tonumber(aa)]) elseif string.find(mlist[1],"unixTime") then DelayUnixTime[tonumber(aa)] = mlist[2];print(DelayUnixTime[tonumber(aa)]) DelayunixTime = tonumber(mlist[2]); end end if DelayunixTime < NodeMcuTimeInSecond and DelayunixTime ~= 0 and DelayunixTime ~= 1 then globalSendData1 = "delayerror="..DelayIndex..";data"..DelayIndex.."=".. NodeMcuDataString..";".."time"..DelayIndex.."="..NodeMcuTimeString else globalSendData1 = data; end DelayunixTime=0; print(globalSendData1) end elseif string.find(list[1],"switch") ~= nil then if file.open(list[1]..".lua", "w+") then file.write(list[2]) file.close() for _, s in ipairs(list) do if string.find(s,"relay=0") ~= nil then gpio.write(RelayPin,0) gpio.mode(RelayPin,gpio.OUTPUT) globalSendData1 = data end if string.find(s,"relay=1") ~= nil then gpio.write(RelayPin,1) gpio.mode(RelayPin,gpio.OUTPUT) globalSendData1 = data end end end elseif string.find(list[1],"initpower") ~= nil then if file.open(list[1]..".lua", "w+") then file.write(list[2]) file.close() globalSendData1 = data end elseif string.find(list[1],"SWStatus") ~= nil then globalSendData1 = "switch=1;relay="..RelayNowState end end) --[[The Send Msg]] tmr.alarm(4, 10, 1, function() if mqttClient ~= nil and mqttConnectedFlage == 1 then RelayNowState = gpio.read(RelayPin) if RelayNowState ~= RelayNowStateCopy then RelayNowStateCopy = RelayNowState globalSendData1 = "switch=1;relay="..RelayNowState end if globalSendData1~="nil" then globalSendData=globalSendData1; globalSendData1="nil" elseif globalSendData2 ~="nil" then globalSendData=globalSendData2; globalSendData2="nil" else globalSendData="nil"; end if globalSendData ~= "nil" then mqttClient:publish(PublishTopic,globalSendData, 0, 0, function(client) end) end end if UsartReceiveDataCnt ~= 0 then if UsartReceiveDataCntCopy == UsartReceiveDataCnt then UsartReceiveDataCnt=0; UsartReceiveDataCntCopy = 0; globalSendData2 = UsartReceiveData; UsartReceiveData=""; else UsartReceiveDataCntCopy = UsartReceiveDataCnt; end end end) uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1) uart.on("data",0,function(data) UsartReceiveData = UsartReceiveData..data; UsartReceiveDataCnt = UsartReceiveDataCnt + 1; end, 0) tmr.alarm(0, 500, 1, function() for RegularTimeLabel, RegularTimeData in pairs (regulartime) do if RegularTimeData == NodeMcuTimeString and DisposeOnceTime ~= NodeMcuTimeString then DisposeOnceTime = NodeMcuTimeString; if regularrepetition[RegularTimeLabel] == "everyday" then print("everyday") DisposeData(RegularTimeLabel); elseif regularrepetition[RegularTimeLabel] == "work" then if NodeMcuWeekdayString=="2" or NodeMcuWeekdayString=="3" or NodeMcuWeekdayString=="4" or NodeMcuWeekdayString=="5" or NodeMcuWeekdayString=="6" then print("work") DisposeData(RegularTimeLabel); end else RegularCustom={} RegularCustom = split(regularrepetition[RegularTimeLabel], ','); for RegularCustomLabel, RegularCustomData in ipairs (RegularCustom) do if RegularCustomData == NodeMcuWeekdayString then print("custom") DisposeData(RegularTimeLabel); end end end else negationOnceTime=""; end end for DelayTimeLabel, DelayTimeData in pairs (DelayUnixTime) do --DelayTimeDataNumber = tonumber(DelayTimeData); if DelayTimeData == NodeMcuTimeInSecond.."" then if DelayOption[DelayTimeLabel] == "on" then gpio.write(RelayPin,1) gpio.mode(RelayPin,gpio.OUTPUT) print("on") elseif DelayOption[DelayTimeLabel] == "off" then gpio.write(RelayPin,0) gpio.mode(RelayPin,gpio.OUTPUT) print("off") elseif DelayOption[DelayTimeLabel] == "negation" then gpio.write(RelayPin,1-gpio.read(RelayPin)) gpio.mode(RelayPin,gpio.OUTPUT) print("negation") end end end end) function DisposeData(label) if regularoption[label] == "on" then gpio.write(RelayPin,1) gpio.mode(RelayPin,gpio.OUTPUT) print("on") elseif regularoption[label] == "off" then gpio.write(RelayPin,0) gpio.mode(RelayPin,gpio.OUTPUT) print("off") elseif regularoption[label] == "negation" then gpio.write(RelayPin,1-gpio.read(RelayPin)) gpio.mode(RelayPin,gpio.OUTPUT) print("negation") end print("pin="..gpio.read(RelayPin)) end
后期一点一点做的时候就明白了,一下子这么多实在让人受不了..............
其实只要会基本的功能了,其余的都是看个人的发挥了
下一篇连接
http://www.cnblogs.com/yangfengwu/p/8757036.html