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

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

Модератор: immortal

Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

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

Сообщение Forth » Вс сен 22, 2019 8:22 pm

Столкнулся с 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 МБ) 5402 просмотра
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

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

Сообщение Aven » Вс сен 22, 2019 8:59 pm

MQTT подключение может разрываться, надо восстанавливать.
Пишите лог в Serial и смотрите.
Питание 5V подавайте на VIN.
За это сообщение автора Aven поблагодарил:
Forth (Вс сен 22, 2019 9:53 pm)
Рейтинг: 1.16%
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

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

Сообщение Forth » Вс сен 22, 2019 9:36 pm

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
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

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

Сообщение Aven » Вс сен 22, 2019 9:41 pm

состояние client.connected() как минимум
За это сообщение автора Aven поблагодарил:
Forth (Вс сен 22, 2019 9:53 pm)
Рейтинг: 1.16%
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

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

Сообщение Forth » Вс сен 22, 2019 9:56 pm

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
Благодарил (а): 39 раз
Поблагодарили: 0

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

Сообщение Forth » Пн сен 23, 2019 6:44 pm

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

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

Сообщение Forth » Вт сен 24, 2019 6:04 am

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

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

Сообщение ZyaK » Вт сен 24, 2019 7:48 am

90% что проблема по питанию. вешайте конденсаторы на 5 вольт и на 3.3 как электролиты так и керамику, до кучи я поставил еще и танталы.
пол года полет нормальный ни одного дисконекта. и это на 8266, 32 то поболее жрет, по тому очень требовательна к питанию.
За это сообщение автора ZyaK поблагодарил:
Forth (Вт сен 24, 2019 9:59 am)
Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

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

Сообщение Forth » Вт сен 24, 2019 10:11 am

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
Сообщения: 417
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 71 раз

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

Сообщение ZyaK » Вт сен 24, 2019 2:21 pm

Электролиты по 100 микрофарад один прям на ноги ЕСПи, второй по входу 5 вольт, третий по выходу 3.3. Тантал у меня тоже на 100 микрофарад параллельно ногам ЕСПи, ну и керамика по 0.1
кстати каждую ЕСПи я запитываю через диод, чтоб исключить просадки по 5 вольтовой линии на остальные устройства.
блок питания у меня 5 вольт 5 ампер хрен знает от чего, но и малина 2-я на нем же висит и все сенсорные выключатели.
вот как то так плата выглядит
Вложения
pdjP0pzKEGA.jpg
pdjP0pzKEGA.jpg (392.13 КБ) 5257 просмотров
За это сообщение автора ZyaK поблагодарил:
Forth (Вт сен 24, 2019 3:26 pm)
Рейтинг: 1.16%
PI2 + MQTT + 5 ESP8266 + Atmega16
Ответить