In diesem Beitrag möchte ich dir den kleinen Microcontroller SAMD21 von der Firma Seeedstudio vorstellen.
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*.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
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 |
Aufbau
Auf der Vorderseite des Microcontrollers sind neben den beiden SMD LEDs auch die Lötpunkte für den RESET Taster angebracht.
Auf der Rückseite findest du die Beschriftung der Pins sowie weitere Lötpunkte für die Stromversorgung und die SPI Kontakte.
Pinout des SAMD21
Zum vergrößern des Bildes, bitte auf das Bild klicken!
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.
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.
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.
Im Geräte-Manager wird dieser bei mir als “Serielles USB-Gerät” angezeigt.
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.
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.
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.
“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.
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”.
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 🙂
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
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 🙂
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
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.