Extension du vocabulaire WiFi pour ESP32forth
publication: 19 mai 2026 / mis à jour 21 mai 2026
Etendre le vocabulaire WiFi
Ouvrez le code source du fichier ESP32forth.ino. Cherchez la ligne de code qui commence par ceci:
# define OPTIONAL_WIFI_SUPPORT \
/* WiFi */ \
XV(WiFi, "WiFi.config", WIFI_CONFIG, \
WiFi.config(ToIP(n3), ToIP(n2), ToIP(n1), ToIP(n0)); DROPn(4)) \
....
Allez jusqu'à ces lignes:
... XV(WiFi, "WiFi.softAPgetStationNum", WIFI_SOFTAP_GET_STATION_NUM, PUSH WiFi.softAPgetStationNum()) #endif
Rajoutez ces lignes de code avant #endif:
XV(WiFi, "WiFi.softAPgetStationNum", WIFI_SOFTAP_GET_STATION_NUM, PUSH WiFi.softAPgetStationNum()) \
/* WiFi scan */ \
/* Récupère le nombre de réseaux WiFi détectés */ \
XV(WiFi, "WiFi.scanNetworks", WIFI_SCANNETWORKS, PUSH (cell_t)WiFi.scanNetworks()) \
/* Récupère le SSID du réseau indexé par n0 */ \
XV(WiFi, "WiFi.SSID", WIFI_SSID, { String s = WiFi.SSID(n0); n0 = (cell_t) strdup(s.c_str()); }) \
/* Récupère la puissance (RSSI) du réseau indexé par n0 */ \
XV(WiFi, "WiFi.RSSI", WIFI_RSSI, n0 = (cell_t)WiFi.RSSI(n0)) \
/* Récupère le canal (channel) du réseau indexé par n0 */ \
XV(WiFi, "WiFi.channel", WIFI_CHANNEL, n0 = (cell_t)WiFi.channel(n0)) \
/* Récupère le type de cryptage du réseau indexé par n0 */ \
XV(WiFi, "WiFi.encryptionType", WIFI_ENCRYPTIONTYPE, n0 = (cell_t)WiFi.encryptionType(n0)) \
/* Efface les résultats du scan de la mémoire */ \
XV(WiFi, "WiFi.scanDelete", WIFI_SCANDELETE, WiFi.scanDelete())
#endif
Recompilez ESP32forth et téléversez dans votre carte ESP32. Vous devez vous retrouver avec ces mots:
--> wifi vlist WIFI_MODE_APSTA WIFI_MODE_AP WIFI_MODE_STA WIFI_MODE_NULL WiFi.config WiFi.begin WiFi.disconnect WiFi.status WiFi.macAddress WiFi.localIP WiFi.mode WiFi.setTxPower WiFi.getTxPower WiFi.softAP WiFi.softAPIP WiFi.softAPBroadcastIP WiFi.softAPNetworkID WiFi.softAPConfig WiFi.softAPdisconnect WiFi.softAPgetStationNum WiFi.scanNetworks WiFi.SSID WiFi.RSSI WiFi.channel WiFi.encryptionType WiFi.scanDelete WiFi-builtins ok -->
Glossaire de ces nouveaux mots WiFi
WiFi.scanNetworks ( -- n )
Le mot WiFi.scanNetworks permet à l'ESP32 de scanner l'environnement
à la recherche des réseaux Wi-Fi disponibles. C'est exactement ce que fait
votre smartphone lorsque vous ouvrez les paramètres Wi-Fi et que la liste
des box internet des voisins apparaît.
Le scan de réseaux est très utile pour plusieurs scénarios:
- Sélection automatique: Permettre à l'ESP32 de chercher s'il capte le Wi-Fi de votre maison ou celui de votre partage de connexion mobile, et de se connecter automatiquement au signal le plus fort.
- Interface de configuration: Si vous créez un portail de configuration (en mode softAP), vous pouvez afficher à l'utilisateur la liste des réseaux détectés pour qu'il n'ait plus qu'à cliquer sur le sien et entrer son mot de passe.
- Analyse d'environnement: Mesurer la qualité du signal (RSSI) pour optimiser le placement de votre ESP32 par rapport à votre routeur.
Le mot WiFi.scanNetworks renvoie un nombre entier sur la pile. Ce nombre
correspond au nombre de réseaux Wi-Fi trouvés (par exemple 5 si elle a détecté 5 box internet).
Si le scan échoue ou est encore en cours, il peut retourner un code d'erreur (comme -1 ou -2).
Voici comment on l'utilise généralement pour obtenir le nombre de réseaux:
z" Mariloo" z" 1925xxxxxxxxxxxxxx7959F" WiFi.begin \ 1. Le Wi-Fi doit être initialisé en mode Station au préalable WIFI_MODE_STA wifi.mode \ 2. Lancer le scan WiFi.scanNetworks ( -- n ) \ 3. Afficher le nombre de réseaux trouvés cr ." Reseaux trouves : " .
Le mot WiFi.scanNetworks ne fait que lancer la recherche et retourner le nombre
de réseaux. Pour afficher concrètement le nom (SSID) ou la puissance de chaque réseau,
ESP32forth fournit d'autres mots complémentaires qui s'utilisent dans une boucle.
Par exemple, si WiFi.scanNetworks a mis le chiffre 5 sur la pile, on utilise
des fonctions compagnes comme :
WiFi.SSID: pour obtenir le nom du réseau à un index donné.WiFi.RSSI: pour obtenir la puissance du signal en dBm (plus le chiffre est proche de 0, meilleur est le signal, ex: -50 dBm est excellent, -90 dBm est très faible).
WiFi.SSID ( id -- zstr )
Le mot WiFi.SSID permet de récupérer le nom (le SSID) d'un réseau Wi-Fi.
Selon le contexte dans lequel il est utilisé, ce mot a deux fonctions très précises:
- En mode Station : Connaître le nom du réseau auquel ton ESP32 est actuellement connecté.
- Après un Scan : Connaître le nom de l'un des réseaux détectés dans les environs
(parmi la liste trouvée par
WiFi.scanNetworks).
L'effet de pile est le suivant:
- En entrée (index) : on indique le numéro du réseau qui nous intéresse (0 pour le premier trouvé, 1 pour le deuxième, etc.).
- En sortie (z-string) : Le mot te renvoie l'adresse d'une chaîne de caractères en C (terminée par un zéro binaire) contenant le nom du réseau.
0 WiFi.SSID z>s type \ affiche le SSID réseau d’index 0
WiFi.RSSI ( id -- rssi )
Le mot WiFi.RSSI sert à mesurer la puissance du signal Wi-Fi.
L'acronyme RSSI signifie Received Signal Strength Indicator (Indicateur de force du
signal reçu). Tout comme le mot WiFi.SSID, il s'utilise principalement après
avoir lancé un scan avec WiFi.scanNetworks pour connaître l'intensité
de chaque réseau détecté alentour.
Le mot prend en paramètre le numéro (l'index) du réseau scanné et renvoie un nombre entier signé (sur 32 bits).
La valeur retournée s'exprime en dBm (décibel-milliwatt). C'est une échelle logarithmique un peu particulière car le chiffre est presque toujours négatif.
Plus le chiffre est proche de zéro, plus le signal est puissant. Plus il s'en éloigne, plus le signal est faible:
- Entre -30 dBm et -50 dBm : Excellent signal. L'ESP32 est juste à côté de la box.
- Entre -60 dBm et -70 dBm : Bon signal. C'est parfait pour naviguer ou envoyer des données de capteurs sans coupure.
- À partir de -80 dBm : Signal très faible. La connexion commence à devenir instable et des paquets de données risquent de se perdre.
- -90 dBm et au-delà : Limite de la déconnexion. L'ESP32 capte à peine le réseau.
WiFi.channel ( id -- chan )
Le mot WiFi.channel permet de connaître ou de spécifier le canal radio (Channel)
utilisé pour la communication Wi-Fi.
Comme toutes les technologies sans fil, le Wi-Fi découpe la bande de fréquences (généralement le 2.4 GHz sur l'ESP32) en plusieurs pistes de circulation appelées "canaux" (numérotés de 1 à 13 en Europe).
Selon le contexte, ce mot s'utilise de deux manières:
- Après un Scan : Savoir sur quel canal émet une box voisine.
- Pour le réseau actuel : Connaître le canal sur lequel l'ESP32 est actuellement calé.
Le mot prend en paramètre l'index du réseau détecté et renvoie un nombre entier (de 1 à 13).
Si trop de box internet émettent sur le même canal dans la même pièce, les ondes se chevauchent et créent des interférences (comme des voitures qui bouchonnent sur une seule voie). Cela ralentit la connexion et provoque des déconnexions.
- En analysant les canaux avec WiFi.channel, on peut voir quels canaux sont saturés autour de l'ESP32.
- Cela permet ensuite, lors de la création d'un point d'accès avec WiFi.softAP, de choisir volontairement un canal libre (les canaux 1, 6 et 11 sont les plus souvent recommandés car ils ne se chevauchent pas).
WiFi.encryptionType ( id -- chan )
Le mot WiFi.encryptionType sert à connaître le type de sécurité (chiffrement) utilisé
par un réseau Wi-Fi détecté aux alentours.
Il permet de savoir si un réseau est totalement ouvert (public sans mot de passe) ou s'il est protégé par une clé de sécurité (comme le protocole WPA2 de la plupart de nos box internet).
Le mot prend en paramètre l'index du réseau scanné et retourne un nombre entier. Ce nombre correspond à une énumération (une liste de codes) définie par le système de l'ESP32.
La valeur numérique renvoyée sur la pile correspond à un niveau de sécurité précis. Voici les principaux codes que l'ESP32 peut renvoyer:
- 0 (WIFI_AUTH_OPEN) : Réseau ouvert. Pas besoin de mot de passe pour s'y connecter (attention aux données !).
- 1 (WIFI_AUTH_WEP) : Sécurité WEP. Un vieux protocole obsolète et très facile à pirater.
- 2 (WIFI_AUTH_WPA_PSK) : Sécurité WPA.
- 3 (WIFI_AUTH_WPA2_PSK) : Sécurité WPA2. C'est le standard actuel de la majorité des box et routeurs domestiques.
- 4 (WIFI_AUTH_WPA_WPA2_PSK) : Mode mixte qui accepte à la fois le WPA et le WPA2.
- 5 ou plus (WIFI_AUTH_WPA3_PSK...) : Normes récentes de sécurité renforcée (WPA3).
WiFi.scanDelete ( -- )
Le mot WiFi.scanDelete permet de libérer la mémoire RAM qui a été utilisée pour stocker
les résultats du dernier scan Wi-Fi.
C'est une commande de nettoyage essentielle pour la gestion de la mémoire du microcontrôleur.
Lorsque le mot WiFi.scanNetworks est exécuté, l'ESP32 cherche les réseaux autour
de lui et crée une liste invisible en mémoire RAM contenant toutes les données que nous
avons vu précédemment (les noms SSID, la puissance RSSI, les canaux, le type de chiffrement, etc.).
Le problème, c'est que cette liste reste bloquée dans la mémoire RAM de l'ESP32 tant qu’elle n’est pas explicitement supprimée.
- Éviter les fuites de mémoire (Memory Leaks) : Si le programme Forth effectue des
scans Wi-Fi en boucle (par exemple, toutes les minutes) sans jamais appeler
WiFi.scanDelete, la mémoire RAM va finir par saturer, ce qui fera planter ou redémarrer l'ESP32. - Actualiser les données : Appeler
WiFi.scanDeletenettoie l'ancien scan pour s'assurer que le prochain scan reparte sur une base totalement propre et à jour.
Legal: site web personnel sans commerce / personal site without seling
