ESP32 ne répond plus au commande après quelque minute.

bonjour a tous,
ceci est mon premier message sur arduino.cc.
Mon projet est de connecter une bande led, controlé par Esp32 DEVkit V1, avec un relais Arduino pour le piloter à la voix avec google assistant.
Les Leds sont alimenter avec une alimentation 12v 2A et l'esp avec la prise micro usb.
j'ai réussi à faire fonctionner ce projet, malheureusement les commandes vocales et le bouton virtuel fonctionne seulement quelques minutes.
Le moniteur de commande ne reçois plus les commandes après ce cour laps de temps.
si les led sont allumés, elle ne s'éteigne plus malgrès la demande faite.
je me sert de Adafruit et IFTTT.
bibliothèque Adrafruit MQTT.

voici mon code :

#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WLAN_SSID       "$$"
#define WLAN_PASS       "$$"
#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                  
#define AIO_USERNAME    "$$$"
#define AIO_KEY         "$$$$$"
int output=2;
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);        // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Subscribe Led_Control = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Led_Control");
void MQTT_connect();

void setup() {
 Serial.begin(115200);
delay(10);
pinMode(2,OUTPUT);
// Connect to WiFi access point.
 Serial.println(); Serial.println();
 Serial.print("Connecting to ");
 Serial.println(WLAN_SSID);
 WiFi.begin(WLAN_SSID, WLAN_PASS);
 while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
 }
 Serial.println();
 Serial.println("WiFi connected");
 Serial.println("IP address: "); Serial.println(WiFi.localIP()); 
 mqtt.subscribe(&Led_Control);
 }
uint32_t x=0;

void loop() { 
 MQTT_connect();
 Adafruit_MQTT_Subscribe *subscription;
 while ((subscription = mqtt.readSubscription(5000))) {
    if (subscription == &Led_Control) {
     Serial.print(F("Got: "));
     Serial.println((char *)Led_Control.lastread);
      if (!strcmp((char*) Led_Control.lastread, "ON"))
     {
     //Active low logic
     digitalWrite(2, HIGH);
     }
     else
     {
        digitalWrite(2, LOW);
      }
   }
}
}
void MQTT_connect() {
  int8_t ret;
// Stop if already connected.
  if (mqtt.connected()) {
   return; 
}
 Serial.print("Connecting to MQTT... ");
 uint8_t retries = 3;
 while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Retrying MQTT connection in 5 seconds...");
      mqtt.disconnect();
      delay(5000);  // wait 5 seconds
      retries--;
       if (retries == 0) {
       // basically die and wait for WDT to reset me
        while (1);
        }
       }
Serial.println("MQTT Connected!");
}

merci d'avance pour votre aide.

Bonjour et Bienvenue

ceci est mon premier message sur arduino.cc.

Prencre connaissance des règles de fonctionnement d'un forum en y arrivant est recommandé !!

Que fait cette question au milieu des choses F I N I E S ??

Bien lire les messages épinglés en tête de forum qui indiquent
-où poser les questions ?
-quelles informations détaillées fournir ?
-comment présenter le code ?

En toute urgence demandes au Modérateur (lien report to Moderator) de déplacer le message à l'endroit approprié
et corriges le message pour que le code apparaisse de la manière suivante :

mon code.....

Bonjour, je suis désolé, je n'ai aucune connaissance des forums.
je viens de modifier le code, malheuresement je ne sais pas vraiment ou déplacer mon sujet.
je vois 3 section en francais qui sont tutoriels et cours, réalisation et projets finis et
bar.
dois je le déplacer dans tutoriels et cours ?
merci de votre aide.

c'est simple, avant tout Lire le 'Mode d'Emploi' avant usage !!! (Règles du Forum)

Ou poser les questions ?
https://forum.arduino.cc/index.php?topic=546956.0
C'est clairement indiqué dans ce message épinglé en tête de Forum , à lire en arrivant !!
On y découvre également quelles informations détaillées fournir sur le matériel utilisé

Déplacer ? seul le modérateur peut le faire et comme je l'ai indiqué il y a un lien à cliquer en bas à gauche ('Report to Moderator') pour lui demander de bien voulir le faire. ne pas poster un second message en plus de celui-ci, les messages multiples pour poser la même question ne sont pas autorisés sur ce Forum

+insérer pluseurs lignes vides entre deux lignes de code ne facilite pas le travail des lecteurs !!

Rebonjour, merci pour votre aide, j'ai essayé de modifier mon message au mieux, j'ai enlever les lignes vides.
et j'ai fait un report au modérateur.
bonne journée

Mon projet est de connecter une bande led,

c'est vague !!

Où est la référence exacte de la bande à piloter ?
Comment est elle gérée sur le plan matériel ? quel ou quels GPIO ? (seul GPIO2 apparaît dans le code)

(bien relire les Règles du Forum pour ce qui est de l'ensemble informations à fournir !!)

bonjour, merci pour votre aide.
L' ESP32 est brancher sur une prise USB pour le moment, il pilote un relais connecter a la sortie gpio 2.
le relais alimente la bande led 12v blanche par le biais d'une alimentation 12V.
j'ai crée un bouton simple ON/OFF sur io Adafruit qui est aussi relier a IFTTT pour pouvoir faire une commande vocal.

Sans faire le montage complet, si je branche juste mon esp32 sur mon pc, j'ouvre le moniteur série arduino et rien ne ce passe. Si j'appuie sur le bouton ''EN'' de l'esp32 celui ci démarre est m'affiche

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac


Connecting to La********
...
WiFi connected
IP address: 
192.**********
Connecting to MQTT... MQTT Connected>

je lance alors une commande vocal pour allumer, puis éteindre est l'Esp me répond:

Got: ON
Got: OFF

jusque la tout fonctionne je peux répéter la commande plusieurs fois celui ci me répond, mais passer un délai d'environ 3-4 minutes plus rien ne se passe dans le moniteur série, les commandes ne sont plus reçus.
Si j'appuie sur le bouton''EN'' cela refonctionne pour 3-4 min.

je précise que le bouton io adafruit continu bien à effectuer le changement ON/OFF passer le delais de 3-4 minute. mais l'ESP ne le reçois plus.

j'espère avoir été un petit peu plus clair, je ne maitrise pas trop mon sujet.
désolé.

OK

débugger par parties !! ... laisser tomber dans un premier temps la commande vocale et IFTTT, tester déjà la liaison MQTT entre l' ESP32 et le broker d'AdafruitIO. (Pas de changement de programme , l'injection de la commande se faisant seulement plus près de la carte, sans passer par IFTTT et Google Assistant.

Placer un bouton sur une 'dashboard' d'AdafuitIO, relier ce bouton au bon topic et voir si le défaut apparait ( ESP32 ne réagissant plus au bout d'un moment.)

Aure possibilité utilser MQTTfx pour publier l'état ON/OFF sur le bon topic du broker d'Adafuit.

Rebonjour,
j'ai crée un nouveau bouton adafruit sans liaison avec IFTTT, et le problème est toujours présent l'esp32 répond durant quelques minutes puis plus rien.

j'ai ensuite télécharger MQTTfx, je l'ai relier à mon compte adafruit en utilisant le feeds créé pour le test, et le problème et le même, tout fonctionne ,puis au bout de quelques minutesles commandes envoyer depuis MQTTfx arrive jusqu'Adafruit le bouton passe bien de ON a OFF sur adafruit mais pas à l'ESP32.

le problème est donc bien localisé du côté de l'ESP32 / MQTT

Il faudrait chercher à savoir ce que fait l'ESP32 quand il ne répond pas, dans quelle boucle il tourne

Je ne connais pas la librairie Adafruit MQTT (n'utilise que PubSubClient, même pour AdafruitIO)
Assure-t-elle la reconnection en cas de besoin ?
Avec cette librairie d'Adafuit il y a probablement une option à activer pour débugger et avoir une trace de l'état d'avancement dans le protocole MQTT
EDIT : elle est présente et à décommenter en ligne 37 du fichier Adafruit_MQTT.h)

Sinon il reste la solution des Serial.println() insérés dans diverses boucles pour que l'ESP32 se manifeste

Rebonjour,
je suis vraiment novice, j'ai passer plusieurs heures hier à essayer de déchiffrer tout ça, sans aucun résultat concluant.
j'ai lu un commentaire d'une personne sur youtube ayant eu le meme soucis avec un code similaire au mien, pourtant le code fonctionner bien pour la majorité des gens. j'ai donc tester ce code et meme problème.

Je pense que la bibliotèque assure la reconnection en cas de besoin car dans le moniteur série j'ai deja eu la ligne

connecting to MQTT ...MQTT connected

apparaître une seconde fois apres un certain laps de temps.
j'ai essayer d'ouvrir le fichier Adafruit_MQTT.h dans Chrome. Je n'ai pas de numero de ligne pour trouver la ligne 37
il y a bien des commandes de debug mais je ne sais pas comment cela fonctionne.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.