Настройка реле 5 Вольт с wi-fi модулем esp8266-01 с aliexpress

Увидел на aliexpress реле с wi-fi модулем esp8266-01 всего за ~200 руб.
https://ru.aliexpress.com/item/ESP8266-5V-WiFi-relay-module-Things-smart-home-remote-control-switch-phone-APP/32812243370.html
Обрадовался т.к. нужно было устройство для удаленной перезагрузки фермы.
Как оказалось рано! Это незаконченное “корявое” решение.
Незаконченное – без дополнительного оборудования использовать это реле (со стандартной прошивкой) невозможно, управлять реле можно только по uart.

Еще минус — при подаче на реле напряжения (при включении), реле кратковременно замыкает контакты. (что для меня очень неудобно т.к. как я уже и говорил реле будет замыкать контакты “reset” компьютера)

Для управления реле и управления WiFi модуля esp8266-01, прошивки WiFi модуля esp8266-01, пришлось купить устройство с чипом CH340G.
https://ru.aliexpress.com/item/OPEN-SMART-USB-to-ESP8266-ESP-01-Wi-Fi-Adapter-Module-w-CH340G-Driver/32795568611.html
Со стандартной прошивкой — реле не автономно, т.е. после включения, WEB Server автоматически не стартует, к нему нужно подключаться по serial и запускать WEB Server командами:
AT+CIPMUX=1 — multi connection
AT+CIPSERVER=1 — по умолчанию порт 333

По управлению реле со стандартной прошивкой можно ознакомиться по ссылкам:
https://www.hackster.io/makerrelay/esp8266-wifi-5v-1-channelrelaydelaymoduleiotsmarthomee8a437
http://www.avmarket.eu/modulprzekaznikawifiesp8266-5vdcp-4312.html
мои настройки:
AT+RESTORE -сброс к заводским настройкам
AT+GMR – узнать версию прошивки
AT+UART=9600,8,1,0,0 — перевод со 115200 на 9600
AT+CWMODE=1 — клиент, подключается к другим точкам доступа.
AT+RST -перезагрузка модуля
AT+CWJAP=»имя сети»,»пароль»
AT+CIPMUX=1 — multi — connection
AT+CIPSERVER=1 — по умолчанию порт 333
AT+CIFSR – узнать IP адрес
AT+CIPMODE=0 – режим передачи данных – “0” сервер может отправлять данные клиенту и может принимать данные от клиента.
В двух словах, запускаем программу USR-TCP232-Test-V1.3, подключаемся как TCP Client к ip адресу сервера, ставим галочку Send as HEX и посылаем команды: A00101A2 — open relay, A00100A1 — close relay.
Чтобы не “городить огород” и сделать устройство автономным, решил прошивать WiFi модуль прошивкой Arduino IDE.
Где скачать, как установить и настроить Arduino IDE в инете много статей – этот вопрос рассматривать не будем. Можно посмотреть, например, здесь: https://geektimes.ru/post/271754/
Пример управления этим реле c помощью esp8266-01 нашел здесь:
https://esp8266.ru/forum/threads/esp-01-relayvkljuchenierele.2716/
Модифицировал стандартый пример esp8266 WiFi WEB Server из Arduino IDE.
И вот рабочий пример прошивки:
#include <ESP8266WiFi.h>
#include <Arduino.h>
const char* ssid = "SSID";
const char* password = "Password";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void toggleRelay(bool relayState)
{
//if (relayState)
//{
const byte miBufferON[] = {0xA0, 0x01, 0x01, 0xA2};
Serial.write(miBufferON, sizeof(miBufferON));
delay(1000);
const byte miBufferOFF[] = {0xA0, 0x01, 0x00, 0xA1};
Serial.write(miBufferOFF, sizeof(miBufferOFF));
// }
// else
//{
//To disable the Relay send it by serial port:
// const byte miBufferOFF[] = {0xA0, 0x01, 0x00, 0xA1};
// Serial.write(miBufferOFF, sizeof(miBufferOFF));
// val = 0;
// }
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int val;
//if (req.indexOf("/gpio/0") != -1)
//toggleRelay(false);
//else if (req.indexOf("/gpio/1") != -1)
//toggleRelay(true);
if (req.indexOf("/gpio/1") != -1)
toggleRelay(true);
else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
//digitalWrite(2, val);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nReley Blinked";
//s += (val)?"high":"low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected 
// when the function returns and 'client' object is detroyed
}

Т.е. при наборе: http://ip_web_server/gpio/1 — реле замкнет контакты на 1 сек.
Ставим переключатель в режим программирования и Заливаем скетч

Надеюсь, данная статья сэкономит кому-нибудь время.