Hopp til innhald
Nynorsk
Fagstoff

Henting av MAC-adresser

MAC-adressa er "namneskiltet" til wifi-delen på eit utviklarkort. Ho gjer at ruteren kan kjenne igjen akkurat di eining når du koplar deg til trådlaust nett.

Innleiing

Når du koplar eit kort som Arduino UNO R4 WiFi eller ESP32 til eit wifinett, får du ei . Men det skjer endå meir i bakgrunnen, for først må eininga på det lokale nettverket. Det gjer ho med ei MAC-adresse – ein fast, unik kode som ligg lagra i sjølve wifi-brikka.

Kva er ei MAC-adresse?

Tenk på -adressa som namneskiltet på døra. Ho er fast, unik og følger kortet heile livet. Ho blir skriven som seks grupper med tal og bokstavar, til dømes F0:F5:BD:53:BA:10.

Når kortet ditt sender noko over wifi, bruker ruteren denne adressa for å levere data til rett "dør", om lag slik som Foodora finn fram til deg og leverer mat ved hjelp av adressa di.

MAC kontra IP: to adresser, to jobbar

Folk blandar ofte saman MAC og IP, men dei to adressene gjer ulike ting:

  • MAC er namneskiltet som alltid heng på "døra di" i det lokale nettet.

  • IP er meir som leilegheitsnummeret du får av vaktmeisteren (ruteren) – adressa kan forandrast når du flyttar mellom nett.

Rutinane i nettverket bruker IP for å finne rett område, men MAC for å treffe rett eining heilt på slutten.

Kvar ligg MAC-adressa på UNO R4 WiFi og ESP32?

På UNO R4 WiFi sit wifi i ein ESP32-S3 som hjelpebrikke. MAC-adressa er lagra permanent i denne brikka og kan lesast i programmet. På reine ESP32-kort er MAC-adressa lagra på same måten.

ESP32 har ofte fleire MAC-adresser:

  • Éi adresse blir brukt når kortet oppfører seg som klient (dvs. koplar til nettet til skulen).

  • Ei anna adresse blir brukt viss kortet sjølv lagar eit eige aksesspunkt.

I skuleprosjekt bruker du nesten alltid klient-MAC.

Praktisk tips: La programmet skrive MAC-adressa til seriell monitor når det startar. Då har du ho alltid tilgjengeleg for registrering og feilsøking.

BSSID – "namneskiltet" til ruteren

Du har kanskje sett ordet BSSID nokre gonger. Det er MAC-adressa til wifi-eininga du koplar deg til (aksesspunktet), ikkje til nettverkseininga på utviklarkortet. I eit skulebygg med mange ruterar som deler same nettverksnamn, fortel BSSID kva ruter du faktisk er kopla til.

Kvifor er MAC nyttig i skulekvardagen?

I klasserom med mange like kort er MAC-adressa nyttig for orden og kontroll. Ikt-avdelinga kan be om MAC for å gi nett-tilgang (kvitelisting). Ved feilsøking kan lærar eller ikt-medarbeidar finne igjen akkurat ditt kort i lista til ruteren, sjekke signalstyrke og finne ut om eininga faktisk er på rett ruter. MAC blir òg brukt for å få ein ryddig prosjektlogg.

Dømekodar

For å hente ut MAC-adressa til eit kort kan du bruke dømekodane under. Desse kodane hentar ut MAC-adressa på wifi-brikka og skriv ho til seriell monitor.

Viss skulen din har eit lukka utstyrsnett, må du få hjelp frå ikt-avdelinga for å gi kortet nettilgang. Ikt registrerer MAC-adressa i nettverksregisteret og genererer eit passord slik at kortet ditt kan koplast på nettverket.

Har skulen din eit opent utstyrsnett, treng du berre registrere MAC-adressa utan passord.

Dømekode ESP32

ESP32-mikrokontrollaren har innebygd wifi og i same brikke. Han har ofte fleire MAC-adresser (éi for wifi-klient, éi for , og ei eiga for VART). I prosjekt 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 å opne porten

// ESP32 har ein 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 (blir henta via esp_bt_dev_get_address i ESP-IDF)

}

void loop() {}

Dømekode Arduino Uno R4 WiFi

UNO R4 WiFi har ein Renesas-mikrokontrollar og ein ESP32-S3 som wifi-koprosessor. I Arduino-kode bruker du WiFi S3-biblioteket. MAC-adressa ligg 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) {} // Ventar 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'); // legg til nullar framfor tal slik at alle tala får same lengde

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

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

}

Serial.println();

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

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

}

void loop() {}

Dømekode Arduino MKR NB 1500

Dette er eit mobilkort (NB-IoT/LTE-M). Det har ikkje Wi-Fi og derfor ikkje noka Wi-Fi-MAC-adresse. I staden bruker du IMEI (det unike nummeret til modemet), til dømes ved registrering i sky-/nett-tenester.

Hugs å 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 dersom 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 ikkje klart)");

}

}

void loop() {}

Dømekode Arduino MKR WiFi 1010

MKR WiFi 1010 bruker u-blox NINA-W102 (Wi-Fi VART) og Wifinina-biblioteket i Arduino. Kortet har wifi-MAC (og eiga 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 eiga MAC-adresse med Wifi.macAddress(...).

  • ESP32 (Wifi.h): Les eiga MAC-adresse med Wifi.macAddress(); hugs at WiFi.BSSID() gir MAC-en til AP-en.

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

  • Dokumenter MAC: Skriv MAC-adressa 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 dei ferdige tekstfilene under. Last ned, kompiler og last opp!

Hugs at du av og til må resetje kortet for å starte programmet etter opplasting. I desse programma er kommunikasjonsfart sett til 9600 baud. Du må derfor velje same fart i den serielle monitoren din.


Skrive av Roger Rosmo.
Sist oppdatert 08.10.2025