|
|
(69 révisions intermédiaires par le même utilisateur non affichées) |
Ligne 2 : |
Ligne 2 : |
| |Main_Picture=Code_minimal_des_fonctions_r_seau_WiKi_Reseau.png | | |Main_Picture=Code_minimal_des_fonctions_r_seau_WiKi_Reseau.png |
| |Licences=Attribution (CC-BY) | | |Licences=Attribution (CC-BY) |
− | |Description=Nous allons résumer ici les différentes façons d'utiliser les fonction réseau des cartes compatibles Arduino possédant une puce Wi-Fi (Wemos D1 mini, ESP32, ...). Ces fonctions vont permettre à ces cartes de discuter entre elles, d'accéder à un site web, ou même de se comporter elles-même comme un (mini) site web. | + | |Description=Page obsolète - voir dans la rubrique "Introduction" les liens vers les pages qui la remplacent. |
| |Disciplines scientifiques=Arduino, Computing | | |Disciplines scientifiques=Arduino, Computing |
| |Difficulty=Technical | | |Difficulty=Technical |
Ligne 10 : |
Ligne 10 : |
| }} | | }} |
| {{Introduction | | {{Introduction |
− | |Introduction=Cette expérience regroupe différentes manières de bénéficier des capacités de communication des cartes compatibles Arduino possédant une puce Wi-Fi. On suppose (''Cf. "Expériences ré-requises" ci-après'') que vous avez déjà manipulé une carte Arduino et son environnement de développement. '''Toutes les étapes décrites ici sont en fait indépendantes''' : | + | |Introduction='''Page obsolète'''. Elle a été découpée en quatre épisodes, accessibles ici : |
| | | |
| <br /> | | <br /> |
| | | |
− | *Les deux premières étapes permettent à notre carte de se connecter au Wi-Fi, de façon basique ('''étape 1''') ou un peu plus évoluée, et souple ('''étape 2''') ;
| + | #[https://www.wikidebrouillard.org/wiki/Code_Minimal_R%C3%A9seau_-_(1)_Connecter_le_Wemos_D1_mini_%C3%A0_internet_en_wifi Connecter le Wemos D1 Mini à internet en Wi-Fi]. |
− | *L''''étape 3''' permet à la carte d'être dans un mode particulier, dit "AP"(Access Point") et se comporter comme une borne Wi-Fi.
| + | #[https://www.wikidebrouillard.org/wiki/Code_Minimal_R%C3%A9seau_-_(2)_H%C3%A9berger_un_site_web_sur_mon_Wemos_D1_mini Héberger un site web sur mon Wemos D1 Mini]. |
− | *Les étapes suivantes correspondent à des besoins différents :
| + | #[https://www.wikidebrouillard.org/wiki/Code_Minimal_R%C3%A9seau_-_(3)_Mon_D1_Mini_r%C3%A9cup%C3%A8re_des_donn%C3%A9es_sur_Internet_(Json) Mon Wemos D1 Mini récupère des données sur Internet (format Json)]. |
− | **'''étape 4''' : visualiser et/ou modifier des paramètres de notre carte via une interface web ;
| + | #[https://www.wikidebrouillard.org/wiki/Code_Minimal_R%C3%A9seau_-_(4)_Mes_Wemos_D1_Mini_discutent_sur_Internet_avec_MQTT Mes Wemos D1 Mini discutent sur Internet (protocole MQTT)] |
− | **'''étape 5''' : permettre à notre carte d'accéder à des données d'un site externe, utilisant le format standardisé '''JSON''' <sup>(1)</sup>
| |
− | **'''étape 6''' : permettre à notre carte d'envoyer et de recevoir des messages courts, via le protocole standardisé '''MQTT''' <sup>(1)</sup>
| |
| | | |
− | Dans la même philosophie que les expériences "[https://www.wikidebrouillard.org/wiki/Code_minimal_des_capteurs_pour_Arduino Code minimal des capteurs pour Arduino]" et "[https://www.wikidebrouillard.org/wiki/Code_minimal_des_actionneurs_pour_Arduino Code minimal des actionneurs pour Arduino]", <u>nous fournirons ici uniquement le code relatif à nos besoins de connexion</u>, sans mettre au point une quelconque application. Donc, ici, pas besoin de connecter une led ou un capteur, donc <u>pas de schéma de montage</u> : vous branchez simplement votre carte en USB sur votre ordinateur, et les résultats seront visibles en mode texte dans le moniteur série de l'environnement de développement Arduino.
| |
| | | |
− | | + | <u>Il est nécessaire de commencer par l'épisode 1</u>, par contre les épisodes suivants peuvent être consultés dans n'importe quel ordre. |
− | Il existe bien sûr déjà un tas de tutoriels avec des exemples similaires, sans compter bien sûr les exemples fournis avec les bibliothèques que l'on va utiliser <sup>(2)</sup>. La modeste contribution de de cette page est de tenter de regrouper les cas de figures les plus importants. S'il en manque, n'hésitez pas à mettre un commentaire, voire à ajouter une étape !
| |
− | | |
− | | |
− | '''(1)''' ''Pas d'inquiétude sur les "JSON "et autre "MQTT", on explique tout dans les étapes correspondantes''
| |
− | | |
− | '''(2)''' ''On donnera d'ailleurs les liens vers les bibliothèques et leurs exemples à chaque étape.''
| |
− | }}
| |
− | {{Materials
| |
− | |ItemList={{ItemList
| |
− | |Item=D1 mini
| |
− | }}{{ItemList
| |
− | |Item=Câble USB - micro-USB
| |
− | }}{{ItemList
| |
− | |Item=Logiciel Arduino
| |
− | }}
| |
− | |Prerequisites={{Prerequisites
| |
− | |Prerequisites=Installer l'environnement Arduino sur votre système
| |
− | }}{{Prerequisites
| |
− | |Prerequisites=Premiers pas avec Arduino
| |
− | }}{{Prerequisites
| |
− | |Prerequisites=Utiliser le D1 mini avec Arduino
| |
− | }}
| |
− | }}
| |
− | {{Tuto Step
| |
− | |Step_Title=Connexion Wi-Fi en environnement stable
| |
− | |Step_Content=Cette première étape permet à un Wemos D1 mini (ou autre carte compatible Arduino avec puce Wi-Fi) de se connecter au Wi-Fi dans un environnement connu, et qui ne change pas ; C'est-à-dire que l'on à accès à une borne Wi-Fi, on connait son mot de passe - aka "clé de sécurité réseau", et a priori la carte va rester dans cet environnement.
| |
− | | |
− | | |
− | Ces bibliothèques sont pré-chargées dans l'environnement Arduino, il n'est pas nécessaire d'aller les chercher dans le gestionnaire de bibliothèques.
| |
− | | |
− | {| class="wikitable" cellspacing="0" border="0"
| |
− | | height="17" bgcolor="#999999" align="left" |
| |
− | | valign="middle" bgcolor="#999999" align="center" |
| |
− | | bgcolor="#999999" align="center" |Connexion Wi-Fi de base
| |
− | |-
| |
− | | rowspan="2" valign="middle" height="49" bgcolor="#999999" align="center" |Avant le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Importation de la bibliothèque
| |
− | | valign="middle" align="left" |#include <ESP8266WiFi.h> // Pour le Wemos D1 Mini, ou ...
| |
− | | |
− | <nowiki>#</nowiki>include <WiFi.h> // ... Pour l'ESP32
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Création de l’objet
| |
− | | valign="middle" align="left" |
| |
− | |-
| |
− | | rowspan="3" valign="middle" height="17" bgcolor="#999999" align="center" |Dans le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Démarrage de la connexion
| |
− | | valign="middle" align="left" |WiFi.begin(SSID, SecKey) ; // Où SSID est le nom du point d'accès Wi-Fi, et SecKey son mot de passe
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Test de la connexion
| |
− | | valign="middle" align="left" |if (WiFi.Status() == WL_CONNECTED) { (...) }
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Récupération de l'adresse IP
| |
− | |WiFi.localIP() ;
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Dans le Loop
| |
− | | valign="middle" bgcolor="#999999" align="center" |Utilisation
| |
− | |Le test de la connexion, et la récupération de l'adresse IP peuvent aussi être utilisés dans le loop().
| |
− | |}
| |
− | | |
− | | |
− | Pour connaître toutes les autres possibilités de ces bibliothèques, voir leurs références, respectivement [https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi ici] (D1 Mini) et [https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi ici] (ESP32).
| |
− | | |
− | <br /><syntaxhighlight lang="arduino" line="1">
| |
− | /* =========================================================================================================
| |
− | *
| |
− | * CODE MINIMAL RESEAU - ETAPE 1 : connexion basique au Wi-Fi
| |
− | *
| |
− | * ---------------------------------------------------------------------------------------------------------
| |
− | * Les petits Débrouillards - décembre 2022 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
| |
− | * ========================================================================================================= */
| |
− | | |
− | // Bibliothèques WiFi : UNE SEULE EST NECESSAIRE, choisir celle correspondant à votre matériel.
| |
− | // ATTENTION AUX MAJUSCULES & MINUSCULES ! Sinon d'autres bibliothèques, plus ou moins valides, seraient utilisées.
| |
− | | |
− | #include <ESP8266WiFi.h> // A utiliser pour le D1 Mini
| |
− | //#include <WiFi.h> // A utiliser pour l'ESP32
| |
− | | |
− | // Définition du point d'accès Wi-Fi et de son mot de passe ("clé de sécurité")
| |
− | // A REMPLACER PAR LES VERITABLES VALEURS CORRESPONDANT A VOTRE EMPLACEMENT
| |
− |
| |
− | const char* mySSID = "MA_BOX_INTERNET";
| |
− | const char* mySecKey = "MA_CLE_DE_SECURITE";
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------
| |
− | * SETUP : Initialisation
| |
− | * -------------------------------------------------------------------------------------------------------- */
| |
− | void setup() {
| |
− | | |
− | // Initialisation de la liaison série, affichage 1er message
| |
− | | |
− | Serial.begin(115200);
| |
− | delay(100) ;
| |
− | Serial.println();
| |
− | Serial.println("----------------------------------") ;
| |
− | Serial.println("Exemple de connexion Wi-Fi basique") ;
| |
− | Serial.println("----------------------------------") ;
| |
− | | |
− | // Démarrage de la tentative de connexion, avec le nom du point d'accès Wi-Fi et son mot de passe
| |
− | | |
− | WiFi.begin(mySSID, mySecKey) ;
| |
− | | |
− | // Attente de la connexion pendant 10 secondes (20 x 500 ms)
| |
− | | |
− | Serial.print("Connexion à "); Serial.print(mySSID) ; Serial.print(" ") ;
| |
− | int tryNumber = 1 ;
| |
− | while (WiFi.status() != WL_CONNECTED)
| |
− | {
| |
− | delay(500);
| |
− | Serial.print(".");
| |
− | if (++tryNumber > 20) {
| |
− | Serial.println() ; Serial.println("Pas de connexion, abandon") ;
| |
− | return ;
| |
− | }
| |
− | }
| |
− | | |
− | // La connexion a réussi ! On affiche l'adresse IP obtenue.
| |
− |
| |
− | Serial.println(); Serial.print("Connecté ! Adresse IP : ");
| |
− | Serial.println(WiFi.localIP());
| |
− |
| |
− | }
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------------
| |
− | * LOOP : fonction appelée régulièrement par le système
| |
− | * ------------------------------------------------------------------------------------------------------------- */
| |
− | void loop() {
| |
− | /* On ne fait rien de particulier sur cet exemple */
| |
− | }
| |
− | | |
− | | |
− | | |
− | </syntaxhighlight><br />
| |
− | }}
| |
− | {{Tuto Step
| |
− | |Step_Title=Oui, mais si je dois changer de borne Wi-Fi ?
| |
− | |Step_Content=Dans l'étape précédente on supposait que le Wi-Fi était permanent (cas où les cartes ne quittent pas notre labo, par exemple). Mais si on souhaite faire voyager nos cartes (démos dans des écoles, etc ...), on a trois possibilités :
| |
− | | |
− | *On vient avec son environnement de développement Arduino, on met à jour le code Arduino avec les nouvelles informations Wi-Fi, et on téléverse le code sur toutes nos cartes ... un peu laborieux, n'est-il pas ?
| |
− | *ou bien, on dispose en permanence d'un téléphone mobile avec forfait données (4G ou +), et on utilise systématiquement celui-ci en mode "Point d'accès mobile". C'est donc ce téléphone qui sera vu en permanence comme le point d'accès Wi-Fi préféré de votre carte (D1 mini ou ESP32), quelque soit l'endroit où vous vous trouvez. Pas toujours possible ...
| |
− | *et sinon, on utilise la bibliothèque "WiFiManager", qui nous simplifie grandement la tâche !
| |
− | | |
− | En effet, cette bibliothèque permet d'enregistrer de façon pérenne (même si on débranche la carte) le dernier Point d'Accès Wi-Fi sur lequel la carte a réussi à se connecter. La bibliothèque va d'abord chercher à se connecter sur ce Point d'Accès "connu". Et si ça ne fonctionne pas (on a changé de lieu, par exemple), alors elle va se positionner elle-même en mode "Point d'Accès", et va proposer sur l'adresse 192.168.4.1 une interface web permettant d'afficher les Points d'Accès Wi-Fi environnants, et d'en sélectionner un. Le nouveau Point d'Accès choisi sera sauvegardé pour les fois suivantes.
| |
− | | |
− | | |
− | ''Pour plus de détails, et présentation de l'interface utilisateur proposée par la bibliothèque, voir le chapitre "Explications" en bas de cette page.''
| |
− | | |
− | <br>
| |
− | La bibliothèque doit être rajoutée à l'environnement Arduino dans le gestionnaire de Bibliothèques (voir [https://www.wikidebrouillard.org/wiki/Importer_des_biblioth%C3%A8ques_dans_l%27interface_Arduino ici] pour le mode d'emploi) :
| |
− | | |
− | <br />{{#annotatedImageLight:Fichier:Code minimal des fonctions reseau Image.png|0=756px|hash=|jsondata=|mediaClass=Image|type=frameless|alt=Image de la Bibliothèque WiFiManager dans le Gestionnaire de Bibliothèques Arduino|align=left|src=https://www.wikidebrouillard.org/images/5/53/Code_minimal_des_fonctions_reseau_Image.png|href=./Fichier:Code minimal des fonctions reseau Image.png|resource=./Fichier:Code minimal des fonctions reseau Image.png|caption=Bibliothèque WiFiManager|size=756px}}<br>
| |
− | <br />
| |
− | {| class="wikitable" cellspacing="0" border="0"
| |
− | | height="17" bgcolor="#999999" align="left" |
| |
− | | valign="middle" bgcolor="#999999" align="center" |
| |
− | | bgcolor="#999999" align="center" |Wifimanager
| |
− | |-
| |
− | | rowspan="2" valign="middle" height="49" bgcolor="#999999" align="center" |Avant le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Importation de la bibliothèque
| |
− | | valign="middle" align="left" |#include <WiFiManager.h>
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Création de l’objet
| |
− | | valign="middle" align="left" |WiFiManager myWiFiManager;
| |
− | |-
| |
− | | rowspan="3" valign="middle" height="17" bgcolor="#999999" align="center" |Dans le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Déclaration du mode bloquant
| |
− | | valign="middle" align="left" |myWiFiManager.setConfigPortalBlocking(true); // ... ou rien (mode par défaut)
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Déclaration du mode non bloquant
| |
− | |myWiFiManager.setConfigPortalBlocking(false);
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Tentative de connexion à un PA Wi-Fi
| |
− | |if (myWiFiManager.autoConnect(Nom_AP, MotDePasse_AP)) { (... connexion OK !) }
| |
− | |-
| |
− | | valign="middle" height="41" bgcolor="#999999" align="center" |Dans le Loop
| |
− | | valign="middle" bgcolor="#999999" align="center" |Activation régulière pour le mode non bloquant
| |
− | | valign="middle" align="left" |myWiFiManager.process() ; // Obligatoire en mode non bloquant
| |
− | |}
| |
− | | |
− | Pour connaître toutes les autres possibilités de cette bibliothèque, voir sa référence, [https://jp112sdl.github.io/WiFiManager/ ici].
| |
− | | |
− | | |
− | | |
− | '''Code minimal : mode bloquant (par défaut)'''
| |
− | <br /><syntaxhighlight lang="arduino" line="1">
| |
− | /* =========================================================================================================
| |
− | *
| |
− | * CODE MINIMAL RESEAU - ETAPE 2 : Connexion à un point d'accès choisi par l'utilisateur
| |
− | *
| |
− | * CAS A : MODE BLOQUANT - On attend tant que l'utilisateur n'a pas choisi son Point d'Accès Wi-Fi
| |
− | *
| |
− | * ---------------------------------------------------------------------------------------------------------
| |
− | * Les petits Débrouillards - décembre 2022 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
| |
− | * ========================================================================================================= */
| |
− | | |
− | // Bibliothèque WiFiManager. Un seule bibibliothèque suffit ici, quelque soit la carte (ESP32 ou Wemos D1 Mini)
| |
− | | |
− | #include <WiFiManager.h> // Gestion de la connexion Wi-Fi (recherche de points d'accès)
| |
− | WiFiManager myWiFiManager; // Création de mon instance de WiFiManager.
| |
− | | |
− | // Définition de la carte lorsqu'elle se positionne en mode "Point d'Accès".
| |
− |
| |
− | const char* mySSID = "AP_PetitDeb" ; // Nom du point d'accès
| |
− | const char* mySecKey = "PSWD1234" ; // Mot de passe, 8 caractères au minimum
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------
| |
− | * SETUP : Initialisation
| |
− | * -------------------------------------------------------------------------------------------------------- */
| |
− | void setup() {
| |
− | | |
− | // Initialisation de la liaison série, affichage 1er message
| |
− | | |
− | Serial.begin(115200);
| |
− | delay(100) ;
| |
− | Serial.println();
| |
− | Serial.println("----------------------------------") ;
| |
− | Serial.println("Exemple de connexion Wi-Fi évoluée") ;
| |
− | Serial.println("----------------------------------") ;
| |
− | | |
− | // Tentative de connexion au Wi-Fi. Si la carte n'a pas réussi se connecter au dernier Point d'Accès connu,
| |
− | // alors elle va se positionner en mode Point d'Accès, demandera sur l'adresse 192.168.4.1 quel nouveau
| |
− | // Point d'Accès choisir. Par défaut, on restera bloqué tant que l'utilisateur n'aura pas fait de choix.
| |
− |
| |
− | Serial.println("Connexion au Wi-Fi ...");
| |
− | if (myWiFiManager.autoConnect(mySSID, mySecKey)) {
| |
− |
| |
− | // Wi-Fi en mode standard ok --> On affiche l'adresse IP obtenue.
| |
− | | |
− | Serial.println(); Serial.print("Connecté ! Adresse IP : ");
| |
− | Serial.println(WiFi.localIP());
| |
− |
| |
− | }
| |
− | else {
| |
− | Serial.println("Connexion Wi-Fi KO :-(");
| |
− | }
| |
− |
| |
− | }
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------------
| |
− | * LOOP : fonction appelée régulièrement par le système
| |
− | * ------------------------------------------------------------------------------------------------------------- */
| |
− | void loop() {
| |
− | /* On ne fait rien de particulier sur cet exemple */
| |
− | }
| |
− | </syntaxhighlight>
| |
− | | |
− | | |
− | | |
− | '''Code minimal : mode non bloquant'''<br /><syntaxhighlight lang="arduino" line="1">
| |
− | /* =========================================================================================================
| |
− | *
| |
− | * CODE MINIMAL RESEAU - ETAPE 2 : Connexion à un point d'accès choisi par l'utilisateur
| |
− | *
| |
− | * CAS B : MODE NON BLOQUANT - On peut faire autre chose en attendant que l'utilisateur ait choisi
| |
− | * son Point d'Accès Wi-Fi
| |
− | *
| |
− | * ---------------------------------------------------------------------------------------------------------
| |
− | * Les petits Débrouillards - décembre 2022 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
| |
− | * ========================================================================================================= */
| |
− | | |
− | // Bibliothèque WiFiManager. Un seule bibibliothèque suffit ici, quelque soit la carte (ESP32 ou Wemos D1 Mini)
| |
− | | |
− | #include <WiFiManager.h> // Gestion de la connexion Wi-Fi (recherche de points d'accès)
| |
− | WiFiManager myWiFiManager; // Création de mon instance de WiFiManager.
| |
− | | |
− | // Définition de la carte lorsqu'elle se positionne en mode "Point d'Accès".
| |
− |
| |
− | const char* mySSID = "AP_PetitDeb" ; // Nom du point d'accès
| |
− | const char* mySecKey = "PSWD1234" ; // Mot de passe, 8 caractères au minimum
| |
− | | |
− | // Pour les besoins de l'exemple (traces)
| |
− | | |
− | bool IAmNotConnected = true ;
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------
| |
− | * SETUP : Initialisation
| |
− | * -------------------------------------------------------------------------------------------------------- */
| |
− | void setup() {
| |
− | | |
− | // Initialisation de la liaison série, affichage 1er message
| |
− | | |
− | Serial.begin(115200);
| |
− | delay(100) ;
| |
− | Serial.println();
| |
− | Serial.println("----------------------------------") ;
| |
− | Serial.println("Exemple de connexion Wi-Fi évoluée") ;
| |
− | Serial.println("----------------------------------") ;
| |
− | | |
− | // Déclaration du mode "non bloquant".
| |
− | // Bonus : suppression des traces fournies par le WiFiManager (il est très bavard)
| |
− |
| |
− | myWiFiManager.setConfigPortalBlocking(false);
| |
− | myWiFiManager.setDebugOutput(false);
| |
− | | |
− | // Tentative de connexion au Wi-Fi. Si la carte n'a pas réussi se connecter au dernier Point d'Accès connu,
| |
− | // alors elle va se positionner en mode Point d'Accès, demandera sur l'adresse 192.168.4.1 quel nouveau
| |
− | // Point d'Accès choisir. On ne reste pas bloqué, la suite du setup() va se dérouler, et le WiFiManager
| |
− | // traitera les demandes ultérieurement, dans la fonction loop().
| |
− |
| |
− | Serial.println("Connexion au Wi-Fi ...");
| |
− | if (myWiFiManager.autoConnect(mySSID, mySecKey)) {
| |
− |
| |
− | // Wi-Fi en mode standard ok --> On affiche l'adresse IP obtenue.
| |
− | | |
− | Serial.println(); Serial.print("Connecté ! Adresse IP : ");
| |
− | Serial.println(WiFi.localIP());
| |
− |
| |
− | }
| |
− | else {
| |
− | | |
− | // Wi-Fi standard KO, on est passé en mode AP, qui sera traité dans le loop().
| |
− |
| |
− | Serial.println("Pas de point Wi-Fi connu, passage en mode AP (identifiant \"" + String(mySSID) + "\")");
| |
− | }
| |
− |
| |
− | }
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------------
| |
− | * LOOP : fonction appelée régulièrement par le système
| |
− | * ------------------------------------------------------------------------------------------------------------- */
| |
− | void loop() {
| |
− |
| |
− | // Obligatoire en mode non bloquant, pour que le WiFiManager continue sa tâche.
| |
− | | |
− | myWiFiManager.process() ;
| |
− | | |
− | // Test pour savoir si on est enfin connecté - on ne l'affiche qu'une fois pour limiter les traces
| |
− | | |
− | if (IAmNotConnected) {
| |
− | if (WiFi.status() == WL_CONNECTED) {
| |
− | Serial.print("Connecté au point d'accès " + String(WiFi.SSID()) + ", Adresse IP : ") ;
| |
− | Serial.println(WiFi.localIP());
| |
− | IAmNotConnected = false ;
| |
− | }
| |
− | }
| |
− |
| |
− | }
| |
− | </syntaxhighlight><br />
| |
− | }}
| |
− | {{Tuto Step
| |
− | |Step_Title=Et si je veux rester en mode AP (Access Point) Wi-Fi ?
| |
− | |Step_Content=Il existe des cas particuliers où une application n'a en fait pas besoin du Wi-Fi pour aller envoyer ou recevoir des données d'Internet, mais souhaite être juste être considérée comme un Point d'Accès Wi-Fi. Ce mode est suffisant si l'on souhaite commander notre carte <sup>(*)</sup> depuis un système local
| |
− | | |
− | ''(*) Par exemple en mode web, depuis un mobile ... petit "spoiler" de l'étape 4'' :-)
| |
− | | |
− | Pour utiliser le mode "Point d'Accès", on garde les librairies de base, vues à l'étape 1, en utilisant d'autres fonctions. <br />
| |
− | {| class="wikitable" cellspacing="0" border="0"
| |
− | | height="17" bgcolor="#999999" align="left" |
| |
− | | valign="middle" bgcolor="#999999" align="center" |
| |
− | | bgcolor="#999999" align="center" |Connexion Wi-Fi de base
| |
− | |-
| |
− | | rowspan="2" valign="middle" height="49" bgcolor="#999999" align="center" |Avant le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Importation de la bibliothèque
| |
− | | valign="middle" align="left" |#include <ESP8266WiFi.h> // Pour le Wemos D1 Mini, ou ...
| |
− | <nowiki>#</nowiki>include <WiFi.h> // ... Pour l'ESP32
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Création de l’objet
| |
− | | valign="middle" align="left" |
| |
− | |-
| |
− | | rowspan="3" valign="middle" height="17" bgcolor="#999999" align="center" |Dans le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Lancement du mode AP - avec mot de passe
| |
− | | valign="middle" align="left" |if (WiFi.softAP(SSID, SecKey)) { (... succès ... } ; // Où SSID est le nom du point d'accès Wi-Fi, et SecKey son mot de passe
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Lancement du mode AP - sans mot de passe<br />
| |
− | | valign="middle" align="left" |if (WiFi.softAP(SSID)) { (... succès ... } ; // Où SSID est le nom du point d'accès Wi-Fi
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Récupération de l'adresse IP de base
| |
− | |WiFi.softAPIP() ;
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Dans le Loop
| |
− | | valign="middle" bgcolor="#999999" align="center" |Utilisation
| |
− | |La récupération de l'adresse IP peut aussi être utilisée dans le loop().
| |
− | |}
| |
− | | |
− | | |
− | Pour connaître toutes les autres possibilités de ces bibliothèques, voir leurs références, respectivement [https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi ici] (D1 Mini) et [https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi ici] (ESP32).
| |
− | <br /><syntaxhighlight lang="arduino" line="1">
| |
− | /* =========================================================================================================
| |
− | *
| |
− | * CODE MINIMAL RESEAU - ETAPE 3 : Configuration en mode Point d'Accès
| |
− | *
| |
− | * ---------------------------------------------------------------------------------------------------------
| |
− | * Les petits Débrouillards - décembre 2022 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
| |
− | * ========================================================================================================= */
| |
− | | |
− | // Bibliothèques WiFi : UNE SEULE EST NECESSAIRE, choisir celle correspondant à votre matériel.
| |
− | // ATTENTION AUX MAJUSCULES & MINUSCULES ! Sinon d'autres bibliothèques, plus ou moins valides, seraient utilisées.
| |
− | | |
− | #include <ESP8266WiFi.h> // A utiliser pour le D1 Mini
| |
− | //#include <WiFi.h> // A utiliser pour l'ESP32
| |
− | | |
− | const char* mySSID = "AP_PetitDeb" ;
| |
− | const char* mySecKey = "PSWD1234" ;
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------
| |
− | * SETUP : Initialisation
| |
− | * -------------------------------------------------------------------------------------------------------- */
| |
− | void setup() {
| |
− | | |
− | // Initialisation de la liaison série, affichage 1er message
| |
− | | |
− | Serial.begin(115200);
| |
− | delay(100) ;
| |
− | Serial.println();
| |
− | Serial.println("-----------------------------") ;
| |
− | Serial.println("Exemple en mode Point d'Accès") ;
| |
− | Serial.println("-----------------------------") ;
| |
− | | |
− | // Déclaration du mode "Point d'Accès"
| |
− | | |
− | Serial.println("Déclaration Mode AP, SSID \"" + String(mySSID) + "\"") ;
| |
− | | |
− | if (WiFi.softAP(mySSID,mySecKey)) {
| |
− | | |
− | // Voilà, nous somme en mode "Point d'Accès", notre carte sera visible des systèmes Wi-Fi environnants,
| |
− | // au même titre que les autres box Wi-Fi du voisinage. Par contre, ça s'arrête là, et si une fois
| |
− | // connecté sur ce Point d'Accès "AP_PetitDeb" on cherche à joindre notre carte sur l'adresse IP obtenue
| |
− | // ci-dessous par WiFi.softAPIP(), on aura droit à un beau "ERR_CONNECTION_REFUSED". Normal, on n'a pas
| |
− | // précisé dans l'application ce qu'il faut faire : voir exemple suivant Code_Minimal_Etape4.
| |
− |
| |
− | Serial.print("Mode AP OK, IP Address : ") ;
| |
− | Serial.println(WiFi.softAPIP()) ;
| |
− | }
| |
− | else {
| |
− | Serial.println("Mode AP KO ... :-(") ;
| |
− | }
| |
− |
| |
− | }
| |
− | | |
− | /* --------------------------------------------------------------------------------------------------------------
| |
− | * LOOP : fonction appelée régulièrement par le système
| |
− | * ------------------------------------------------------------------------------------------------------------- */
| |
− | void loop() {
| |
− |
| |
− | // Rien de spécial dans cet exemple
| |
− |
| |
− | }
| |
− | </syntaxhighlight>
| |
− | }}
| |
− | {{Tuto Step
| |
− | |Step_Title=Et maintenant, on fait quoi avec le Wi-Fi ? (tiens, pourquoi pas un petit serveur web ?)
| |
− | |Step_Content=Restons sur le mode "Access Point" (pas frocément, tiens ,...)x
| |
− | | |
− | ... Site web pour allumer une led (à détailler)
| |
− | | |
− | | |
− | On peut trouver quelques exemples d'applications de ce type, réalisée par des Petits Débrouillards, en particulier le [https://github.com/julienrat/petitbot Petit Bot], petit robot commandable, ou encore [https://www.wikidebrouillard.org/wiki/Commander_un_D1_mini_avec_une_interface_web Commander un D1 mini avec une interface web], permettant d'animer des leds, de gérer un moteur, et de récupérer des données du D1 mini sur une interface web.
| |
− | | |
− | | |
− | '''METTRE LIEN(S) vers description et exemples'''
| |
− | {| class="wikitable" cellspacing="0" border="0"
| |
− | | height="17" bgcolor="#999999" align="left" |
| |
− | | valign="middle" bgcolor="#999999" align="center" |
| |
− | | bgcolor="#999999" align="center" |Site web
| |
− | |-
| |
− | | rowspan="2" valign="middle" height="49" bgcolor="#999999" align="center" |Avant le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Importation de la bibliothèque
| |
− | | valign="middle" align="left" |
| |
− | |-
| |
− | | valign="middle" bgcolor="#999999" align="center" |Création de l’objet
| |
− | | valign="middle" align="left" |
| |
− | |-
| |
− | | valign="middle" height="17" bgcolor="#999999" align="center" |Dans le Setup
| |
− | | valign="middle" bgcolor="#999999" align="center" |Démarrage de l’objet
| |
− | | valign="middle" align="left" |
| |
− | |-
| |
− | | valign="middle" height="41" bgcolor="#999999" align="center" |Dans le Loop
| |
− | | valign="middle" bgcolor="#999999" align="center" |Utilisation
| |
− | | valign="middle" align="left" |
| |
− | |}<br /><syntaxhighlight lang="arduino" line="1">
| |
− | ////////////////////////
| |
− | // *Code Minimal* //
| |
− | // Wi-Fi de base //
| |
− | ////////////////////////
| |
− | /*Les programmes "Code Minimal" des petits débrouillards sont conçu pour
| |
− | permettre la prise en main rapide d'un composant électronique.
| |
− | A retrouver sur https://www.wikidebrouillard.org
| |
− | | |
− | (...)
| |
− |
| |
− | ___
| |
− | / ___ \
| |
− | |_| | |
| |
− | /_/
| |
− | _ ___ _
| |
− | |_| |___|_| |_
| |
− | ___|_ _|
| |
− | |___| |_|
| |
− | | |
− | Les petits Débrouillards - décembre 2020 - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
| |
− | | |
− | */
| |
− | | |
− | // Déclaration des variables constantes
| |
− | (...)
| |
− | | |
− | // Boucle d'initialisation
| |
− | void setup() {
| |
− | | |
− | (...)
| |
− | | |
− | }
| |
− | | |
− | //Boucle principale
| |
− | void loop() {
| |
− | | |
− | (...)
| |
− | | |
− | }
| |
− | </syntaxhighlight><br />
| |
− | | |
− | Une application plus complète, permettant d'actionner plusieurs leds et un moteur, et de récupérer des données d'un capteur, est disponible [https://www.wikidebrouillard.org/wiki/Commander_un_D1_mini_avec_une_interface_web ici].
| |
− | | |
− | | |
− | L'utilisation de notre carte en mode n'est qu'un exemple de ce qu'il est possible de faire, il existe plein d'autres possibilités, détaillées dans les étapes suivantes !
| |
| }} | | }} |
| + | {{Materials}} |
| {{Tuto Step | | {{Tuto Step |
− | |Step_Title=Interrogation de serveurs web (mode JSON) | + | |Step_Title=Ben non, y en n'a plus ... |
− | }}
| + | |Step_Content=... puisque la page est obsolète ... (mais le Wiki impose au moins une étape) |
− | {{Tuto Step
| |
− | |Step_Title=Diffusion d'information (mode MQTT)
| |
− | }}
| |
− | {{Tuto Step
| |
− | |Step_Title=Utilisation de plusieurs cartes ...(DRAFT)
| |
− | |Step_Content=Identifiant unique (D1 min vs ESP ?) proposer code utilisant l'id unique de la pucey | |
− | | |
− | | |
− | d'ailleurs si même une seule carte à un endroit, id unique utile (MQTT par exemple). Introduire cette notion plus haut ?
| |
− | }}
| |
− | {{Notes
| |
− | |Explanations='''<u>Compléments d'information pour l'étape 2 "''Oui, mais si mon Wi-Fi change ?''"</u>'''
| |
− | | |
− | | |
− | Grâce à la '''bibliothèque WiFiManager''', dans le cas où la carte n'a pas pu se connecter au dernier Wi-Fi connu, elle s'est elle-même positionnée comme un Point d'Accès Wi-Fi. La sélection de votre box Wi-Fi préférée se fait alors en trois étapes :
| |
− | | |
− | <br />
| |
− | | |
− | #Avec un téléphone ou ordinateur, connectez-vous au point d'accès "AP_PetitDeb" et tapez le mot de passe associé (Cf. le code décrit à l'étape 2). Il y aura probablement un message indiquant qu'Internet n'est pas disponible, c'est normal, ne pas en tenir compte ;
| |
− | #Sur votre navigateur préféré, tapez "192.168.4.1", ce qui fera apparaître l'interface web générée par la bibliothèque WiFiManager. Cliquez sur "Configure WiFi", vous arrivez sur le choix du point d'accès.
| |
− | #Choisissez alors votre point d'accès Wi-Fi préféré, son nom sera reporté dans la case "SSID", complétez avec le mot de passe dans la case "Password", et cliquez sur Save
| |
− | | |
− | | |
− | ... Lors des prochaines réinitialisation, ou ré-allumage de la carte, celle-ci cherchera d'abord à se connecter à ce nouveau Point d'Accès Wi-Fi.
| |
− | | |
− | <br />{{#annotatedImageLight:Fichier:Code minimal des fonctions r seau WiKi WiFiManager S.png|0=800px|hash=|jsondata=|mediaClass=Image|type=frameless|alt=Image permettant de comprendre l'utilisation de la bibliothèque WiFiManager|align=center|src=https://www.wikidebrouillard.org/images/f/f8/Code_minimal_des_fonctions_r_seau_WiKi_WiFiManager_S.png|href=./Fichier:Code minimal des fonctions r seau WiKi WiFiManager S.png|resource=./Fichier:Code minimal des fonctions r seau WiKi WiFiManager S.png|caption=Utilisation du WiFiManager|size=800px}}<br />
| |
| }} | | }} |
| + | {{Notes}} |
| {{Tuto Status | | {{Tuto Status |
| |Complete=Draft | | |Complete=Draft |
| }} | | }} |