1- проблема с питанием модуля ESP32, подключил 5V и 3,3V, но модуль работает только если подключено питание по USB. Пришлось дополнительно подать питание от 5V через разъем USB, очень странно, это еще при том, что данный модуль вообще имеет функцию прошивки через WiFi.
2- через пару минут после перезагрузки модуля ESP32 кнопкой EN перестает работать передача данных через mqtt, хотя при нажатии кнопки реле срабатывает, может модуль засыпает или частично зависает.
Думал модуль неисправен, но нет, так ведут и другие 2 модуля.
Код: Выделить всё
// Блок [Подключение библиотек] ************************************************
#include <WiFi.h>
#include <PubSubClient.h>
// END Блок [Подключение библиотек] ********************************************
// Блок [Подключение к сети WI-FI] *********************************************
const char* ssid = "*******"; // Имя WI-FI сети
const char* password = "*****"; // Пароль WI-FI сети
const char* mqtt_server = "****"; // IP адрес MQTT сервер
// END Блок [Подключение к сети WI-FI] *****************************************
#define RELE_1 13 // Реле №1
#define BUTTON_1 26 // Кнопочный выключатель №1
#define relays_topic1 "ESP32-01/RELE_1" // Топик реле №1
WiFiClient espClient;
PubSubClient client(espClient);
long last_mls = millis();
char msg[50];
boolean rState1 = false;
boolean btnPress1 = false;
boolean lastbtnStat1 = false;
void setup() {
pinMode(RELE_1, OUTPUT);
pinMode(BUTTON_1, INPUT);
digitalWrite(RELE_1, rState1);
Serial.begin(115200);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
delay(100);
WiFi.begin(ssid, password);
delay(6000);
client.connect("ESP32-01Client");
client.subscribe(relays_topic1);
lastbtnStat1 = digitalRead(BUTTON_1);
}
void reconnect_server() {
if (WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("WiFi connect...");
} else {
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("");
}
if(!client.connected() && WiFi.status() == WL_CONNECTED){
if (client.connect("ESP32-01Client")) {
Serial.println("Mosquitto connect...");
client.subscribe(relays_topic1);
} else {
Serial.print("failed connect Mosquitto, rc=");
Serial.print(client.state());
Serial.println("");
}
}
}
// Блок [обратная связь] ****************************************************
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Блок [Управление Реле 1 из MajorDomo] ************************************
if (strTopic == "ESP32-01/RELE_1") {
if ((char)payload[0] == '1') {
rState1 = true;
digitalWrite(RELE_1, rState1);
}
else {
rState1 = false;
digitalWrite(RELE_1, rState1);
}
}
// END Блок [Управление Реле 1 из MajorDomo] ********************************
} // для блока обратная связь тест
// Блок [Управление Реле 1 с кнопки] ****************************************
void button_1(){
btnPress1 = digitalRead(BUTTON_1);
if (btnPress1 && !lastbtnStat1){
delay(100); // защита от дребезга (100 мсек.)
btnPress1 = digitalRead(BUTTON_1);
if(btnPress1){
rState1 = !rState1;
digitalWrite(RELE_1, rState1);
client.publish(relays_topic1, String(rState1).c_str(), true); // Публикуем состояние реле 1 на MQTT
}
}
lastbtnStat1 = btnPress1;
}
// END Блок [Управление Реле 1 с кнопки] ************************************
// Блок [Управление Реле 4 с кнопки] ****************************************
void button_4(){
btnPress4 = digitalRead(BUTTON_4);
if (btnPress4 && !lastbtnStat4){
delay(300); // защита от дребезга (300 мсек.)
btnPress4 = digitalRead(BUTTON_4);
if(btnPress4){
rState4 = !rState4;
digitalWrite(RELE_4, rState4);
client.publish(relays_topic4, String(rState4).c_str(), true); // Публикуем состояние реле 4 на MQTT
}
}
lastbtnStat4 = btnPress4;
}
// END Блок [Управление Реле 4 с кнопки] ************************************
void loop() {
// Блок [Проверка подключения] **********************************************
if (millis() - last_mls > 60000) { // Проеверка подключения к сети (раз в 60 сек.)
last_mls = millis();
reconnect_server();
}
// END Блок [Проверка подключения] ******************************************
button_1(); // Функция кнопки №1 и публикация статуса реле 1 на MQTT
}