Der Arduino MKR WiFi 1010 ist ein Mikrocontroller-Board im kleinen Format. Es besteht aus dem eigentlichen Mikrocontroller, digitalen Ein- und Ausgängen und analogen Eingängen. Zusätzlich ist ein WiFi-Modul und ein Bluetooth-Modul (BLE) verbaut.
Pinbelegung

An diese Ein- und Ausgänge können zum Beispiel ⇒LEDs, Lautsprecher, Displays, Motoren oder Sensoren angeschlossen werden. Der Mikrocontroller kann alle diese Bauteile steuern, Signale auslesen und aufgrund der gelesenen Daten verschiedene Aktionen auslösen.
- Der Reset-Knopf startet das gerade hochgeladene Programm neu.
- Die digitalen Ein-/Ausgänge liefern im Normalfall ein HIGH (1) oder LOW (0). Eine Ausnahme bilden die mit einem ~ gekennzeichneten Pins. Sie können mit der ⇒Pulsweitenmodulation angesprochen werden.
- Die analogen Eingänge messen die anliegende Spannung. Diese Spannung wird vom Analog-Digital-Wandler (ADC = Analog Digital Converter) in digitale Werte zwischen 0 und 1023 umgewandelt.
- Die Eingänge SCL (12) und SDA (11) werden über den ⇒I2C-Bus angesteuert.
- die Pins 13 (RX - Receiver = Empfänger) und 14 (TX - Transmitter = Sender) werden für die Kommunikation mit dem Computer über die USB-Schnittstelle verwendet. Sie können nur dann als digitale Ein- oder Ausgänge verwendet werden, wenn der Arduino über eine externe Stromzufuhr betrieben wird.
Board installieren

- Icon für den Boardverwalter anklicken oder Werkzeuge-> Board -> Boardverwalter
- nach dem SAMD Board suchen
- Board installieren
RGB-LED
Auf dem Board befindet sich eine RGB-LED.
Sie kann nach der Installation der Bibliothek WiFiNINA genutzt werden.

#include <WiFiNINA.h>
#include <utility/wifi_drv.h>
void setup()
{
// 25 = rot, 26 = grün, 27 = balu
WiFiDrv::pinMode(25, OUTPUT);
WiFiDrv::pinMode(26, OUTPUT);
WiFiDrv::pinMode(27, OUTPUT);
}
void loop()
{
// rot
WiFiDrv::digitalWrite(25, HIGH);
delay(1000);
WiFiDrv::digitalWrite(25, LOW);
delay(1000);
// grün
WiFiDrv::digitalWrite(26, HIGH);
delay(1000);
WiFiDrv::digitalWrite(26, LOW);
delay(1000);
// blau
WiFiDrv::digitalWrite(27, HIGH);
delay(1000);
WiFiDrv::digitalWrite(27, LOW); //Turn Off Green light
delay(1000);
}
Bluetooth (BLE)
Das Programm
Zunächst musst du die Bibliothek ArduinoBLE installieren:

Das Programm schaltet die eingebaute LED:
1 -> einschalten, 0 -> ausschalten:
#include "ArduinoBLE.h"
/*
eindeutige UUID bestimmen:
https://www.guidgenerator.com/online-guid-generator.aspx
https://www.uuidgenerator.net/
BLERead | BLEWrite | BLENotify
-> schreiben, lesen, Info
*/
// Name BLE-Service
BLEService LEDSchalten("19b10000-e8f2-537e-4f6c-d104768a1214");
BLEUnsignedCharCharacteristic Auswahl("19b10000-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite | BLENotify);
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// pinMode festlegen
pinMode(LED_BUILTIN, OUTPUT);
// BLE starten
if (!BLE.begin()) Serial.println("Bluetooth-Modul konnte nicht gestartet werden!");
else Serial.println("Bluetooth-Modul erfolgreich gestartet!");
// Name festlegen (wird in der App angezeigt) und den Service (LEDSchalten) zuweisen
BLE.setLocalName("LED schalten");
BLE.setAdvertisedService(LEDSchalten);
// Auswahl als Platzhalter für den in der App gewählten Wert
LEDSchalten.addCharacteristic(Auswahl);
// Service LEDSchalten hinzufügen
BLE.addService(LEDSchalten);
// Startwert für die Kommunikation schreiben
Auswahl.writeValue(0);
// Zuweisung starten
BLE.advertise();
}
void loop()
{
// auf die Verbindung zu Geräten warten
BLEDevice Verbindung = BLE.central();
// wenn der ESP32 mit einem Gerät verbunden ist ...
if (Verbindung)
{
Serial.println("Verbunden ... ");
// solange der Controller mit einem Gerät verbunden ist ...
while (Verbindung.connected())
{
if (Auswahl.written())
{
// LED einschalten
if (Auswahl.value() == '1')
{
Serial.print(char(Auswahl.value()));
Serial.println(" -> LED ein");
digitalWrite(LED_BUILTIN, HIGH);
}
// LED ausschalten
if (Auswahl.value() == '0')
{
Serial.print(char(Auswahl.value()));
Serial.println(F(" -> LED aus"));
digitalWrite(LED_BUILTIN, LOW);
}
}
}
}
}
Smartphone-Apps
BLE Terminal (iOS)
![]() | ![]() |
BluetoothLE (iOS)
![]() | ![]() | ![]() | ![]() |
Webserver
Beispiel: Das Programm zeigt im Browser 6 Zufallszahlen an.
Im Seriellen Monitor wird die IP des Arduino MKR WiFi 1010 angezeigt.

Diese Adresse musst du in einem Browser deiner Wahl eingeben

Zunächst muss die Bibliothek WiFiNINA installiert werden:

#include "WiFiNINA.h"
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
// Minimum/Maximum der Zufallszahlen
const byte Minimum = 1;
const byte Maximum = 49;
WiFiServer WiFiServer(80);
WiFiClient WiFiClient;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) ;
// WiFi starten
WiFi.begin(Router, Passwort);
// Verbindung herstellen
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.println(WiFi.localIP());
// Webserver starten
WiFiServer.begin();
// IP des Arduinos anzeigen
Serial.print("IP Adresse Arduino DHCP: ");
Serial.println(WiFi.localIP());
// Zufallsgenerator mit dem Signal an A0 starten
randomSeed(analogRead(A0));
}
void loop()
{
// auf WiFiClienten warten ...
WiFiClient = WiFiServer.available();
if (WiFiClient)
{
// Seite aufbauen wenn SeiteAufbauen true ist
boolean SeiteAufbauen = true;
// solange der WiFiClient verbunden ist ...
while (WiFiClient.connected())
{
if (WiFiClient.available())
{
// Anforderung vom WiFiClienten lesen ...
char Zeichen = WiFiClient.read();
// wenn als Zeichen neue Zeile (\n) übergeben wird
// SeiteAufbauen true ist -> Seite anzeigen
if (Zeichen == '\n' && SeiteAufbauen)
{
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(erzeugt einen Zeilenumbruch im Quelltext)
*/
WiFiClient.println("HTTP/1.1 200 OK");
WiFiClient.println("Content-type:text/html");
// Leerzeile zwingend erforderlich
WiFiClient.println();
WiFiClient.println("<!doctype html>");
WiFiClient.println("<html>");
WiFiClient.println("<body>");
// <h2> Überschrift H2
WiFiClient.println("<h2>Zufallszahlen</h2>");
// <hr> horizontale Linie
WiFiClient.println("<hr>");
// Zufallszahlen anzeigen
for (int i = 0; i < 7; i++)
{
int Zahl = random(Minimum, Maximum);
WiFiClient.println(Zahl);
WiFiClient.println(" ");
}
WiFiClient.print("<hr>");
// IPs anzeigen
WiFiClient.print("Eigene IP-Adresse: ");
WiFiClient.print(WiFiClient.remoteIP());
WiFiClient.print("</b>");
WiFiClient.print("<br>IP-Adresse Arduino: ");
WiFiClient.print(WiFi.localIP());
WiFiClient.println("</body>");
WiFiClient.println("</html>");
// HTTP-Antwort endet mit neuer Zeile
WiFiClient.println();
// Seite vollständig geladen -> loop verlassen
break;
}
// neue Zeile -> SeiteAufbauen auf true setzen
if (Zeichen == '\n') SeiteAufbauen = true;
// die aktuelle Zeile enthält ein Zeichen
else if (Zeichen != '\r') SeiteAufbauen = false;
}
}
delay(1);
WiFiClient.stop();
}
}
Quellen
- RGB-LED (abgerufen am 04.10.24)
- Grafik MKR1010 (abgerufen am 04.10.24)
- WiFi (abgerufen am 04.10.24)
Letzte Aktualisierung: