ESP01s Relay 继电器模块
warning:
这篇文章距离上次修改已过1795天,其中的内容可能已经有所变动。
恩,这是ESP01s小玩具系列的第二集(2/3)
这次,我们做一个基于ESP01s和继电器模块的智(yao)能(kong)开关。
它长这样子滴↓
和上次的DHT11一样,这回也是用lua来写。
PS:手动拼接html简直要死。
OK,下面开始咯。
店家的小礼物
店家贴心的送了个手机控制的app,研究了一下发现,就是发送一个带pin参数的请求到ESP01s的IP上。
嘛,为了不多造轮子,就兼容一下好了
你可以点击这里下载这个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)