ESP32 перестает работать mqtt

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

ESP32 перестает работать mqtt

Сообщение Forth »

Столкнулся с 2 проблемами при использовании ESP32:
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
}
Вложения
IMG_20190922_211342.jpg
IMG_20190922_211342.jpg (2.18 МБ) 5981 просмотр
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия

Re: ESP32 перестает работать mqtt

Сообщение Aven »

MQTT подключение может разрываться, надо восстанавливать.
Пишите лог в Serial и смотрите.
Питание 5V подавайте на VIN.
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

Re: ESP32 перестает работать mqtt

Сообщение Forth »

Aven писал(а): Вс сен 22, 2019 8:59 pm MQTT подключение может разрываться, надо восстанавливать.
Пишите лог в Serial и смотрите.
Питание 5V подавайте на VIN.
Если не сложно подскажите, что именно выводить в монитор порта? Очень буду благодарен, если добавите код в моем скетче.
В монитор порта выводит, что подключение к WiFi есть "WiFi connected IP address: 192.168.3.77"
Да, 5V подаю на VIN.
Последний раз редактировалось Forth Вс сен 22, 2019 9:44 pm, всего редактировалось 1 раз.
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия

Re: ESP32 перестает работать mqtt

Сообщение Aven »

состояние client.connected() как минимум
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

Re: ESP32 перестает работать mqtt

Сообщение Forth »

Aven писал(а): Вс сен 22, 2019 9:41 pm состояние client.connected() как минимум
В монитор порта выводится:
WiFi connected
IP address: 192.168.3.77

А при следующем коде думаю еще должно выводится "Mosquitto connect..."

Код: Выделить всё

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("");
    }
  }
}
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

Re: ESP32 перестает работать mqtt

Сообщение Forth »

Прошу оказать консультацию по решению данной проблемы, как настроить стабильное подключение mqtt?
Есть работающий скетч?
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

Re: ESP32 перестает работать mqtt

Сообщение Forth »

Может кто подскажет с чем может быть связана ошибка сокета и отключение клиента?
Вложения
Mqtt.jpg
Mqtt.jpg (110 КБ) 5879 просмотров
ZyaK
Сообщения: 419
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск

Re: ESP32 перестает работать mqtt

Сообщение ZyaK »

90% что проблема по питанию. вешайте конденсаторы на 5 вольт и на 3.3 как электролиты так и керамику, до кучи я поставил еще и танталы.
пол года полет нормальный ни одного дисконекта. и это на 8266, 32 то поболее жрет, по тому очень требовательна к питанию.
PI2 + MQTT + 5 ESP8266 + Atmega16
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

Re: ESP32 перестает работать mqtt

Сообщение Forth »

ZyaK писал(а): Вт сен 24, 2019 7:48 am 90% что проблема по питанию. вешайте конденсаторы на 5 вольт и на 3.3 как электролиты так и керамику, до кучи я поставил еще и танталы.
пол года полет нормальный ни одного дисконекта. и это на 8266, 32 то поболее жрет, по тому очень требовательна к питанию.
Какого объема мкФ будет достаточно, тант.чип конд.220 мкФ х 6.3В типC 10 хватит?
На сколько электролиты, керамику?
Для питания использую следующие модули питания, мне их рекомендовали как стабильные и хорошего качества:
AC-DC 220 V 5
AMS1117 3,3 В модуль питания
Может другие модули питания порекомендуете для ESP32?
ZyaK
Сообщения: 419
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск

Re: ESP32 перестает работать mqtt

Сообщение ZyaK »

Электролиты по 100 микрофарад один прям на ноги ЕСПи, второй по входу 5 вольт, третий по выходу 3.3. Тантал у меня тоже на 100 микрофарад параллельно ногам ЕСПи, ну и керамика по 0.1
кстати каждую ЕСПи я запитываю через диод, чтоб исключить просадки по 5 вольтовой линии на остальные устройства.
блок питания у меня 5 вольт 5 ампер хрен знает от чего, но и малина 2-я на нем же висит и все сенсорные выключатели.
вот как то так плата выглядит
Вложения
pdjP0pzKEGA.jpg
pdjP0pzKEGA.jpg (392.13 КБ) 5836 просмотров
PI2 + MQTT + 5 ESP8266 + Atmega16
Ответить