Autres articles / Other articles

Extension du vocabulaire WiFi pour ESP32forth

publication: 19 mai 2026 / mis à jour 21 mai 2026

Read this page in english

 

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:

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 ( 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:

  1. En mode Station : Connaître le nom du réseau auquel ton ESP32 est actuellement connecté.
  2. 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:

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:

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:

  1. Après un Scan : Savoir sur quel canal émet une box voisine.
  2. 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.

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:

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.


Legal: site web personnel sans commerce / personal site without seling