Wi-fi розетка на esp8266 Умный дом

esp8266
Умная розетка на ESP-wifi esp8266 esp-07В сети Интернет поискал и нашёл много разных исполнений умных радиоуправляемых wifi розеток, но все варианты мне неустраивали или по исполнению или по методу управления или ардуино или инфа какая-то есть, но скучно читать — ни одной картинки, безобразие!!!

Представляю Вам Wifi розетку на модуле ESP8266.



В своём варианте исполнения релейной управляемой розетки использую модуль ESP-07(вы можете использовать ESP8266 сразу с UARTом на борту и NODEMCU вот такую напимер), Прошитый под LUA то есть nodemcu, соответственно напишу два скрипта LUA. О том как писать — вгружать скрипты писал в первой статье «Первая программа на LUA для ESP»
Использовать для написания и загрузки скриптов в модуль esp8266 буду программу

ESPlorer

созданную именно под эти цели.
В первом скрипте будет реализована функция подключения к Wi-fi роутеру и 10 секундная задержка перед запуском второго скрипта основной программы.
Сделано именно с задержкой для того что-бы после перезагрузки модуля с помощью комманды tmr.stop остановки счётчика можно было остановить таймер и что-то подправить и вгрузить опять иначе программа при выполнении вам не даст ничего вгрузить вновь(вобщем делайте так)!
Второй скрипт будет содержать саму программу с поднятым веб сервером на котором будет простецкий html интерфейс с кнопками.
Простенькая схемка
Использовать — тоесть дёргать ногами будем GPIO2 и GPIO0.
схема умной радиоуправляемой wifi розетки релейного модуля esp8266"  alt="схема умной радиоуправляемой wifi розетки релейного модуля esp8266

GO!



Первый скрипт

с именем init.lua
Обязательно с таким именем ибо nodemcu первым делом после старта загружает именно его.


wifi.setmode(wifi.STATION)
print('set mode=STATION (mode='..wifi.getmode()..')')
print('MAC: ',wifi.sta.getmac())
wifi.sta.config("ИМЯ СЕТИ ВАЙФАЙ","ПАРОЛЬ")
FileToExecute="rrr.lua"
print("For stop have 10 sec")
tmr.alarm(0, 10000, 0, function()
print("Run".. FileToExecute)
dofile(FileToExecute)
--if wifi.sta.getip() == nil then 
print(wifi.sta.getip()) 
end)

Незабываем в скрипте поменять имя и пароль от сети вайфай!

Второй скрипт назовём его rrr.lua
Будет поднимать вебсервер и ждать нажатия на кнопки.
print(wifi.sta.getip())
led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        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
        buf = buf.."<html>    <head><title>ESP 2ch</title>";
        buf = buf.."<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" /></head>    <body><h1> ESP8266 2 channel Web Server</h1>";
        buf = buf.."<h1> ESP8266 Web Server</h1>";
        buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>выкл</button></a> <a href=\"?pin=OFF1\"><button>Включить</button></a></p>";
        buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>выкл</button></a> <a href=\"?pin=OFF2\"><button>Включить</button></a></p>";
         buf = buf.." 




<hr>Made in RUSSIA version 29.06.2018 radio.obninskiy.net 
"; 
        buf = buf.."</body></html>";
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.LOW);
        end
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)

Лучше скачать эти скрипты отсюда, так как в коде потёрлись(фильтранулись движком сайта) некоторые теги.

Скачать скрипты LUA для Умного дома реле.

init.lua

rrr.lua

Код может и корявый но рабочий_) Проверйяте)
Не обращайте внимание если при включении релюхи будут передёргиваться, это нормально для GPIO2 и GPIO0. Можете использовать другие ноги.

Если всё без ошибок, то Вы сможете войти в устройство через браузер по выданному от wi-fi роутера паролю. Ож нже будет выдан в интерфейс если смотреть в com порт автоматически при выполнении в скрипте комманды print(wifi.sta.getip())

Распиновка ESP для работы с ногами GPIO в среде LUA
соответствие GPIO LUA распиновка для скрипта

2 комментария

комментарий был удален
avatar
Сделал подобный вариант с 8ми канальным твердотельным реле.

esp8266 omron твердотельное реле.
Использовал пины GPIO
led1 = 3 — жпио 0
led2 = 4 — жэпио 2
led5 = 1 — жэпио 5
led4 = 2 — жэпио 4

led13 = 7 — жпио 13
led12 = 6 — жэпио 12
led14 = 5 — жэпио 14
led16 = 0 — жэпио 16
Но глюки были у ESP с наводками на ноги и срабатыванием релюх, пришлось подтяжку делать как нестранно на плюс.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.