In diesem ersten Beitrag zum Adafruit Feather M0 Express möchte ich dir diesen vielseitigen und leistungsstarken Mikrocontroller näher vorstellen. Egal ob du Einsteiger in der Mikrocontroller-Programmierung bist oder ein erfahrener Entwickler, der Feather M0 Express bietet dir alles, was du für kreative Projekte brauchst.
Ich werde dir einen Überblick über seine Features, Einsatzmöglichkeiten und Vorteile geben – und dir zeigen, warum dieser Mikrocontroller in Verbindung mit CircuitPython eine ideale Wahl für schnelle und einfache Projekte ist.
Disclaimer: Der Adafruit Feather M0 Express, über den ich in diesem Beitrag berichte, war Teil des FeatherWing Kits, das mir von der Firma Würth Elektronik zu einem stark vergünstigten Preis für ein Review zur Verfügung gestellt wurde. Meine Meinung und Bewertung des Produkts bleiben jedoch unabhängig und ehrlich.
Falls du Interesse an diesem Mikrocontroller hast, kannst du ihn auch einzeln in vielen gängigen Elektronik-Shops erwerben.
Inhaltsverzeichnis
- Aufbau des Mikrocontrollers – Adafruit Feather M0 Express
- Bezug des Mikrocontrollers
- Flashen des Mikrocontrollers für die Programmierung in CircuitPython
- MU – Editor zum Programmieren in CircuitPython
- Auslesen / anzeigen der verfügbaren Pins
- SMD LED am Pin D13 programmieren
- NeoPixel programmieren
- Ausblick
Aufbau des Mikrocontrollers – Adafruit Feather M0 Express
Nachfolgend zunächst die technischen Daten des Mikrocontrollers:
Eigenschaft | Details |
---|---|
Abmessungen | 51 mm x 23 mm x 8 mm (ohne angelötete Header) |
Gewicht | 5 g (leicht wie eine große Feder) |
Prozessor | ATSAMD21G18 @ 48MHz mit 3.3V Logik/Spannung |
Speicher | 256 KB Flash, 32 KB RAM |
EEPROM | Nicht vorhanden |
Taktgeber | 32.768 KHz Kristall für Uhr- und RTC-Generierung |
Spannungsregler | 3.3V mit bis zu 500mA Spitzenstromausgabe |
USB-Unterstützung | Native USB-Unterstützung mit Bootloader und serieller Debugging-Schnittstelle |
GPIO-Pins | 20 GPIO-Pins |
Schnittstellen | Hardware-Serial, I2C, SPI |
PWM-Ausgänge | PWM auf allen Pins |
Analoge Eingänge | 6 x 12-Bit Analog-Eingänge |
Analog-Ausgang (DAC) | 1 x 10-Bit Analog-Ausgang |
Lipo-Ladefunktion | Eingebauter 100mA LiPo-Lader mit Lade-LED |
LED | Pin #13 rote LED für allgemeine Blinkzwecke |
Energieverwaltung | Power-/Enable-Pin |
Befestigungsmöglichkeiten | 4 Montageschraubenlöcher |
Reset-Taste | Vorhanden |
Dieser Mikrocontroller vereint viele nützliche Features in einem kleinen Formfaktor und eignet sich perfekt für eine Vielzahl von Anwendungen, von Prototyping bis hin zu fertigen Projekten.
Was diesem Mikrocontroller jedoch fehlt, sind drahtlose Schnittstellen wie Bluetooth oder WiFi. Das solltest du bei der Planung deiner Projekte berücksichtigen. Glücklicherweise lassen sich solche Funktionen einfach nachrüsten, beispielsweise durch kompatible Erweiterungen wie FeatherWings oder externe Module. Dies eröffnet dennoch eine hohe Flexibilität für verschiedenste Anwendungen.
Pinout des Feather M0 Express von Adafruit
Auf der offiziellen englischen Seite zum Adafruit Feather M0 Express findest du eine sehr ausführliche Auflistung aller Features, hier möchte ich dir zunächst das Pinout präsentieren.
Features des Adafruit Feather M0 Express
Der Adafruit Feather M0 Express zeichnet sich durch mehrere beeindruckende Features aus, die ihn zu einer äußerst vielseitigen Plattform für Elektronikprojekte machen. Zwei besondere Eigenschaften heben ihn dabei hervor:
- Integrierter Anschluss für LiPo-Batterien
Der Feather M0 Express verfügt über einen Anschluss für LiPo-Batterien, was ihn ideal für mobile und unabhängige Projekte macht. Zusätzlich bietet der Mikrocontroller eine integrierte Ladefunktion, mit der die angeschlossene Batterie bequem über USB aufgeladen werden kann. Damit ist der Feather perfekt für batteriebetriebene Anwendungen geeignet, ohne dass zusätzliche Ladegeräte erforderlich sind. - Feld für individuelle Erweiterungen
Auf dem Board befindet sich ein spezielles Feld, auf dem du Module oder Sensoren direkt auflöten kannst. Dieses Feature erlaubt es dir, den Mikrocontroller genau an deine Bedürfnisse anzupassen, sei es durch das Hinzufügen von Sensoren, drahtlosen Schnittstellen oder anderen Komponenten. Durch diese Flexibilität wird der Feather M0 Express zu einer universellen Plattform, die sowohl für Prototyping als auch für dauerhafte Projekte eingesetzt werden kann.
Mit diesen Eigenschaften ist der Feather M0 Express nicht nur leistungsstark, sondern auch extrem anpassbar und vielseitig einsetzbar – perfekt für alle, die maßgeschneiderte Lösungen suchen.
Erweiterung der drahtlosen Kommunikation
Der Adafruit Feather M0 Express verfügt ab Werk nicht über drahtlose Schnittstellen wie Bluetooth oder WiFi, was ihn für IoT-Anwendungen nur bedingt geeignet macht. Allerdings lässt sich diese Einschränkung mit einfachen Mitteln beheben:
Ein serielles Bluetooth-Modul, wie das beliebte HC-06, kann unkompliziert angeschlossen werden, um die fehlende Bluetooth-Funktionalität zu ergänzen. Mit dieser Erweiterung lässt sich der Mikrocontroller problemlos in drahtlose Kommunikationsszenarien integrieren und für IoT-Projekte aufrüsten.
Diese Anpassungsmöglichkeit zeigt die Flexibilität des Feather M0 Express und erlaubt es, ihn je nach Projektanforderungen zu erweitern.
Bezug des Mikrocontrollers
Diesen Mikrocontroller kannst du, wie bereits erwähnt, über die gängigen Elektronikshops wie Amazon.de, eBay.de und andere Plattformen beziehen. Da der Adafruit Feather M0 Express bereits seit einigen Jahren auf dem Markt erhältlich ist, ist er mittlerweile auch zu einem sehr erschwinglichen Preis verfügbar. Das macht ihn besonders attraktiv, für Hobbyisten und Entwickler, die leistungsstarke Hardware zu einem günstigen Preis suchen.
- amazon.de* – 33,96 €
- ebay.de* – 33,97 €
- adafruit.com – 19,95 $ (ca. 19,15 €)
- paradisetronic.com – 29,97 €
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!
Flashen des Mikrocontrollers für die Programmierung in CircuitPython
Im ausgelieferten Zustand war dieser Mikrocontroller nicht vorgeflasht, und ich musste zunächst eine Firmware installieren. Glücklicherweise ist dies denkbar einfach und erfordert keine zusätzlichen Tools. Du lädst einfach eine UF2-Datei von der offiziellen Webseite herunter, kopierst sie auf das Board, und schon ist die Firmware installiert – einfacher geht’s nicht! 😊
Um den Mikrocontroller in den Flash-Modus zu versetzen, musst du die RESET-Taste zweimal schnell hintereinander drücken. Wenn dies erfolgreich war, sollte ein neues Laufwerk im Datei-Explorer deines Computers angezeigt werden. Über dieses Laufwerk kannst du dann die benötigte UF2-Datei einfach per Drag-and-Drop kopieren, um die Firmware zu installieren.
Download der passenden UF2 Datei
Die Firmware findest du unter https://circuitpython.org/downloads, wenn du nach der Bezeichnung des Mikrocontrollers suchst.
Wenn du deinen passenden Mikrocontroller ausgewählt hast, dann kannst du auf der neuen Seite die aktuelle Version von CircuitPython herunterladen.
Diese Datei kopierst du nun einfach in das Laufwerk “Featherboot” und der Mikrocontroller wird sofort geflasht und neu gestartet.
MU – Editor zum Programmieren in CircuitPython
Für die Programmierung verwende ich dieses Mal den MU – Editor, diesen bekommst du kostenfrei für Windows, macOS und Linux unter https://codewith.mu/en/download.
Du kannst diese kleine, aber leistungsstarke Entwicklungsumgebung ebenso für andere Mikrocontroller und Python ähnliche Programmiersprachen nutzen.
Ausführen von Code im Modus CircuitPython
Im CircuitPython-Modus wirst du feststellen, dass es keine Schaltfläche zum Ausführen von Code gibt. Stattdessen wird der aktuelle Code automatisch ausgeführt, sobald die Datei gespeichert wird.
Allerdings ist dieses Feature nicht ganz fehlerfrei: Wenn du die IDE neu startest, wird die zuletzt bearbeitete Datei zwar wieder geöffnet und angezeigt. Änderungen, die du daran vornimmst und speicherst, werden zwar übernommen, aber der Code wird nicht ausgeführt. Um dieses Problem zu umgehen, musst du die Datei zunächst schließen und erneut direkt vom Mikrocontroller öffnen. Das stellt sicher, dass deine Änderungen korrekt ausgeführt werden.
Auslesen / anzeigen der verfügbaren Pins
Damit wir die diversen Pins ansprechen können, benötigen wir das Modul board. Dieses bietet einen direkten Zugriff auf die Pins, jedoch sind diese von Mikrocontroller zu Mikrocontroller unterschiedlich. Über die Schaltfläche Seriell öffnen wir einen neuen Reiter, wo wir zum REPL gelangen. Um den Modus zu verlassen, musst du die Tastenkombination Strg+D betätigen!
Eine REPL (Read-Eval-Print-Loop), auch bekannt als interaktive Konsole oder Programmiershell, ist eine einfache Umgebung für Programmierung. Hier kannst du einen Befehl eingeben, der sofort ausgeführt wird, und die Antwort wird dir direkt angezeigt. Programme in einer REPL werden Schritt für Schritt ausgeführt.
Zunächst importieren wir das Modul board, und geben anschließend mit dem Befehl dir die Pins aus.
Adafruit CircuitPython 9.2.1 on 2024-11-20; Adafruit Feather M0 Express with samd21g18
>>> import board
>>> dir(board)
['__class__', '__name__', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'BATTERY', 'D0', 'D1', 'D10', 'D11', 'D12', 'D13', 'D5', 'D6', 'D9', 'I2C', 'LED', 'MISO', 'MOSI', 'NEOPIXEL', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART', 'VOLTAGE_MONITOR', '__dict__', 'board_id']
>>>
Dieses ist nun die Liste aller Pins, welche wird direkt ansprechen und verwenden können.
SMD LED am Pin D13 programmieren
Der Mikrocontroller verfügt über eine kleine, rote SMD LED am digitalen Pin D13, welche du frei programmieren kannst. Im ersten Beispiel möchte ich dir jetzt gerne zeigen, wie du diese zum Blinken bringen kannst.
# Modul für die Ansteuerung der GPIOs vom Board import board # Modul für das setzen des Typs des Pins import digitalio # aus dem Modul time die Funktion sleep importieren from time import sleep # Variable led mit definiertem Pin board.D13 led = digitalio.DigitalInOut(board.D13) # den difinierten Pin als Ausgang led.direction = digitalio.Direction.OUTPUT # starten einer Endlosschleife while True: # setzen des Status der LED # es wird ein umgekehrter Status zugewiesen led.value = not led.value # einlegen einer kleinen Pause von 0,5 Sekunden sleep(0.5)
NeoPixel programmieren
Das verbaute Neopixel dient als Indikator für den Upload von Code und den Zustand des Flash-Modus, zusätzlich kannst du diese aber auch frei programmieren. Dieses Bauteil ist über den Pin D8 oder der Bezeichnung NEOPIXEL erreichbar. Damit wir diese programmieren können benötigen wir jedoch zusätzlich das Modul NeoPixel von der Seite https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel/releases als ZIP-Datei herunterladen können.
Aus der ZIP-Datei entnehmen wir die Datei neopixel.mpy welche wir in den Ordner /lib auf dem Mikrocontroller kopieren. (ggf. ist bereits eine Datei vorhanden, welche wir einfach überschreiben)
Mit dem NeoPixel-Modul kannst du LED-Stripes programmieren, die aus vielen einzelnen NeoPixel-LEDs bestehen können. Auf dem Adafruit Feather M0 Express ist jedoch nur eine einzelne NeoPixel-LED verbaut. Daher übergeben wir beim Initialisieren der NeoPixel-Instanz einfach die Zahl 1, da wir nur mit dieser einen LED arbeiten. Im späteren Code wählen wir den ersten Eintrag im Array aus, um die LED zu steuern.
Bei der Objektinstanziierung legen wir auch die Helligkeit fest. Für das Video verwende ich den Wert 0.3, was ausreicht, damit die Kamera die NeoPixel-Farben gut aufnimmt.
Die RGB-Werte werden als Tupel im Format (Rot, Grün, Blau) übergeben. Die Werte reichen von 0 (aus) bis 255 (maximale Helligkeit). Wenn du eine bestimmte Farbe auswählen möchtest, kannst du den ColorPicker auf der Seite RapidTables nutzen. Dort kannst du Farben mischen und die entsprechenden RGB-Werte einfach kopieren.
# Importieren der benötigten Module import board # Enthält Board-spezifische Definitionen import time # Ermöglicht das Verwenden von Zeitfunktionen import neopixel # Modul für die Steuerung von NeoPixel-LEDs # Initialisieren der NeoPixel-LED auf dem Board neopixels = neopixel.NeoPixel( board.NEOPIXEL, # Pin, an dem die NeoPixel-LED angeschlossen ist 1, # Anzahl der LEDs (hier nur eine LED) brightness=0.3, # Helligkeit der LED (Skala von 0.0 bis 1.0) auto_write=False # Verhindert automatisches Aktualisieren; muss explizit aufgerufen werden ) # Definition der Farben als RGB-Tupel blau = (0, 0, 255) # Blau: Rot = 0, Grün = 0, Blau = 255 aus = (0, 0, 0) # Aus: Alle Farben auf 0 # Endlosschleife zum Blinken der LED while True: neopixels[0] = blau # Setzt die LED auf Blau neopixels.show() # Zeigt die eingestellte Farbe an time.sleep(0.5) # Wartet 0,5 Sekunden neopixels[0] = aus # Schaltet die LED aus neopixels.show() # Aktualisiert die LED, um sie auszuschalten time.sleep(0.5) # Wartet 0,5 Sekunden
Ausblick
Dies war nur der erste Einblick in die Möglichkeiten des Adafruit Feather M0 Express. In den kommenden Beiträgen werde ich tiefer in die Programmierung mit CircuitPython eintauchen und dir Schritt für Schritt zeigen, wie du den Mikrocontroller im MU Editor programmierst.
Außerdem werde ich darauf eingehen, wie du den Feather M0 Express speziell für IoT-Projekte aufrüsten und optimieren kannst. Von der Integration drahtloser Module bis hin zur Nutzung von Cloud-Diensten – es erwarten dich spannende Themen.
Bleib also dran und sei gespannt auf weitere Tutorials und Projekte! 🚀