Bonjour,
dans le cadre de mon système domotique en inspirant de programmes présents sur le web j'ai développé un petit programme qui informe le serveur de la bonne prise en compte de l'ordre d'allumer ou d'éteindre le chauffage. Je désire aller plus loin dans la fiabilisation de mon asservissement en m'assurant qu'en cas de défaillance du logiciel (exemple parasite électromagnétique) mon esp effectuera automatiquement un Reset
Pour ce faire la solution qui m'est venue immédiatement à l'esprit est l'utilisation du chien de garde matériel.
Après avoir lu plusieurs articles sur le sujet et avec l'aide de google traduction pour les textes en anglais j'ai mis en place dans le setup l'instruction ESP.wdtDisable() qui selon ma compréhension de son fonctionnement désactive le chien de garde logiciel tout en activant le chien de garde matériel.
Comme mon programme dure nettement moins que six secondes ( en particulier lorsqu'aucun client n'est connecté) je n'ai pas mis dans un premier temps la fonction ESP.wdtFeed(); destinée à réinitialiser le chien de garde. En effet j'ai lu que le fait de reboucler le loop réinitialise le timer du chien de garde
Lorsque je lance le programme et sans connexion d'un client le Reset du chien de garde se déclenche toutes les six secondes et cela même si ce complète la boucle loop de la fonction qui alimente le chien de garde
Pourriez vous m'aider et me signaler mon erreur de compréhension dans l'utilisation du chien de garde

ci joint le programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
 
 
 
 
 
 
#include <ESP8266WiFi.h>
 
 
//pécifier le SSID du point d'accès Wifi
const char* ssid="xxxxxxxxxx";
 
const char* pass ="ddddddddd;";
unsigned long dure;
 
//Créer le serveur web 
WiFiServer serveur(80);
 
 
 
//Démarrage
 
void setup() {
 
 
Serial.begin(115200);
//petite pause
delay(50);
//GPIO0 en sortie
pinMode(0,OUTPUT);
 // GPIOO état haut
 digitalWrite(0,1);
 
 Serial.println();
 Serial.println();
 
 Serial.println("Connexion  a :  ");
 Serial.println(ssid);
 
 //Connexion au point d'accès
 WiFi.begin(ssid, pass);
 
 
 while(WiFi.status() !=WL_CONNECTED) {
delay(500);
Serial.println(".");
 
 }
Serial.println("");
Serial.print("WiFi connecté");
 
//Démarrage du serveur web
serveur.begin();
Serial.println("Serveur actif");
 
//on affiche l'adresse IP
 
Serial.println(WiFi.localIP());
//on déactive le chien de garde logiciel seul le chien de garde matériel reste
//si la boucle loop dure moins de 6 secondes pas besoin de nourrir le chien de garde 
//car le retour en début de boucle le fait automatiquement
 
//ESP.wdtDisable();
 
}
 
 
//boucle principale
void loop() {
 
 
 
  // recherche d'un client connecté
  WiFiClient client =serveur.available();
  if(!client) {
  //non on repart dans la boucle
 
  return;
  }
 
  // un client est connecté
  Serial.println("nouveau client");
 
  // on attend l'envoi de données
  while(!client.available()){
    delay(1);
  }
 //on récupère la ligne qu'il envoie jusqu'au premier retour de chariot
 String req=client.readStringUntil('\r');
 //on affiche la ligne obtenue
 
Serial.println(req);
//on purge
client.flush();
 // on teste la requete
 int val;
 //Est ce que le chemin dans la requete est/gpio/0"
 if(req.indexOf("/gpio/0")!=-1){
  //cela correspond à éteindre  donc à mettre à l'état haut la sortie GPIO0
  val=1; 
  Serial.println("bascule a 1");
  Serial.println(val);
 }
else if(req.indexOf("/gpio/1")!=-1){
 
  //cela correspond à allumer donc à mettre à l'état bas la sortie GPIO0
 val=0;
 Serial.print("bascule a 0");
 Serial.println(val);
 }
 
 
else {
//c'est un autre chemin on indique qui est donné. on indique qu'il correspond à rien
Serial.println("Chemin non valide");
String s="HTTP/1.1 200 OK\r\Content-Type: text/html\r\n\r\n<DOCTYPE HTML>\r\n\La sortie est a l'etat";
s+="Ordre  non connu";
//on finit la page HTML
s+="</html>\n";
 //on envoie la réponse
 client.print(s);
//on déconnecte le client du serveur
client.stop();
// on reboucle sur le loop
return;
}
// nous allons prendre en compte la demande en changeant l'état de sortie
 
digitalWrite(0,val);
// on purge avant d'envoyer la réponse
 
client.flush();
 
//composition de la réponse
String s="HTTP/1.1 200 OK\r\Content-Type: text/html\r\n\r\n<DOCTYPE HTML>\r\n\La sortie est a l'etat";
s+=(val)?"allumé":"coupé";
//on finit la page HTML
s+="</html>\n";
 //on envoie la réponse
 client.print(s);
 //pause
 delay(1);
 Serial.println("Client deconncete");
 // on ne met pas l'instruction client.stop()) car la fin du loop l'entrai ne automatiquement)
//ESP.wdtFeed();
}