Bonjour à tous,
Voila maintenant un petit bout de temps que je joue avec l'esp8266 (notamment avec une nodeMCU v1.0 sous IDE Arduino 1.6.5), et j'ai réussi à pondre, pour mon paternel, une supervision de sa serre pendant ses périodes de congés.
Bref, le produit est finalisé, fonctionne comme attendu, SAUF que:
Je me heurte à un soucis de déconnexion du réseau Wifi, j'ai vite identifié le problème puisque je me connecte dans la fonction setup(), puis place a la boucle loop() qui elle ne vérifie jamais l'état de la connexion.
Je sais que le programme continu de tourner, puisque le système comporte un LCD avec un clignotement du curseur à chaque tour de loop(), justement mis en place pour vérifier l'intégrité du système.
J'ai donc épluché le code source de la grosse bibliothèque ESP8266:
lien: Depot Git ESP8266
et je trouve plusieurs fonctions (issue de ESP8266WiFiSTA.cpp) qui pourrait convenir:
/**
* will force a disconnect an then start reconnecting to AP
* @return ok
*/
bool ESP8266WiFiSTAClass::reconnect() {
if((WiFi.getMode() & WIFI_STA) != 0) {
if(wifi_station_disconnect()) {
return wifi_station_connect();
}
}
return false;
}
/**
* Setting the ESP8266 station to connect to the AP (which is recorded)
* automatically or not when powered on. Enable auto-connect by default.
* @param autoConnect bool
* @return if saved
*/
bool ESP8266WiFiSTAClass::setAutoConnect(bool autoConnect) {
bool ret;
ETS_UART_INTR_DISABLE();
ret = wifi_station_set_auto_connect(autoConnect);
ETS_UART_INTR_ENABLE();
return ret;
}
/**
* Set whether reconnect or not when the ESP8266 station is disconnected from AP.
* @param autoReconnect
* @return
*/
bool ESP8266WiFiSTAClass::setAutoReconnect(bool autoReconnect) {
return wifi_station_set_reconnect_policy(autoReconnect);
}
Et c'est la que je bloque, qu'elle est la meilleure solution à retenir, si toutefois il y en a une, ou peut être que toute se valent?
Mon code ressemble fortement à ça, une connexion via WiFi.begin() dans le setup() avec contrôle si c'est bien connecté avant de passer à la loop()
#include <ESP8266WiFi.h>
const char* ssid = "your-ssid";
const char* password = "your-password";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
}
void loop() {
//fait plein de chose ici, mais pas de test de l'état du reseau
}