Différences entre les pages « Code minimal des fonctions réseau » et « Fichier:Cr ation d un m mory M mory d coupeuse laser.jpg »

 
(Cr_ation_d_un_m_mory_M_mory_d_coupeuse_laser)
 
Ligne 1 : Ligne 1 :
{{Tuto Details
+
Cr_ation_d_un_m_mory_M_mory_d_coupeuse_laser
|Main_Picture=Code_minimal_des_fonctions_r_seau_WiKi_Reseau.png
 
|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.
 
|Disciplines scientifiques=Arduino, Computing
 
|Difficulty=Technical
 
|Duration=10
 
|Duration-type=hour(s)
 
|Tags=Wi-Fi, HTTP, MQTT, JSON
 
}}
 
{{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''' :
 
 
 
<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''') ;
 
*L''''étape 3''' permet à la carte d'être dans un mode particulier, dit "AP"(Access Point") et se comporter comme une borne Wi-Fi.
 
*Les étapes suivantes correspondent à des besoins différents :
 
**'''étape 4''' : visualiser et/ou modifier des paramètres de notre carte via une interface web ;
 
**'''é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.
 
 
 
 
 
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=Une première véritable utilisation du Wi-Fi sur nos cartes, est d'y définir un mini-serveur web , qui nous permettra d'afficher voire de modifier des données gérées par la carte, sur n'importe quel navigateur.
 
 
 
 
 
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 !
 
}}
 
{{Tuto Step
 
|Step_Title=Interrogation de serveurs web (mode JSON)
 
}}
 
{{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 />
 
}}
 
{{Tuto Status
 
|Complete=Draft
 
}}
 

Version actuelle datée du 24 novembre 2022 à 17:45

Cr_ation_d_un_m_mory_M_mory_d_coupeuse_laser