Microcontroller SAMD21 (XIAO) von Seeedstudio
In diesem Beitrag möchte ich dir den kleinen Microcontroller SAMD21 von der Firma Seeedstudio vorstellen.
Seeedstudio SAMD21 (XIAO)
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.
technische Daten des SAMD21
CPU
ARM Cortex-M0+-CPU(SAMD21G18)
Geschwindigkeit
bis zu 48 MHz
Speicher
Flash
256KB
SRAM
32KB
Schnittstellen
I²C, UART, SPI
digitale I/O Pins
11
analoge I/O Pins
11
Stromversorgung / USB Schnittstelle
USB Typ C
Betriebsspannung
3,3V / 5V DC
Abmaße (LxBxH)
20mm x 17mm x 3,5mm
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
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
Pinout des SAMD21
Zum vergrößern des Bildes, bitte auf das Bild klicken!
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
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
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
Im Geräte-Manager wird dieser bei mir als "Serielles USB-Gerät" angezeigt.
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.
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
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
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
"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
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
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.
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
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 - 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
Read the full article