3-51单片机ESP8266学习-AT指令(开发板8266底层源码介绍)

简介: 上一篇链接  http://www.cnblogs.com/yangfengwu/p/8743502.html直接上源码:注意源码有两部分,第一部分是一开始的时候写在模块内部的,另一部分是存在手机内部的,方便后期更新功能看第一部分的源码亲们可以直接把下面的第一部分(注意只下载第一部分就行)的程...

上一篇链接  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源码上要这样写

还有 \"&#037  其实就是 "%   也是因为特殊字符的问题

<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],\"&#037;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],\"&#037;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 &#060; 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

 

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
7月前
|
网络协议 数据处理 数据格式
51单片机ESP8266云端通信的实现
51单片机ESP8266云端通信的实现
435 1
|
4月前
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
【51单片机】开发板上矩阵键盘键码在数码管上的显示,按下键盘在数码管上显示对应段码
148 0
|
5月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
6月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
144 4
|
7月前
|
存储 移动开发
80C51单片机----数据传送类指令
80C51单片机----数据传送类指令
218 2
|
7月前
|
存储 传感器 芯片
【51单片机】开发板和单片机的介绍(2)
【51单片机】开发板和单片机的介绍(2)
|
7月前
|
IDE 开发工具 C++
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
|
7月前
|
开发框架 .NET
【期末不挂科-单片机考前速过系列P4】(第四章:32题搞定基本指令例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P4】(第四章:32题搞定基本指令例题)经典例题盘点(带图解析)
|
7月前
|
存储 搜索推荐 IDE
新手如何快速上手学习单片机?
新手如何快速上手学习单片机?
133 0
|
7月前
|
存储 编译器 C语言
单片机学习之路一些常见的疑问也是我的个人学习总结
单片机学习之路一些常见的疑问也是我的个人学习总结
135 0