Bonjour à tous.
Pour des raisons qui me sont propres, j'en entrepris de coder un ESP32 afin qu'il me serve de router internet.
N'étant pas très familier avec les class WIFI des esp, quel galère ça a été! J'ai remarqué qu'il y avait eu beaucoup de changement dans les class WIFI au fil du temps et des évolutions de la librairie.
Entre le soft.ap qui est remplacé par le AP (mais toujours là pour compatibilité), et d'autre dépendances qui sont devenue obsolètes ou qui ont disparues ou ne sont plus compatible avec les modules récents, j'ai pas mal mouliné, d'autant plus que pas mal de tuto sont un peu anciens et proposent encore d'utiliser ces anciennes fonctions inutilisable (ou qui ne seront peut être plus utilisable à la prochaine Maj).
Du coup pour éviter à d'autre de passer autant de temps à lire et chercher dans les docs, à passer des heures à tester, raté, réessayer, je vous propose quelque bouts de code récents qui fonctionneront avec les derniers modules.
Celui qui m'a le plus pris le bec, c'est la méthode pour récupérer la liste des IP des appareils qui sont connecté sur mon router WIFI.AP.
Pour ce faire dans les tutos que l'ont trouve sur le net et ici dans le forum, ça passe principalement par l'utilisation des listes 'wifi_sta_list_t' (qui elle est toujours fonctionnelle) pour les adresse mac, et pour les adresses IP 'tcpip_adapter_list_t' qui lui n'existe plus, il migré vers ' esp_netif_list_t' qui lui même a disparu des radars avec la V.4 . Pour l'AID, je n'avais rien trouvé sur le sujet.
Voici donc une fonction qui vous permettra de récupérer la liste des devices connectés sur l'AP de votre ESP, avec leur adresse IP attribués, leur adresses mac, leur RSSI et leur AID. Code qui fonctionne parfaitement aujourd'hui sur la V.5.4
Un simple appel n'importe où dans votre code pour récupérer ces données ( AnalyseConnecte(); ) , à condition bien sûr que le WIFI.AP soit démarré et que votre router soit créé.
Ne pas oublier de déclarer #include <esp_wifi_ap_get_sta_list.h> qui, je ne sais pour quel raison, n'est pas inclus dans les class espWIFI
En espérant que cela puisse aider!
#include <WiFi.h>
#include <esp_wifi.h>
#include <esp_wifi_ap_get_sta_list.h> //Ne pas oublier de le déclarer, je ne sais pour quel raison, n'est pas inclus dans les class espWIFI
void AnalyseConnecte()
{
wifi_sta_list_t wifi_sta_list;
memset(&wifi_sta_list, 0, sizeof(wifi_sta_list)); //Les 2 memset sont là au cas où vous ayez besoin de placer ce code dans une boucle, il permet de supprimer les données de la dernière itération.
esp_wifi_ap_get_sta_list(&wifi_sta_list);
wifi_sta_mac_ip_list_t wifi_sta_ip_mac_list;
memset(&wifi_sta_ip_mac_list, 0, sizeof(wifi_sta_ip_mac_list));
esp_wifi_ap_get_sta_list_with_ip(&wifi_sta_list, &wifi_sta_ip_mac_list);
//Renvoi une liste avec tous les appareils connectés sur votre Router.
//On fait une boucle sur cette liste pour obtenir pour chaque appareil connecté, son IP, son Mac, son Aids et le RSSI.
//Libre à vous d'utiliser' ces données à votre convenance avec du code.
Serial.print (" - Nombre d'appareils connectés: "); Serial.println(wifi_sta_list.num);
Serial.println("-------------------------------------------------------------------------------------");
for (int i =0; i < wifi_sta_list.num ; i++)
{
wifi_sta_info_t station = wifi_sta_list.sta[i];
esp_netif_pair_mac_ip_t station2 = wifi_sta_ip_mac_list.sta[i];
uint16_t aidDevice; esp_wifi_ap_get_sta_aid(station.mac, &aidDevice);
char mac[20];
for (int j=0; j<6; j++) {sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", station.mac[0], station.mac[1], station.mac[2], station.mac[3], station.mac[4], station.mac[5] );}
Serial.print(" - AID: "); Serial.println (aidDevice);
Serial.print(" - Mac Adresse: "); Serial.println (mac);
Serial.print(" - IP attribuée: "); Serial.println (IPAddress (station2.ip.addr) );
Serial.print(" - RSSI: "); Serial.println (station.rssi);
Serial.println("-------------------------------------------------------------------------------------");
Serial.println();
Serial.println();
}
}