Gestion des adresses MAC

publication: 30 mai 2024 / mis à jour 4 juin 2024

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.

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:

z" ESP-MASTER-AP"           constant mySSID 
z" "                        constant myPASSWORD 

Ici, on définit ESP-MASTER-AP comme SSID de notre carte ESP32. Pour ESP-NOW, ce SSID ne sera pas utile. Il est cependant recommandé d'avoir un SSID par carte ESP32.

Voyons comment initialiser le port WiFi de notre carte ESP32:

\ Initialize WiFi 
wifi 
 
\ Configure WiFi in station mode 
: wifi-init ( -- )  
    WIFI_MODE_STA Wifi.mode  
\     mySSID myPASSWORD WiFi.softAP  
\     0= if 
\         abort" Soft AP creation failed" 
\     then 
  ; 

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:

create myMAC 6 allot 

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

wifi-init 
WiFi 
myMAC WiFi.macAddress 

Dans un premier temps, pour visualiser notre adresse MAC, un simple dump suffit:

hex 
myMAC 6 dump 
decimal 

Ce qui affiche:

3FFEE1C0            EC 62 60 9C 76 30

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 de nouvelles adresses MAC

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:

internals also 
: define-mac-address: ( comp:   -- | exec: -- addr ) 
    create 
        base @ >r  hex          \ save current base 
        5 for 
            [char] : parse      \ search : delimiter 
            S>NUMBER?           \ try convert in integer 
            if      c,          \ compile integer in mac-address 
            else    abort" MAC address scan error" 
            then 
        next 
        r> base !               \ restore current base 
    does> 
  ; 
only forth 

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

define-mac-address: ESP-TARGET-01 5F:2C:33:17:1A:7C 

Ici, on définit ESP-TARGET-01. L'exécution de ce 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:

ESP-TARGET-01 .mac    \ display: 5F:2C:33:17:1A:7C 

La structure esp_now_peer_info_t

esp_now_peer_info_t est une structure contenant les informations sur le périphérique jumeau à ajouter. Cette structure doit inclure les champs suivants:

Voici comment définir la structure esp_now_peer_info_t:

structures definitions 
6 6 typer iMAC 
forth definitions 
 
structures  
struct esp_now_peer_info_t 
    iMAC field ->peer_address 
    i8   field ->channel 
    i8   field ->is_static     
    i8   field ->LRF 
    i8   field ->PHY 
forth 

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