ESP01s Relay 继电器模块

warning: 这篇文章距离上次修改已过323天,其中的内容可能已经有所变动。

恩,这是ESP01s小玩具系列的第二集(2/3)

这次,我们做一个基于ESP01s和继电器模块的智(yao)能(kong)开关。

它长这样子滴↓

2019-12-13_115638.png2019-12-13_115638.png

和上次的DHT11一样,这回也是用lua来写。

PS:手动拼接html简直要死。

OK,下面开始咯。


店家的小礼物

店家贴心的送了个手机控制的app,研究了一下发现,就是发送一个带pin参数的请求到ESP01s的IP上。

2004529873.png2004529873.png

嘛,为了不多造轮子,就兼容一下好了

你可以点击这里下载这个APP。


烧录lua固件并连接到工作模式

这里我们不再啰嗦一遍,如何烧录上传固件了,需要的话可以看这里


代码

嘛,毕竟准备以后用Arduino IDE来写了,这回就能用就行

所以,这次只有init.lua一个文件。说到底就是懒

注释掉的一大段是设置ESP01s的wifi热点。

因为我有路由器,所以直接让ESP01s连接就行。

当请求不带参数的地址时候,返回一个json格式的继电器和led状态信息。

只有请求时带上参数pin,才可以控制继电器和led。

代码如下

init.lua

Relay = 3
LED = 4
RelayTemp = "off"
LEDTemp = "off"
gpio.mode(Relay, gpio.OUTPUT)
gpio.mode(LED, gpio.OUTPUT)

---WIFI AP
--[[
print("Ready to start soft ap")

local str=wifi.ap.getmac();
local ssidTemp=string.format("%s%s%s",string.sub(str,10,11),string.sub(str,13,14),string.sub(str,16,17));

cfg={}
cfg.ssid="ESP8266_"..ssidTemp;````````````````
cfg.pwd="123456780"
wifi.ap.config(cfg)

cfg={}
cfg.ip="192.168.1.1";
cfg.netmask="255.255.255.0";
cfg.gateway="192.168.1.1";
wifi.ap.setip(cfg);
wifi.setmode(wifi.SOFTAP)

str=nil;
ssidTemp=nil;
collectgarbage();

print("Soft AP started")
print("Heep:(bytes)"..node.heap());
print("MAC:"..wifi.ap.getmac().."\r\nIP:"..wifi.ap.getip());

]]

---WIFI connect
print("Ready to connect WiFi")
wifi.setmode(wifi.STATION) 
wifi.sta.config("360 N7 Pro","123456780")
wifi.sta.connect() 

tmr.alarm(2, 10000, 1, function()
     if wifi.sta.getip() == nil then
         print("Connecting...")
         wifi.sta.disconnect()
         wifi.sta.connect()
     else
         tmr.stop(2)
         print("Connected, IP is "..wifi.sta.getip())
     end
end)


print("Ready to listen on TCP:80!")

srv=net.createServer(net.TCP)
srv:listen(80,function(conn) 
    conn:on("receive", function(client,request)
        local buf = "";
        buf = buf.."HTTP/1.1 200 OK \t\n"
        buf = buf.."Access-Control-Allow-Origin: * \t\n"
        buf = buf.."Content-Type: application/json  \n\n"
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
        
        if(_GET.pin == "ON1")then
              gpio.write(Relay, gpio.LOW);
              RelayTemp = "on"
              print("Relay on")
        elseif(_GET.pin == "OFF1")then
              gpio.write(Relay, gpio.HIGH);
              RelayTemp = "off"
              print("Relay off")
        elseif(_GET.pin == "ON2")then
              gpio.write(LED, gpio.LOW);
              LEDTemp = "on"
              print("LED on")
        elseif(_GET.pin == "OFF2")then
              gpio.write(LED, gpio.HIGH);
              LEDTemp = "off"
              print("LED off")
        end

        buf = buf.."[{\"Relay\":\""..RelayTemp.."\",\"LED\":\""..LEDTemp.."\"}]"
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)

效果测试

请求不带参数的地址,查询状态

2019-12-13_124729.png2019-12-13_124729.png

开启&关闭继电器

2019-12-13_124815.png2019-12-13_124815.png

2019-12-13_124836.png2019-12-13_124836.png

打开&关闭LED

2019-12-13_124954.png2019-12-13_124954.png

2019-12-13_124937.png2019-12-13_124937.png

添加新评论

* 已开启反垃圾保护,《隐私政策》