ESP8266 mode AP_STA et STA

Bonjour,

J'ai du mal avec le wifi sur l'ESP8266

Ce que je voudrais :
Un esp8266 démarre en mode AP_STA en softAP avec un serveur web... Tout est bien, un smartphone peut se connecter et communiquer avec.

De temps en temps comme il ne reste pas immobile je voudrais que le client au smartphone puisse lui demander de se connecter à une box, le client donnant le ssid et le password.

J'ai rien trouvé montrant comment faire

Et j'avoue que l'esp et sa manie de conserver des parties de programme du genre : il démarre en STA se connecte, on change le programme et on le fait démarrer en AP sans lui demander de se connecter à la box et il démarre en AP ET se connecte à la box. Si ensuite on lui change le programme pour lui demander de se connecter en STA et bien l'ap précédente existe toujours.
Un serveur web avec un démarrage en AP_STA répond à la fois en 192.168.4.1 ET à l'adresse ip qu'il avait eu précédemment en STA.

Bonsoir, je vois 2 possibilités
La 1ere avec espeasy qui offre pas mal de possibilités e/s et petit scripts au démarrage il crée un wifi ou tu te connectes et sur la page 192.168.4.1 tu choisis ton routeur ssid et password puis il redémarre ensuite il recoit une ip par dhcp du routeur et tu le configure comme tu veux
Si tu change d endroit il ne trouve plus l ancien routeur donc au démarrage tu peux de nouveau choisir un autre wifi
La 2eme si tu code toi meme avec l ide arduino tu utlise wifimanager qui pareil

Fabrice

Bonjour

La librairie WifiManager indiquée par CelticLord est fournie avec plusieurs exemples montrant diverses façons d'activer et désactiver le point d'accès temporaire permettant de scanner l'environnement , sélectionner un AP et saisir le mot de passe.
Il devient alors facile d'ajouter ce type de fonctionnalité à son application
La libraire est disponible vie l'IDE Arduino, voici également son dépot avec des explications et copies d'écran

Pour ce qui est du point d'accès (SoftAP) qui "s'incruste" essayer SoftAPdisconnect() décrit içi

Un serveur web avec un démarrage en AP_STA répond à la fois en 192.168.4.1 ET à l'adresse ip qla fonction u'il avait eu précédemment en STA.

ça parait normal, AP_STA correspond à la combinaison AP + STA :
l'AP (soft) est en 192.168.4.1
STA : l'ESP au démarrage , si le WiFi est acivé , tente de se connecter au dernier point d'accès auquel il avait précedemment réusssi à se connecter (comportement par défaut modifiable par la fonction setAutoconnect() )

Merci pour vos réponses

ESPeasy : je regarde, c'est de l'anglais, et donc un obstacle pour moi, ensuite sauf erreur de ma part on est pas dans l'IDE arduino donc du nouveau pour moi et va falloir que j'explore plus profondément.
Pour ESPManager, j'avais trouvé mais après installation de la library j'ai obtenu un refus à la compil

Arduino : 1.8.5 (Windows 10), Carte : "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Enabled, 4M (3M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 256000"

...... duino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266httpUpdate\src" "-IC:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncTCP-master\src" "-IC:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src" "-IC:\Users\dell-fr\Documents\Arduino\libraries\ArduinoJson\src" "-IC:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ArduinoOTA" "-IC:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\Hash\src" "-IC:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266mDNS\src" "-IC:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src" "-IC:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\DNSServer\src" "C:\Users\dell-fr\AppData\Local\Temp\arduino_build_316226\sketch\ESPmanager-example.ino.cpp" -o "C:\Users\dell-fr\AppData\Local\Temp\arduino_build_316226\sketch\ESPmanager-example.ino.cpp.o"
In file included from C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\examples\ESPmanager-example\ESPmanager-example.ino:19:0:

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:54:5: error: 'DynamicJsonBuffer' does not name a type

DynamicJsonBuffer _jsonBuffer;

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h: In constructor 'AsyncJsonResponse::AsyncJsonResponse(bool)':

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:62:17: error: '_jsonBuffer' was not declared in this scope

_root = _jsonBuffer.createArray();

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:64:17: error: '_jsonBuffer' was not declared in this scope

_root = _jsonBuffer.createObject();

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h: In member function 'size_t AsyncJsonResponse::setLength()':

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:70:30: error: 'ArduinoJson::JsonVariant' has no member named 'measureLength'

_contentLength = _root.measureLength();

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h: In member function 'size_t AsyncJsonResponse::getSize()':

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:75:30: error: '_jsonBuffer' was not declared in this scope

size_t getSize() { return _jsonBuffer.size(); }

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h: In member function 'virtual size_t AsyncJsonResponse::_fillBuffer(uint8_t*, size_t)':

C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer\src/AsyncJson.h:79:13: error: 'ArduinoJson::JsonVariant' has no member named 'printTo'

_root.printTo( dest ) ;

^

In file included from C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPmanager.h:50:0,

from C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\examples\ESPmanager-example\ESPmanager-example.ino:27:

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPMAN.h: At global scope:

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPMAN.h:142:17: error: 'DynamicJsonBuffer' does not name a type

DynamicJsonBuffer _jsonBuffer;

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPMAN.h: In constructor 'ESPMAN::JSONpackage::JSONpackage(bool)':

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPMAN.h:151:41: error: '_jsonBuffer' was not declared in this scope

_root = _jsonBuffer.createArray();

^

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPMAN.h:154:41: error: '_jsonBuffer' was not declared in this scope

_root = _jsonBuffer.createObject();

^

In file included from C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\examples\ESPmanager-example\ESPmanager-example.ino:27:0:

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPmanager.h: At global scope:

C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager\src/ESPmanager.h:130:49: error: 'DynamicJsonBuffer' has not been declared

int _parseUpdateJson(uint8_t *& buff, DynamicJsonBuffer & jsonBuffer, JsonObject *& root, const char * path);

^

Utilisation de la bibliothèque ESP8266WiFi version 1.0 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266WiFi
Utilisation de la bibliothèque ESP8266HTTPClient version 1.2 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266HTTPClient
Utilisation de la bibliothèque ESP8266httpUpdate version 1.3 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266httpUpdate
Utilisation de la bibliothèque ESPAsyncTCP-master version 1.2.0 dans le dossier: C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncTCP-master
Utilisation de la bibliothèque ESPAsyncWebServer version 1.1.0 dans le dossier: C:\Users\dell-fr\Documents\Arduino\libraries\ESPAsyncWebServer
Utilisation de la bibliothèque ArduinoJson version 6.7.0-beta dans le dossier: C:\Users\dell-fr\Documents\Arduino\libraries\ArduinoJson
Utilisation de la bibliothèque ArduinoOTA version 1.0 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ArduinoOTA
Utilisation de la bibliothèque Hash version 1.0 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\Hash
Utilisation de la bibliothèque ESP8266mDNS version 1.2 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\ESP8266mDNS
Utilisation de la bibliothèque ESPmanager version 1.0 dans le dossier: C:\Users\dell-fr\Documents\Arduino\libraries\ESPmanager
Utilisation de la bibliothèque DNSServer version 1.1.1 dans le dossier: C:\Users\dell-fr\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0-beta1\libraries\DNSServer
exit status 1
Erreur de compilation pour la carte LOLIN(WEMOS) D1 R2 & mini

Trop abscons pour moi.

Côté du fichier ino je ne comprends pas comment pourvoir y intégrer mon code qui par ailleurs tant que je reste sur une ap et un server web fonctionne parfaitement

CelticLord:
au démarrage il crée un wifi ou tu te connectes et sur la page 192.168.4.1 tu choisis ton routeur ssid et password puis il redémarre ensuite il recoit une ip par dhcp du routeur et tu le configure comme tu veux
Si tu change d endroit il ne trouve plus l ancien routeur donc au démarrage tu peux de nouveau choisir un autre wifi

C'est exactement ce que je voudrais
L'ennui c'est que je ne trouve nulle part un exemple.
Ma pratique : partir d'un truc qui fonctionne, comprendre comment si besoin en modifiant et en regardant ce que cela provoque. Là j'ai rien qui fonctionne au départ.

On a évoqué WiFIManager, pas ESPManager !!
Il fait tout ce que tu,veux faire, il le fait bien et est utilisé dans des objets connectés du commerce pour permettre au client de faire la configuration sur le réseau WiFi perso.

La doc est détaillée, (voir sur le lien du dépot donnée plus haut) , les 9 exemples fournis permettent de voir ou loger son code perso ,code exécuté après que WiFIManager ait fini son travail d'aide à la connection.

Un peu de recherche te donnera des liens en français comme celui-çi par exemple

Pour ton ESPManager au vu des erreurs il y sans doute des prérequis (autres librairies à installer) comme celle gérant le format json souvent cité dans les 'plaintes' du compilateur

al1fch:
On a évoqué WiFIManager, pas ESPManager !!

Un grand, grand merci !