Internet der Dinge trifft Maker: Genuino MKR1000

Bisherige Arduino-Boards waren bezüglich Funktionalität und Formfaktor eher auf Elektronikprojekte mit gelegentlichem Internetzugriff zugeschnitten. Das könnte sich jetzt ändern.

Know-how  –  1 Kommentare
Genuino MKR1000, Teil 1: Internet der Dinge trifft Maker

Mikrocontroller-Boards wie die der Arduino-Open-Source-Hardware-Familie bieten die Möglichkeit, mit relativ wenig finanziellem Einsatz aktiv am Internet der Dinge zu partizipieren. Informationsquellen zu den Boards und der notwendigen Elektronik gibt es in Hülle und Fülle. Mit dem speziell für IoT-Entwickler konzipierten Board MKR1000 öffnet sich nun die Tür zu professionellen Anwendungen.

Blick unter die Haube

Das Board basiert auf dem Atmel ATSAMMW25 SoC (System on a Chip), einem WLAN-fähigen System von Atmel mit speziellem Fokus auf das Internet der Dinge. Als Herz des MKR1000 dient ein SAMD21 Cortex-M0+-32Bit-Mikrocontroller aus der ARM-Familie, dessen Cousin beim Arduino Zero für Tempo sorgt. Entsprechend seinem angestrebten Anwendungsgebiet handelt es sich um einen Chip mit niedrigem Stromverbrauch. Flash-Speicher und SRAM bewegen sich mit 32 KByte und 256 KByte im Mittelfeld der Arduino/Genuino-Familie.

Der Genuino/Arduino MKR1000 ist der IoT-Spezialist in der Arduino-Familie (Abb. 1).

Um die damit realisierten Geräte unabhängig betreiben zu können, unterstützt das Board eine Lithium-Polymer-Zelle (Li-Po) mit 3.7 V und mindestens 700 mAh Ladungsmenge. Auf dem rechten Foto ist oben links der beige Li-Po-Anschluss zu sehen. Bei Betrieb am Stromnetz lädt das Board die Zelle wenigstens zwei Stunden lang mit einem Ladestrom von 350 mA, weshalb die verwendete Li-Po eine Speicherkapazität von 700 mAh haben sollte.

Während ein MKR1000 eine Spannungsversorgung von 5 V über USB oder Netzteil erwartet, arbeitet das System intern mit 3,3 V. Am Spannungseingang sollte im Idealfall eine geregelte 5V-Spannung angeschlossen sein. Maximal 6V-Eingangsspannung empfiehlt die Dokumentation. Bei vorhandenem Netzanschluss verwendet das Board keinen Ladestrom des USB-Anschlusses. Zudem leuchtet die grüne Betriebs-LED nur, wenn sich das Board nicht aus der Batterie speist.

Außen- und Innendienst

Für die digitalen Ein-/Ausgabe-Pins unterstützt der MKR1000 einen Gleichstrom von bis zu 7 mA, liegt damit also deutlich unterhalb der rund 20 mA eines Genuino/Arduino Uno.

Die Zahl der digitalen I/0-Pins beträgt acht, von denen die meisten PWM (Pulsweitenmodulation) und externe Interrupts unterstützen. Von den analogen Eingängen gibt es sieben an der Zahl, allesamt mit einer Analog-Digital-Wandlung mit 8, 10 oder 12 Bit ausgestattet. A0 als einziger analoger Ausgang erlaubt eine Digital-Analog-Umwandlung mit 10 Bit Auflösung.

Das Board unterstützt die obligatorischen internen Bussysteme I2C (Inter-IC) und SPI (Serial Peripheral Interface) sowie als Schnittstelle zwischen serieller und paralleler Kommunikation einen UART. Schaut man von oben auf das Board, ergibt sich schematisch folgendes Layout (vgl. Abb. 1):

       |micro|
| USB |
---------------------
LIPO | |
Anschluss| |
---------------------
o AREF 5V o
o DAC0/A0 Vin o
o A1 +3V3 o
o A2 GND o
o A3 RESET o
o A4 <- TX o
o A5 -> RX o
o A6 SCL o
o 0 SDA o
o 1 MISO o
o ~2 SCK o
o ~3 MOSI o
o ~4 7 o
o ~5 6 o
----------------------

Vorbereitungen für die Praxis

Soweit zur Theorie, doch wie bewährt sich das Board in der Praxis? Um den MKR1000 aus der Arduino-IDE nutzen zu können, lässt sich über den Boards Manager die entsprechende Unterstützung aufspüren und laden Tools | Boards | Boards Manager. Unter "Arduino SAM Boards (32-Bit Cortex-M0) by Arduino" gibt es den passenden Treiber für die Boards Genuino/Arduino Zero und MKR1000.

Unter Mac OS X haben einige Nutzer in Foren Probleme bei der Erkennung des USB-Ports gemeldet, an dem der MKR1000 angeschlossen ist. Sollte ein Mac nicht den entsprechenden Port unter Tools | Ports anzeigen, erweist sich das Betätigen des Reset-Tasters auf dem Board zweimal kurz hintereinander als Ausweg, der in den meisten Fällen das Problem behebt.

Um das Board einem ersten Test zu unterziehen, bietet sich das unter File | Examples | Basics | AnalogReadSerial verfügbare Beispiel an, das über den seriellen Monitor zufällige Werte ausgibt. Zufällig deshalb, weil sich die Werte durch Auslesen des analogen Eingangs A0 ergeben. Ohne Anschluss einer Komponente entstehen dort Signalfluktuationen.

Ein kleiner Hinweis am Rande: Die Onboard-LED des MKR1000 befindet sich am Digital-Port 6 statt 13 bei Arduino Uno und Mega. Das obligatorische Blink-Programm benötigt deshalb eine Anpassung.

Mobil machen

Zum Betrieb des MKR1000 im WLAN ist die Bibliothek WiFi101 von der GitHub-Seite erforderlich. Die heruntergeladene ZIP-Datei lässt sich der IDE folgendermaßen bekanntmachen: Sketch | Include Library | Add .ZIP Library.

Nach der Installation der Bibliothek ist ein Probelauf empfehlenswert. Ein passender Sketch für WLANs mit WPA findet sich zum Beispiel unter File | Examples | WiFi101 | ConnectWithWPA. Für die aus Sicherheitsgründen nicht ratsame Nutzung des WEP-Protokolls steht alternativ der Sketch "ConnectWithWEP" zur Verfügung.

Im folgenden Code müssen Entwickler die konkreten Zugangsdaten (SSID, Passwort) des eingesetzten WLANs eintragen:

...
by Tom Igoe
*/
#include <SPI.h>
#include <WiFi101.h>
char ssid[] = "Network";         // network SSID (name)
char pass[] = "secretPassword"; // network password
int status = WL_IDLE_STATUS; // the Wifi radio's status
...

Im nächsten Schritt erfolgt der Upload des Sketches auf das Board, das im seriellen Monitor einen erfolgreichen Verbindungsaufbau oder Fehler meldet.

Die Ausgabe sollte ähnlich wie die folgende aussehen:

Attempting to connect to WPA SSID: StalWLAN
You're connected to the networkSSID: StalWLAN
BSSID: CA:B2:95:D7:96:8
signal strength (RSSI):-65
Encryption Type:2
IP Address: 192.168.178.97
192.168.178.97
MAC address: F8:F0:5:F5:DB:AB
SSID: StalWLAN
BSSID: CA:B2:95:D7:96:8
signal strength (RSSI):-62
Encryption Type:2