Microcontroller SAMD21 (XIAO) von Seeedstudio

In diesem Beitrag möchte ich dir den kleinen Microcontroller SAMD21 von der Firma Seeedstudio vorstellen.

Seeedstudio SAMD21 (XIAO)
Seeedstudio SAMD21 (XIAO)

Bezug des SAMD21

Den SAMD21 habe ich über aliexpress.com für knapp 5€ inkl. Versandkosten erstanden. Du findest diesen aber auch auf ebay.de für einen Preis von 6€ zzgl. Versandkosten.

Lieferumfang

Zum Lieferumfang gehört neben dem Microcontroller zwei kleine 7 polige Stiftleisten noch 3 Aufkleber welche die Pinbelegung des SAMD21 aufzeigt.

Lieferumfang des SAMD21
Lieferumfang des SAMD21

technische Daten des SAMD21

CPUARM Cortex-M0+-CPU(SAMD21G18)
Geschwindigkeitbis zu 48 MHz
Speicher 
Flash256KB
SRAM32KB
SchnittstellenI²C, UART, SPI
digitale I/O Pins11
analoge I/O Pins11
Stromversorgung / USB SchnittstelleUSB Typ C
Betriebsspannung3,3V / 5V DC
Abmaße (LxBxH)20mm x 17mm x 3,5mm

Aufbau

Auf der Vorderseite des Microcontrollers sind neben den beiden SMD LEDs auch die Lötpunkte für den RESET Taster angebracht.

aktive LEDs auf der Vorderseite des SAMD21
aktive LEDs auf der Vorderseite des SAMD21

Auf der Rückseite findest du die Beschriftung der Pins sowie weitere Lötpunkte für die Stromversorgung und die SPI Kontakte.

Rückseite des XIAO SAMD21 mit Pinbeschriftung
Rückseite des XIAO SAMD21 mit Pinbeschriftung

Pinout des SAMD21

Zum vergrößern des Bildes, bitte auf das Bild klicken!

Pinout des Microcontroler SAMD21 (XIAO) von Seeedstudio
Pinout des Microcontroler SAMD21 (XIAO) von Seeedstudio

Auf der Rückseite des SAMD21 sind 6 Lötpunkte von welchen 2 mit jeweils „VIN“ für die Spannungsversorgung (ohne USB betrieb) und „GND“ beschriftet sind, die anderen 4 Lötpunkte sind nicht beschriftet.

Pinout des SAMD21 auf der Rückseite
Pinout des SAMD21 auf der Rückseite

LEDs auf dem SAMD21

Auf dem SAMD21 sind vier SMD LEDs verbaut welche mit den Buchstaben P, R, L & T beschriftet sind.

Was die Buchstaben bedeuten kannst du aus der nachfolgenden Grafik entnehmen.

SMD LEDs am SAMD21 XIAO
SMD LEDs am SAMD21 XIAO

Die interne LED kannst du über den Pin D13 ansteuern (siehe Beispiel „interne LED blinken lassen„).

Einrichten auf dem Computer

Der Microcontroller verfügt über eine USB Typ C Schnittstelle und wird mit einem entsprechenden Kabel (nicht im Lieferumfang enthalten) mit dem Computer verbunden. Unter Microsoft Windows 10 wird dieser als „Seeed femto M0“ erkannt und eingerichtet.

MS Windows 10 - Gerät "SAMD21" eingerichtet
MS Windows 10 – Gerät „SAMD21“ eingerichtet

Im Geräte-Manager wird dieser bei mir als „Serielles USB-Gerät“ angezeigt.

Windows 10 - Geräte-Manager mit eingerichtetem SAMD21 am COM5
Windows 10 – Geräte-Manager mit eingerichtetem SAMD21 am COM5

Einrichten von CircuitPython

Auf diesem kleinen Zwerg kannst du mit der Skriptsprache Python bzw. MicroPython programmieren. Dafür musst du jedoch zunächst die Firmware einrichten. Das ist recht einfach und in wenigen Schritten erledigt.

SAMD21 - einrichten von CircuitPython
Dieses Video ansehen auf YouTube.

Gehe zunächst auf die Seite https://circuitpython.org/board/seeeduino_xiao/ und lade dir die ca. 360 KB große Datei „adafruit-circuitpython-seeeduino_xiao-de_DE-6.0.1.uf2“ herunter. Wenn du diese Datei heruntergeladen hast, dann musst du deinen SAMD21 mit dem Computer verbinden (soweit noch nicht geschehen) und dir ein kurzes Breadboardkabel mit Steckern besorgen und deinen Windows Explorer öffnen.

Auf der Vorderseite sind zwei Lötpunkte mit der Beschriftung „RST“ versehen diese musst du nun zwei mal kurz Verbinden / Kurzschließen. Es sollte nun ein zusätzliches Laufwerk „Arduino“ angezeigt werden. In dieses Laufwerk kopieren wir nun die heruntergeladene *.uf2 Datei wobei danach das Laufwerk wieder „verschwindet“ und kurz darauf der Microcontroller als „Seeedstudio XIAO“ erkannt wird und das Laufwerk „CIRCUITPY“ angezeigt wird. 

Eigenschaften des Laufwerks "CIRCUITPY" unter Windows 10
Eigenschaften des Laufwerks „CIRCUITPY“ unter Windows 10

In dieses Laufwerk können wir nun unsere Python Datei kopieren welche sofort ausgeführt wird.

Download und Installation vom Editor Mu

Für die Programmierung auf dem SAMD21 kannst du den kostenfreien Editor „Mu“ verwenden. Diesen Editor kannst du unter https://codewith.mu/en/download für Windows bzw. Mac herunterladen.

Ich verwende einen MS Windows 10 PC mit 64bit und lade mir somit die Version „Windows 64-bit“ herunter. Solltest du ein 32bit System verwenden oder nicht genau wissen ob du ein 64 oder 32bit System hast, so empfehle ich dir die 32bit Version welche auf beiden Systemen reibungslos laufen sollte.

Nachdem die ca. 65 MB große Datei heruntergeladen wurde muss diese mit einem Doppelklick geöffnet werden. Es startet dann nach einer kurzen Abfrage der Installer.

erster Start des Editors Mu

Wenn die Installation abgeschlossen ist, dann kann der Editor gestartet werden. Und zunächst wird man aufgefordert einen Modus wählen.

Editor Mu - wählen des Modus
Editor Mu – wählen des Modus

In unserem Fall wählen wir aus der Liste den Eintrag „CircuitPython“ und bestätigen die Auswahl mit der Schaltfläche „OK“.

Wenn dein Microcontroller bereits mit dem Computer verbunden ist dann kannst du quasi sofort loslegen, ansonsten erscheint ein Dialog welcher darauf hinweist das kein Gerät verbunden ist.

Editor Mu - kein Gerät gefunden
Editor Mu – kein Gerät gefunden

„Hello World!“ mit dem Editor Mu auf dem SAMD21

Wollen wir nun unser erstes kleines Stück Code mit dem Editor Mu schreiben und auf den SAMD21 ausführen. Zunächst wollen wir den einfachen kleinen Text „Hello World!“ auf der seriellen Schnittstelle ausgeben.

Dazu schreiben wir

print("Hello World!")

und speichern die Datei als „code.py“ auf dem Laufwerk „CIRCUITPY“ ab. 

Der Editor Mu liefert zwar die Schaltfläche „Serial“ aber leider erscheint dort immer nur eine Fehlermeldung, somit müssen wir uns anderweitig behelfen. Ich nutze hier die kostenfreie Software Putty mit welcher man sich ebenso mit dem Microcontroller verbinden kann.

Putty - Konfiguration für den SAMD21
Putty – Konfiguration für den SAMD21

Wichtig ist das die Baudrate / Speed auf 115200 eingestellt wird und das der COM-Port passt. Ggf. kannst du unter Windows im Geräte-Manager prüfen an welchem COM-Port dein Gerät erkannt wurde.

Wenn das korrekt eingestellt ist kann die Verbindung mit der Schaltfläche „OK“ aufgebaut werden.

Es erscheint dann unsere Ausgabe auf dem Terminalfenster von Putty. Und jedesmal wenn wir am Code etwas ändern und im Editor Mu die Datei speichern wird der Code ausgeführt und das Fenster aktualisiert sich automatisch.

alternative über die Arduino IDE

Wenn dir Putty etwas zu umständlich ist, kannst du auch den seriellen Monitor aus der Arduino IDE nutzen. Zunächst musst du unter dem Menüpunkt „Werkzeuge“ den Port des SAMD21 auswählen und startest den seriellen Monitor über die Lupe oben rechts, oder der Tastenkombination „Strg+Umschalt+M“. 

Editor "MU" mit Ausgabe der Daten im seriellen Monitor der Arduino IDE
Editor „MU“ mit Ausgabe der Daten im seriellen Monitor der Arduino IDE

Der Code erzeugt nun alle 0,5 Sekunden eine Ausgabe auf der seriellen Schnittstelle welche von dem seriellen Monitor der Arduino IDE auf dem Bildschirm ausgegeben wird.

Beispiele mit dem SAMD21

Nachdem wir nun den SAMD21 eingerichtet und das erste kleine „Hallo Welt!“ Programm auf diesem ausgeführt haben möchte ich dir nun ein paar kleine Beispiele zeigen welche du mit diesem Programmieren kannst.

Ich habe die Pinleisten auf der Rückseite angelötet dieses ist entgegen der bekannten Richtung, das liegt vielmehr daran das der kleine Aufkleber garantiert nicht langlebig ist und somit die Pinbeschriftung auf der Rückseite sichtbar bleibt.

Ich habe dir bereits in einigen Beispielen gezeigt wie du mit MicroPython Sensoren & Aktoren auf einem Microcontroller ansteuern bzw. auslesen kannst. Mit CiruitPython funktioniert dieses sehr sehr ähnlich und damit unterscheidet sich die Programmierung nur sehr marginal in zbsp. den verwendeten Bibliotheken.

interne LED blinken lassen

Im nachfolgenden Beispiel möchte ich nun zeigen wie du die interne LED am digitalen Pin D13 im Intervall von 0,5 Sekunden blinken lassen kannst.

import time
import board
from digitalio import DigitalInOut, Direction 

# definieren des Pins
led = DigitalInOut(board.D13)
# definieren das der Pin als AUSGANG dient
led.direction = Direction.OUTPUT 

while True:
    # aktivieren der LED 
    led.value = True
    # eine Pause von 0,5 Sekunden
    time.sleep(0.5)
    # deaktivieren der LED
    led.value = False
    # eine Pause von 0,5 Sekunden
    time.sleep(0.5)

Video

 

LED Wechselblinken

Ein großer Vorteil des kleinen SAMD21 ist das dieser auf ein Breadboard gesteckt werden kann (wie auch der Wemos D1 Mini / Pro, Arduino Micro / Nano).

Aufbau der Schaltung

Für den Aufbau der Schaltung benötigst du:

  • 2x LED, 5mm,
  • 2x Widerstand, 220 Ohm,
  • 5x Breadboardkabel, 10cm, männlich-männlich,
  • 1x Breadboard 170 Pin,
  • und natürlich einen Microcontroller SAMD21 🙂
Schaltung – Wechselblinken am Microcontroller SAMD21

Quellcode

import time
import board
from digitalio import DigitalInOut, Direction 

# definieren des Pins
led1 = DigitalInOut(board.D5)
led2 = DigitalInOut(board.D6)

# definieren das der Pin als AUSGANG dient
led1.direction = Direction.OUTPUT 
led2.direction = Direction.OUTPUT 

while True:
    # aktivieren der LED1 & deaktivieren der LED2
    led1.value = True
    led2.value = False
    # eine Pause von 0,5 Sekunden
    time.sleep(0.5)
    # aktivieren der LED2 & deaktivieren der LED1
    led1.value = False
    led2.value = True
    # eine Pause von 0,5 Sekunden
    time.sleep(0.5)

Video

 

auslesen des Temperatursensors TMP36

Als nächstes möchte ich dir zeigen, wie du die Werte eines analogen Temperatursensors TMP36 auslesen und auf der seriellen Schnittstelle ausgeben kannst.

der analoge Temperatursensor TMP36

Der analoge Temperatursensor TMP36 verfügt über drei Pins an welche der Minuspol, der Pluspol (3,3V) sowie die Datenleitung angeschlossen wird.

Bezug

Den analogen Sensor kannst du bei ebay.de für bereits 1,5€ zzgl. Versandkosten erstehen. 

technische Daten des TMP36
  • Betriebsspannung: 2,7V bis 5,5V
  • Stromaufnahme: maximal 0,5 µA
  • Toleranz:  ±2°C
  • Messbereich: -40°C bis 125°C
Pinout des analogen Temperatursensors TMP36
Pinout des analogen Temperatursensors TMP36
Pinout des analogen Temperatursensors TMP36

Aufbau der Schaltung

Für den Aufbau der Schaltung benötigst du:

  • 1x analoger Temperatursensor TMP36,
  • 1x Breadboard, 170 Pin,
  • 3x Breadboardkabel, 10cm, männlich-männlich,
  • und natürlich einen Microcontroller SAMD21 🙂
Aufbau der Schaltung - Sensor TMP36 am SAMD21
Aufbau der Schaltung – Sensor TMP36 am SAMD21

 

Aufbau der Schaltung – SAMD21 mit Sensor TMP36

Quellcode

Den Quellcode habe ich von der Seite „TMP36 with CircuitPython“ von Adafruit Learning System und habe diesen „nur“ um Erläuterungen zum Quellcode sowie einigen kleineren Formatierungen der Ausgaben ergänzt.

import board
import analogio
import time

# Sensor TMP36 am analogen Pin A0 angeschlossen
TMP36_PIN = board.A0
tmp36 = analogio.AnalogIn(TMP36_PIN)

# Funktion zum berechnen der Temperatur
# Zu dieser Berechnung wird die Referenzspannung am
# Microcontroller verwendet, da der Sensor Stromabhängig
# die Temperatur misst benötigt man die Referenzspannung
def tmp36_temperature_C(analogin):
    millivolts = analogin.value * (analogin.reference_voltage * 1000 / 65535)
    return (millivolts - 500) / 10

# Endlosschleife
counter = 0;
while True:
    counter = counter + 1
    # lesen der Temperatur in Grad Celsius
    temp_C = tmp36_temperature_C(tmp36)
    # Umwandeln der Temperatur in Grad Fahrenheit
    temp_F = (temp_C * 9/5) + 32
    # Ausgeben der Temperatur
    print("#", str(counter), "\t" , "%03.2f" % temp_C , "°C", "|", "%03.2f" % temp_F, "°F")
    # eine Pause von 1 Sekunde
    time.sleep(1.0)

Video

serieller Plotter der Arduino IDE

Die Arduino IDE bietet neben dem seriellen Monitor zusätzlich auch einen seriellen Plotter welcher Zahlenwerte in einem Liniendiagramm anzeigen kann. Dabei muss man als erstes die Legende ausgeben und danach die Werte. 

Quellcode

Damit wir die Daten in dem Liniendiagramm anzeigen lassen können, müssen wir den Quellcode etwas modifizieren.

import board
import analogio
import time

# Sensor TMP36 am analogen Pin A0 angeschlossen
TMP36_PIN = board.A0
tmp36 = analogio.AnalogIn(TMP36_PIN)

# Funktion zum berechnen der Temperatur
# Zu dieser Berechnung wird die Referenzspannung am
# Microcontroller verwendet, da der Sensor Stromabhängig
# die Temperatur misst benötigt man die Referenzspannung
def tmp36_temperature_C(analogin):
    millivolts = analogin.value * (analogin.reference_voltage * 1000 / 65535)
    return (millivolts - 500) / 10

# Endlosschleife
while True: 
    columns = "Celsius Fahrenheit"
    temp_C = tmp36_temperature_C(tmp36)
    temp_F = (temp_C * 9/5) + 32
    print(columns)
    print("%03.2f" % temp_C ," ", "%03.2f" % temp_F)
    time.sleep(1.0)
Ausgabe
Ausgabe der Temperaturwerte im seriellen Plotter der Arduino IDE
Ausgabe der Temperaturwerte im seriellen Plotter der Arduino IDE

Die Legende wird aus den Texten gebildet welche auf der seriellen Schnittstelle gesendet werden, jedoch sendet der SAMD21 mehr als nur die im Quellcode gezeigten Texte. Dieses bewirkt das die Legende deutlich mehr enthält als sie es sollte.

Fazit

Den SAMD21 kannst du sehr einfach einrichten um auf diesen mit CircuitPython zu programmieren.
Die vorhandenen Pins sind sehr wenig aber durch der ebenfalls kleinen Abmessung geschuldet. Was ich nicht so schön finde ist das die Pin beschriftung nur unterhalb des Microcontrollers aufgedruckt ist und die Lösung mit dem Aufkleber doch recht unprofessionell wirkt. Aber für einen Preis von knapp 5€ (je nach Shop & Artikelstandort) muss man nun abstriche machen.

Auf der Seite https://www.seeedstudio.com/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html findest du weitergehende Informationen zu diesem Microcontroller. Jedoch werde ich in den nächsten Wochen einpaar kleine Projekte präsentieren welche du nachbauen kannst.

 

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.