Autres articles / Other articles

Gestion des adresses MAC

publication: 28 décembre 2025 / mis à jour 28 décembre 2025

Read this page in english

 


Les adresses MAC

Une adresse MAC, ou adresse de contrôle d'accès au média (Media Access Control en anglais), est un identifiant unique attribué à un périphérique réseau. Elle est codée sur 6 octets, soit 48 bits, et se compose de caractères alphanumériques. On peut la considérer comme la plaque d'immatriculation de l'appareil sur le réseau.

Fonctionnement:

Propriétés:

Utilisations:

Pour exploiter ESP-NOW, il faut connaître l'adresse MAC de chaque carte ESP32 intégrée au réseau.

Le code source concernant cet article est disponible ici:
  github.com/MPETREMANN11/ESP32forth/blob/main/espnow/mac-address.fs

Comment trouver l'adresse MAC d'une carte ESP32

La première étape consiste à activer le port WiFi en mode station. Dans ce mode on ne définit que le SSID du mode station:

also wifi 
also espnow 
 
\ Configure WiFi in station mode 
: wifi-init ( -- )  
    \ start wifi in station mode 
    WIFI_MODE_STA Wifi.mode 
  ; 

WIFI_MODE_STA est un paramètre de mode Wi-Fi couramment utilisé dans les systèmes embarqués et les microcontrôleurs, en particulier ceux basés sur la famille ESP32. Cela signifie Station Mode, ce qui signifie que l'appareil fonctionne comme un client Wi-Fi et a l'intention de se connecter à un réseau Wi-Fi existant fourni par un point d'accès (AP).

Dans WIFI_MODE_STA, l'appareil recherche activement les réseaux Wi-Fi disponibles, sélectionne le réseau souhaité. un basé sur son SSID (Service Set Identifier) ​​et son mot de passe, et établit une connexion avec l'AP. Une fois connecté, l'appareil peut communiquer avec d'autres appareils sur le réseau et accéder à Internet.

Une adresse MAC est définie sur 6 octets. On va récupérer l'adresse MAC de notre carte ESP32 en réservant 6 octets dans le mot myMAC:

\ store current mac Address 
create myMac 6 allot                
 
\ get  mac address for current ESP32 card and store result in myMac 
: getMyMac ( -- ) 
    myMac WiFi.macAddress 
  ; 

On en profite également pour fédinir le mot .mac qui affichera l'adresse MAC récupérée.

Maintenant, on récupère l'adresse MAC de notre carte ESP32 avec WiFi.macAddress:

wifi-init 100 ms 
getMyMac 

Afficher une adresse MAC

Une adresse MAC est généralement notée sous forme de six groupes de deux caractères hexadécimaux, séparés par des deux-points. Par exemple:

    00:11:22:33:44:55

C'est cette forme qui nous intéresse. Voici comment est défini le mot .mac permettant d'afficher une adresse MAC:

\ display MAC address in hex format 
: .mac { mac-addr -- } 
    base @ hex 
    6 0 do 
        mac-addr i + c@ <# # # #> type 
        i 5 < if 
            [char] : emit 
        then 
    loop 
    base ! 
  ; 

Visualisation du contenu de myMAC avec .mac:

myMAC .mac 
\ display: EC:62:60:9C:76:30 

Définition des adresses MAC cible

Vous l'avez compris, pour communiquer entre deux cartes ESP32, il faut que la carte qui transmet un message connaisse l'adresse MAC de la carte cible. S'il y a plusieurs cartes cible, il faut mémoriser l'adresse de chaque carte cible.

Voici comment définir une adresse MAC pour une carte ESP32 cible:

: define-mac-address: ( $n1..$n6 comp:  -- | exec: -- addr ) 
    create 
        \ store mac address in 6 first bytes 
        >r >r >r >r >r 
        c,  r> c,  r> c,  r> c,  r> c,  r> c,  r> c,   
        \ store 0 in others bytes 
        esp_now_peer_info_t 6 - 1- for 
            0 c, 
        next 
    does> 
  ; 
only forth 

Voici comment mémoriser l'adresse MAC d'une carte cible dont on aura récupéré l'adresse MAC:

$EC $62 $60 $9C $76 $30 define-mac-address: MASTER 
$08 $3A $F2 $6E $1E $F8 define-mac-address: SLAVE1 
$EC $62 $60 $9C $A9 $50 define-mac-address: SLAVE2 

Ici, on définit MASTER et SLAVE1. L'exécution d'un de ces mot dépose sur la pile de données la zone mémoire contenant l'adresse MAC de la carte ESP32 cible. On vérifie que cette adresse MAC a été correctement compilée:

SLAVE1 .mac    \ display: 08:3A:F2:6E:1E:F8 

Si vous exécutez ce code avec vos propres cartes ESP32, vous récupérerez des adresses MAC très différentes. Ce sont ces adresses MAC dont il faut tenir compte.

En plus d'enregistrer une adresse MAC, le mot define-mac-address: réserve des octets supplémentaires pour certains usages. Ces octets supplémentaires dépendent de la structure esp_now_peer_info_t.

La structure esp_now_peer_info_t

esp_now_peer_info_t est une structure contenant les informations sur la carte cible.

Voici comment définir la structure esp_now_peer_info_t:

forth 
also structures 
also espnow 
struct esp_now_peer_info_t 
  ESP_NOW_ETH_ALEN field ->peer_addr 
                16 field ->lmk 
                u8 field ->channel 
                u8 field ->ifidx 
                u8 field ->encrypt 
               u32 field ->priv 

Le canal de transmission WiFi par défaut est le canal 0. Voici comment est défini le mot set-channel qui permet de changer un canal de transmission:

\ set channel for peer 
: set-channel ( chan addr -- ) 
    !field ->channel  
  ; 

Pour modifier le canal des cartes MASTER et SLAVE1:

3 MASTER set-channel 
3 SLAVE1 set-channel 

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