« Esp8266 wifi » : différence entre les versions
Autres actions
| Ligne 142 : | Ligne 142 : | ||
= Programmation événementielle = | = Programmation événementielle = | ||
Il est possible de définir une [https://fr.wikipedia.org/wiki/Fonction_de_rappel fonction de callback] qui sera appelée lorsqu'un événements arrive. Les événements possibles sont les suivants : | Il est possible de définir une [https://fr.wikipedia.org/wiki/Fonction_de_rappel fonction de callback] qui sera appelée lorsqu'un événements arrive. Les événements possibles sont les suivants : | ||
<div align="center"> | |||
{|class="wikitable" width="85%" | |||
! Événement !! Description !! Mode | |||
|-valign=top | |||
||AP | |||
||WIFI_EVENT_MAX | |||
||Nombre maximum de clients atteint | |||
|-valign=top | |||
||AP / client | |||
||WIFI_EVENT_MODE_CHANGE | |||
||Changement de mode de connexion | |||
|-valign=top | |||
||AP | |||
||WIFI_EVENT_SOFTAPMODE_PROBEREQRECVED | |||
||Réception d'une requête ''probe'' (découverte des clients WiFi) | |||
|-valign=top | |||
||AP | |||
||WIFI_EVENT_SOFTAPMODE_STACONNECTED | |||
||Connexion d'un client | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_SOFTAPMODE_STADISCONNECTED | |||
||Déconnexion d'un client | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_STAMODE_AUTHMODE_CHANGE | |||
||Changement du mode d'authentification | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_STAMODE_CONNECTED | |||
||Connexion au réseau réussie | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_STAMODE_DHCP_TIMEOUT | |||
||Configuration DHCP non reçue | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_STAMODE_GOT_IP | |||
||Configuration OSI 3 reçue | |||
|-valign=top | |||
||client | |||
||WIFI_EVENT_STAMODE_DISCONNECTED | |||
||Déconnexion du réseau | |||
|} | |||
</div> | |||
Pour activer la gestion événementiel, après la ligne : | |||
<source lang="c"> | |||
WiFi.disconnect(true); | |||
</source> | |||
ajoutez : | |||
<source lang="c"> | |||
WiFi.onEvent(handleEvent); | |||
</source> | |||
Il ne nous reste plus qu'à ajouter la fonction suivante : | |||
<source lang="c"> | |||
void handleEvent(WiFiEvent_t event){ | |||
Serial.printf("WiFi event %d received\n", event); | |||
} | |||
</source> | |||
Seul le contenu de la fonction va changer en fonction du rôle (client ou AP). | |||
==AP== | |||
Voici un le contenu de la fonction handleEvent: | |||
<source lang="c"> | |||
void handleEvent(WiFiEvent_t event){ | |||
Serial.printf("WiFi event %d received\n", event); | |||
if(event == WIFI_EVENT_SOFTAPMODE_PROBEREQRECVED){ | |||
Serial.println("Requete probe recue !"); | |||
}else if(event == WIFI_EVENT_SOFTAPMODE_STACONNECTED){ | |||
Serial.println("Client connecte !"); | |||
}else if(event == WIFI_EVENT_SOFTAPMODE_STADISCONNECTED){ | |||
Serial.println("Client deconnecte !"); | |||
} | |||
} | |||
</source> | |||
Le résultat sera le suivant : | |||
<pre> | |||
Demarrage du point d'acces... | |||
Adresse MAC: 2E:3A:E8:17:2C:A7 | |||
Adresse IP: 192.168.10.1 | |||
WiFi event 7 received | |||
Requete probe recue ! | |||
WiFi event 5 received | |||
Client connecte ! | |||
WiFi event 6 received | |||
Client deconnecte ! | |||
</pre> | |||
Version du 17 janvier 2018 à 12:39
Introduction
Introduction
|
|
Soyez sûr de comprendre la section sur comment écrire un sketch avant de poursuivre. Le code ci-dessous fait référence à des parties bien spécifiques, détaillées et expliquées dans la section suscitée. |
La puce ESP8266 peut se configurer en point d'accès, en client WiFi ou les deux en même temps.
Client WiFi
Commençons par nous connecter à un réseau en utilisant le DHCP :
#include <ESP8266WiFi.h>
const char* ssid = "CAMPUSCD-CROIXVERTE2";
const char* password = "";
void setup() {
// on démarre le port série
Serial.begin(115200);
// On attend "un peu" que le buffer soit prêt
delay(10);
// On efface la configuration précédente
WiFi.disconnect(true);
Serial.println();
Serial.print("Connexion a ");
Serial.println(ssid);
// Initialisation de la connection
WiFi.begin(ssid, password);
// Test pour déterminer quand la connection est prete
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Affichage des informations
Serial.println("");
Serial.println(" connecte");
Serial.print("Adresse IP: ");
Serial.println(WiFi.localIP());
Serial.print("Adresse MAC: ");
Serial.println(WiFi.macAddress());
Serial.print("Masque : ");
Serial.println(WiFi.subnetMask());
Serial.print("Passerelle : ");
Serial.println(WiFi.gatewayIP());
Serial.print("RSSI (force du signal): ");
Serial.println(WiFi.RSSI());
Serial.print("Canal: ");
Serial.println(WiFi.channel());
}
Le code précédent vous donne le résultat suivant sur le port série :
Connexion a CAMPUSCD-CROIXVERTE2.. connecte Adresse MAC: 2E:3A:E8:17:2C:A7 Adresse IP: 192.168.52.85 Masque : 255.255.252.0 Passerelle : 192.168.55.250 RSSI (force du signal): -67 Canal: 6
Maintenant que nous connaissons les paramètres données par le réseau, essayons de nous y connecter de manière statique. Dans la partie des variables statiques ajoutez les lignes suivantes :
IPAddress ip(192, 168, 52, 85); IPAddress dns(192, 168, 55, 250); IPAddress gw(192, 168, 55, 250); IPAddress mask(255, 255, 252, 0);
Avant la ligne :
WiFi.begin(ssid, password);
Insérez les lignes :
// Application de la configuration de niveau 3 OSI WiFi.config(ip, gw, mask, dns);
La connexion devrait être quasiment instantanée !
Point d'accès
Pour mettre en place un point d'accès, rien de plus simple :
#include <ESP8266WiFi.h>
const char *ssid = "tala";
const char *password = "informatique";
void setup() {
// on démarre le port série
Serial.begin(115200);
// On attend "un peu" que le buffer soit prêt
delay(10);
// On efface la configuration précédente
WiFi.disconnect(true);
Serial.println();
Serial.println("Demarrage du point d'acces...");
// Initialisation du point d'accès
WiFi.softAP(ssid, password);
// Réglage de la puissance (0dBm < x < 20dBm)
WiFi.setOutputPower(5);
// Affichage de l'adresse IP
Serial.print("Adresse MAC: ");
Serial.println(WiFi.softAPmacAddress());
Serial.print("Adresse IP: ");
Serial.println(WiFi.softAPIP());
}
void loop() {
}
Le code précédent vous donne le résultat suivant sur le port série :
Demarrage du point d'acces... Adresse MAC: 2E:3A:E8:17:2C:A7 Adresse IP: 192.168.4.1
Il est possible de modifier certain paramètres de niveau 3 OSI. Dans la partie des variables statiques ajoutez les lignes suivantes :
IPAddress ip(192, 168, 10, 1); IPAddress gw(192, 168, 10, 254); IPAddress mask(255, 255, 252, 0);
Avant la ligne :
WiFi.softAP(ssid, password);
Insérez les lignes :
// Application de la configuration de niveau 3 OSI WiFi.softAPConfig(ip, gw, mask);
La sorite console doit afficher :
Demarrage du point d'acces... Adresse MAC: 2E:3A:E8:17:2C:A7 Adresse IP: 192.168.10.1
Lorsque vous utilisez l'ESP comme point d'accès, un serveur DHCP fournira automatiquement la configuration de niveau 3 OSI.
Programmation événementielle
Il est possible de définir une fonction de callback qui sera appelée lorsqu'un événements arrive. Les événements possibles sont les suivants :
| Événement | Description | Mode |
|---|---|---|
| AP | WIFI_EVENT_MAX | Nombre maximum de clients atteint |
| AP / client | WIFI_EVENT_MODE_CHANGE | Changement de mode de connexion |
| AP | WIFI_EVENT_SOFTAPMODE_PROBEREQRECVED | Réception d'une requête probe (découverte des clients WiFi) |
| AP | WIFI_EVENT_SOFTAPMODE_STACONNECTED | Connexion d'un client |
| client | WIFI_EVENT_SOFTAPMODE_STADISCONNECTED | Déconnexion d'un client |
| client | WIFI_EVENT_STAMODE_AUTHMODE_CHANGE | Changement du mode d'authentification |
| client | WIFI_EVENT_STAMODE_CONNECTED | Connexion au réseau réussie |
| client | WIFI_EVENT_STAMODE_DHCP_TIMEOUT | Configuration DHCP non reçue |
| client | WIFI_EVENT_STAMODE_GOT_IP | Configuration OSI 3 reçue |
| client | WIFI_EVENT_STAMODE_DISCONNECTED | Déconnexion du réseau |
Pour activer la gestion événementiel, après la ligne :
WiFi.disconnect(true);
ajoutez :
WiFi.onEvent(handleEvent);
Il ne nous reste plus qu'à ajouter la fonction suivante :
void handleEvent(WiFiEvent_t event){
Serial.printf("WiFi event %d received\n", event);
}
Seul le contenu de la fonction va changer en fonction du rôle (client ou AP).
AP
Voici un le contenu de la fonction handleEvent:
void handleEvent(WiFiEvent_t event){
Serial.printf("WiFi event %d received\n", event);
if(event == WIFI_EVENT_SOFTAPMODE_PROBEREQRECVED){
Serial.println("Requete probe recue !");
}else if(event == WIFI_EVENT_SOFTAPMODE_STACONNECTED){
Serial.println("Client connecte !");
}else if(event == WIFI_EVENT_SOFTAPMODE_STADISCONNECTED){
Serial.println("Client deconnecte !");
}
}
Le résultat sera le suivant :
Demarrage du point d'acces... Adresse MAC: 2E:3A:E8:17:2C:A7 Adresse IP: 192.168.10.1 WiFi event 7 received Requete probe recue ! WiFi event 5 received Client connecte ! WiFi event 6 received Client deconnecte !
