Доработка до ума китайского WIFI реле на базе ESP-01S

Заказал на ALI два WIFI реле. В целях домашней автоматизации хотелось иметь устройство, управляемое через GET запросы или MQTT. Думал, что изделие заработает из коробки, но не тут то было.

Вот чудо китайской мысли

20

Не вдаваясь в тонкости, сообщу что есть две версии данного устройства (по инфо из сети): версия 1.0 и версия 4.0. Номер версии можно посмотреть на обратной стороне платки

21.png

 

Так вот, версия 1.0 имеет косяки по схемотехнике, которые не позволяют ESP даже стартовать. Вроде, версия 4.0 не имеет таких косяков. Но, на ALI я не нашел такой платы. А плат v1.0 море. Лечится это при помощи резистора 10кОМ, припаянного следующим образом (см. фото).

По умолчанию в ESP залита прошивка заточенная на Android приложение китайских коллег. Мне такой вариант не подошел и я залил простейший скетч из Arduino IDE ( из этого обзора http://robotchip.ru/obzor-modulya-rele-dlya-esp8266-01s-esp-01s/ )

#include <ESP8266WiFi.h> // Подключаем библиотеку ESP8266WiFi

const char* ssid = «Название Вашей сети»; // Название Вашей WiFi сети
const char* password = «Пароль от Вашей сети»;// Пароль от Вашей WiFi сети

#define RELAY 0 // Пин к которому подключен датчик
WiFiServer server(80); // Указываем порт Web-сервера

void setup(){
Serial.begin(115200); // Скорость передачи 115200
pinMode(RELAY,OUTPUT); // Указываем вывод RELAY как выход
digitalWrite(RELAY, LOW); // Устанавливаем RELAY в LOW (0В)
Serial.println(); // Печать пустой строки
Serial.print(«Connecting to «); // Печать «Подключение к:»
Serial.println(ssid); // Печать «Название Вашей WiFi сети»

WiFi.begin(ssid, password); // Подключение к WiFi Сети

while (WiFi.status() != WL_CONNECTED) // Проверка подключения к WiFi сети
{
delay(500); // Пауза 500 мкс
Serial.print(«.»); // Печать «.»
}
Serial.println(«»); // Печать пустой строки
Serial.println(«WiFi connected»); // Печать «WiFi connected»

server.begin(); // Запуск сервера
Serial.println(«Server started»); // Печать «Server starte»
Serial.print(«Use this URL to connect: «); // Печать «Use this URL to connect:»
Serial.print(WiFi.localIP()); // Печать выданого IP адресса
Serial.println(«/»); // Печать «/»
}

void loop(){
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (!client)
{
return;
}
Serial.println(«new client»); // Отправка «new client»
while(!client.available()) // Пока есть соединение с клиентом
{
delay(1); // пауза 1 мс
}

String request = client.readStringUntil(‘\r’);
Serial.println(request);
client.flush();

int value = LOW;
if (request.indexOf(«/RELAY=ON») != -1)
{
Serial.println(«RELAY=ON»);
digitalWrite(RELAY,LOW);
value = LOW;
}
if (request.indexOf(«/RELAY=OFF») != -1)
{
Serial.println(«RELAY=OFF»);
digitalWrite(RELAY,HIGH);
value = HIGH;
}

client.println(«HTTP/1.1 200 OK»);
client.println(«Content-Type: text/html»);
client.println(«»);
client.println(«<!DOCTYPE HTML>»);
client.println(«<html>»);
client.println(«<head><title>ESP8266 RELAY Control</title></head>»);
client.print(«Relay is now: «);

if(value == HIGH)
{
client.print(«OFF»);
}
else
{
client.print(«ON»);
}
client.println(«<br><br>»);
client.println(«Turn <a href=\»/RELAY=OFF\»>OFF</a> RELAY<br>»);
client.println(«Turn <a href=\»/RELAY=ON\»>ON</a> RELAY<br>»);
client.println(«</html>»);

delay(1);
Serial.println(«Client disonnected»);
Serial.println(«»);
}

Основные сложности были в прошивке модуля ESP-01s. На ALI можно приобрести переходник USB на TTL с разъемом, куда вставляется платка ESP. Но у меня такого переходника не было. Поэтому, пришлось в качестве переходника использовать Arduino UNO.  Пользовался мануалом: https://cordobo.com/2300-flash-esp8266-01-with-arduino-uno/

Если коротко:

  1. Схема подключения такая

Wiring scheme:
UNO — ESP8266 (wire color)
RX — RX (white)
TX — TX (green)
GND — GND (black)
GND — GPIO 0 (purple)
3.3V — VCC (red)
3.3V — CH_PD (orange)

2. На UNO обязательно надо замкнуть RESET на GND. Иначе, проц UNO запустится и прошить ESP не удастся.

3. Подключать RX TX выходы через делители (согласовывать уровни TTL 5v-3.3v) не стал — у меня все получилось без этого.

4. Существует мнение, что питать ESP от UNO не надо, слишком мал допустимый ток. У меня все получилось без дополнительных источников 3.3в

5. И, что больше всего выгрызло мне мозг: выбирайте кабель USB для подключения UNO минимальной длины. При получении ошибки при прошивке я долго пытался найти причину и искал ее в схеме подключения. Однако, всему виной был кабель. Я перепробовал три различных кабеля, пока не нашел подходящий.

Выводы: Можно брать, если знать, как вылечить плату. Цена оправдывает средства. Цена такой платки на данный момент 140 руб. Цена Sonoff Basic около 320. Правда, Sonoff — уже готовое устройство с решенной проблемой питания модуля и реле от сети 220В. Если бюджет не жмет, то лучше взять Sonoff.