Hopp til innhold
Bokmål
Fagstoff

Henting av MAC-adresser

MAC-adressa er "navneskiltet" til wifi-delen på et utviklerkort. Den gjør at ruteren kan kjenne igjen akkurat din enhet når du kobler deg til trådløst nett.

Innledning

Når du kopler et kort som Arduino UNO R4 WiFi eller ESP32 til et wifinett, får du ei . Men det skjer enda mer i bakgrunnen, for først må enheten på det lokale nettverket. Det gjør den med ei MAC-adresse – en fast, unik kode som ligger lagra i selve wifi-brikka.

Hva er en MAC-adresse?

Tenk på -adressa som navneskiltet på døra. Den er fast, unik og følger kortet hele livet. Den skrives som seks grupper med tall og bokstaver, for eksempel F0:F5:BD:53:BA:10.

Når kortet ditt sender noe over wifi, bruker ruteren denne adressa for å levere data til riktig "dør", omtrent slik som Foodora finner fram til deg og leverer mat ved hjelp av adressa di.

MAC kontra IP: to adresser, to jobber

Folk blander ofte sammen MAC og IP, men de to adressene gjør ulike ting:

  • MAC er navneskiltet som alltid henger på døra di i bygget (det lokale nettet).

  • IP er mer som leilighetsnummeret du får av vaktmesteren (ruteren) – adressa kan endres når du flytter mellom nett.

Rutinene i nettverket bruker IP for å finne riktig område, men MAC for å treffe riktig enhet helt på slutten.

Hvor ligger MAC-adressa på UNO R4 WiFi og ESP32?

På UNO R4 WiFi sitter wifi i en ESP32-S3 som hjelpebrikke. MAC-adressa er lagra permanent i denne brikka og kan leses i programmet. På reine ESP32-kort er MAC-adressa lagra på samme måten.

ESP32 har ofte flere MAC-adresser:

  • Éi adresse brukes når kortet oppfører seg som klient (dvs. kopler til skolens nett).

  • Ei annen adresse brukes hvis kortet selv lager et eget aksesspunkt.

I skoleprosjekter bruker du nesten alltid klient-MAC.

Praktisk tips: La programmet skrive MAC-adressa til seriell monitor når det starter. Da har du den alltid tilgjengelig for registrering og feilsøking.

BSSID – ruterens "navneskilt"

Du har kanskje sett ordet BSSID noen ganger. Det er MAC-adressa til wifi-enheten du kopler deg til (aksesspunktet), ikke til nettverksenheten på utviklerkortet. I et skolebygg med mange rutere som deler samme nettverksnavn, forteller BSSID hvilken ruter du faktisk er kopla til.

Hvorfor er MAC nyttig i skolehverdagen?

I klasserom med mange like kort er MAC-adressa nyttig for orden og kontroll. Ikt-avdelinga kan be om MAC for å gi nett-tilgang (hvitelisting). Ved feilsøking kan lærer eller ikt-medarbeider finne igjen akkurat ditt kort i lista til ruteren, sjekke signalstyrke og finne ut om enheten faktisk er på riktig ruter. MAC brukes også for å få en ryddig prosjektlogg.

Eksempelkoder

For å hente ut MAC-adressa til et kort kan du bruke eksempelkodene under. Disse kodene henter ut MAC-adressa på wifi-brikka og skriver den til seriell monitor.
Hvis skolen din har et lukka utstyrsnett, må du få hjelp fra ikt-avdelinga for å gi kortet nettilgang. Ikt registrerer MAC-adressa i nettverkregisteret og genererer et passord slik at ditt kort kan koples på nettverket.

Har skole din et åpent utstyrsnett, trenger du kun å registrere MAC-adressa uten passord.

Eksempelkode ESP32

ESP32 har innebygd wifi og i samme brikke. Den har ofte flere MAC-adresser (én for wifi-klient, én for , og en egen for BLE). I prosjekter bruker du nesten alltid wifi-klient-MAC.

Trykk reset etter kompilering og opplasting.

Programkode

#include <WiFi.h> // Standard wifi-bibliotek for ESP32

void setup() {

Serial.begin(9600);

delay(200); // Gir pc-en tid til å åpne porten

// ESP32 har en ferdig String-variant:

String mac = WiFi.macAddress(); // f.eks. "24:6F:28:7B:12:9A"

Serial.println("=== ESP32 ===");

Serial.print("Wi-Fi MAC: ");

Serial.println(mac);

// Tips: BLE-adressa er separat (hentes via esp_bt_dev_get_address i ESP-IDF)

}

void loop() {}

Eksempelkode Arduino Uno R4 WiFi

UNO R4 WiFi har en Renesas-mikrokontroller og en ESP32-S3 som wifi-koprosessor. I Arduino-kode bruker du WiFi S3-biblioteket. MAC-adressa ligger i ESP32-S3-brikka.

Trykk reset etter kompilering og opplasting.

Programkode

#include <WiFiS3.h> // Installer/aktiver "Arduino Renesas UNO Boards".

void setup() {

Serial.begin(9600);

while (!Serial) {} // Venter til seriell monitor er klar

byte mac[6];

WiFi.macAddress(mac); // Fyller byte[6] med MAC

Serial.println("=== Arduino UNO R4 WiFi ===");

Serial.print("Wi-Fi MAC: ");

for (int i = 0; i < 6; i++) {

if (mac[i] < 16) Serial.print('0'); // Legger til nuller foran tall slik at alle talla får samme lengde

Serial.print(mac[i], HEX);

if (i < 5) Serial.print(':');

}

Serial.println();

// Merk: Hvis du skulle få 00:00:00:00:00:00, start wifi-kort først:

// WiFi.begin("etSsidSomFinnes"); // Les MAC etterpå.

}

void loop() {}

Eksempelkode Arduino MKR NB 1500

Dette er et mobilkort (NB-IoT/LTE-M). Det har ikke wifi og derfor ingen wifi-MAC-adresse. I stedet bruker du IMEI (modemets unike nummer), for eksempel ved registrering i sky- eller nettjenester.

Husk å installere biblioteket MKRNB.h.

Programkode

#include <MKRNB.h> // Bibliotek for NB-IoT/LTE-M

NB nbAccess; // Handterer nettverkstilgang

NBModem modem; // Gir tilgang til modem-info (IMEI m.m.)

void setup() {

Serial.begin(9600);

while (!Serial) {}

Serial.println("=== Arduino MKR NB 1500 ===");

Serial.print("Initialiserer modem ... ");

// Begge felta kan stå tomme hvis SIM-kortet bruker standard APN/ingen PIN.

if (nbAccess.begin("", "") == NB_READY) {

Serial.println("ok");

String imei = modem.getIMEI();

Serial.print("IMEI: ");

Serial.println(imei.length() ? imei : "ukjent");

} else {

Serial.println("Feil (modem ikke klart)");

}

}

void loop() {}

Eksempelkode Arduino MKR WiFi 1010

MKR WiFi 1010 bruker u-blox NINA-W102 (wifi + BLE) og WiFiNINA-biblioteket i Arduino. Kortet har wifi-MAC (og egen BLE-adresse).

Programkode

#include <WiFiNINA.h> // Installer/oppdater WiFiNINA i Library Manager.

void setup() {

Serial.begin(9600);

while (!Serial) {}

byte mac[6];

WiFi.macAddress(mac); // WiFiNINA: byte[6]-variant

Serial.println("=== Arduino MKR WiFi 1010 ===");

Serial.print("Wi-Fi MAC: ");

for (int i = 0; i < 6; i++) {

if (mac[i] < 16) Serial.print('0');

Serial.print(mac[i], HEX);

if (i < 5) Serial.print(':');

}

Serial.println();

}

void loop() {}

Praktiske tips i kode

  • UNO R4 WiFi (WiFiS3): Les egen MAC med WiFi.macAddress(...).

  • ESP32 (WiFi.h): Les egen MAC med WiFi.macAddress(); husk at WiFi.BSSID() gir AP-ens MAC.

  • Pass på rett rekkefølge: Du må initialisere wifi før du kan få gyldige verdier.

  • Dokumenter MAC: Skriv den til seriell monitor ved oppstart for enkel registrering i nett.

Filer for nedlasting

Du kan enkelt hente ut MAC-adressa på kortet ditt ved å bruke ei av de ferdige tekstfilene under. Last ned, kompiler og last opp!

Husk at du noen ganger må resette kortet for å starte programmet etter opplasting. I disse programmene er kommunikasjonshastighet satt til 9600 baud. Du må derfor velge samme hastighet i din serielle monitor.


Skrevet av Roger Rosmo.
Sist oppdatert 08.10.2025