Kategorie: Allgemein

  • Januar 2025

    Ein kleiner Braindump vom Januar 2025.

    Blobbadge und Embedded Rust

    Auf dem 38c3 habe ich das Blobbadge von Rough Rat electronics entdeckt, welches auf dem etwas obskuren PY32F002 Mikrocontroller basiert und eine Firmware in Rust mit Embassy verwendet. Rust möchte ich schon länger lernen, und von Embassy hatte ich kurz vorher im Talk Liberating Wi-Fi on the ESP32 gehört!

    Also habe ich angefangen, ein bisschen Rust zu lernen und bin ziemlich fasziniert von der Idee, Mikrocontroller asynchron zu programmieren. Macht eigentlich total Sinn, so häufig wie man nach einer Aktion z.B. auf einen Interrupt warten muss.

    Nachdem ich mich durch die ersten paar Kapitel The Rust Programming Language gekämpft habe, habe ich ein paar Beispiele für ein ESP32-C3 Dev-Board, dass ich aus einem alten Zigarettenautomaten habe, der auf dem 38c3 stand, zusammengebastelt. Den Code habe ich mit probe-rs geflasht, was ich vorher auch noch nicht kannte. Ziemlich cool, dass man jetzt einfach direkt per USB mit einem einfachen Tool den Mikrocontroller flashen und in VSCode debuggen kann, das ging mit ATMega8-Arduinos noch nicht!

    Danach habe ich die Firmware fürs Blobbadge kompilliert und versucht, mit probe-rs und einem DAPLink, den ich auf dem 38c3 geschenkt bekommen habe, zu flashen. Dazu habe ich zuerst versucht, einen 3D gedruckten Programmier-Clip zu verwenden. Leider hatte der keinen guten Kontakt, vielleicht lag es aber auch am Programmer oder den fehlenden Pogo Pins.

    Also habe ich ein bisschen zu kleine Federprüfspitzen besorgt und in Fusion 360 eine experimentelle Fixture zusammengebastelt, die ich dann 3D gedruckt habe. Die Konstruktion mit dem Gummiband ist allerdings noch nicht ganz optimal!

    Leider hat sich herausgestellt, dass der Programmer unter macOS nicht mit probe-rs funktioniert. Ich hab mir dann auf einem alten Laptop Ubuntu installiert, wo probe-rs und der Programmer problemlos zusammenarbeiten. Nach ein bisschen Debugging konnte ich dann ein Issue für probe-rs eröffnen. Für einen Bugfix fehlte es mir dann doch noch ein bisschen an Rust-Kenntnissen.

    PCB Design

    Die Badges vom c3 haben mich dazu motiviert, auch endlich mal wieder KiCad zu installieren und zu versuchen, ein einfaches Badge zu designen!

    Meine Idee war, als ersten Versuch Marbles Geheimbadge auf die Größe vom Blobbadge zu schrumpfen und ein kleines 4x4cm PCB in Herz-Form mit RGB LEDs zu bestücken. Nach endloser Recherche, wie ich am besten winzige WS2812 RGB LEDs mit 3.3V angesteuert bekomme (Antwort: Step-Up-Konverter), oder alternativ mit Shift-Registern / LED-Treibern einfache mini RGB LEDs verwenden kann, habe ich mich dazu entschieden, erstmal einfach rote LEDs mit Charlieplexing auszuprobieren.

    Anhand von dem Board konnte ich den ganzen Prozess von Idee über Bauteilrecherche, Schematic erstellen, Bauteil-Import, Bauteile platzieren, Routing bis zum Export für die Fertigung bei JLCPCB ausprobieren. Bestellt habe ich die Boards allerdings nicht!

    Artistic PCB Design

    Louisa hat mich gefragt, ob wir noch einen Arduino MIDI-Controller bauen können!

    Das hat mich natürlich an die Badges erinnert und den Drawing with circuits – creating functional and artistic PCBs together-Talk vom 38c3. Wir haben dann einen Nachmittag lang gebrainstormt und tausend Ideen gesammelt, wie man mal zusammen ein paar interessante MIDI-Controller und so bauen könnte!

    Besonders interessant fände ich, einen MIDI-Controller mit Touch-Flächen zu bauen. Darauf gekommen bin ich übers Touchwheel vom Tangara, den ich natürlich auch auf dem 38c3 entdeckt habe.

    CH32

    Bei der Recherche nach interessanten, günstigen Mikrocontrollern bin ich auch auf die WCH CH32 Reihe gestoßen, die RISC-V als Architektur verwendet. Da Teufelchen seit Jahren davon erzählt, wie cool RISC-V ist, und letztens einen RISC-V Emulator released hat, habe ich mir ein CH32V003 Dev-Board und Programmer besorgt und mit MounRiver Studio und danach mit ch32-hal ausprobiert.

    Ich hatte noch nicht so viel Zeit mich im Detail mit dem Chip zu beschäftigen, wie beim PY32 ist es aber super interessant, wie viel mit ultra günstigen Mikrocontrollern inzwischen out of the box geht!

    Außerdem habe ich herausgefunden, dass sich der WCH-Link Programmer auch als SWD-Programmer nutzen lässt, mit dem ich mit probe-rs erfolgreich unter macOS das Blobbadge programmieren konnte!

    Geheimbadge

    Marble hat zum 38c3 ein paar Geheimbadges mitgebracht. Da das Geheimbadge mit einem anderen ESP32-Modul als ursprünglich geplant gefertigt wurde, mussten wir auf dem 38c3 noch einige Kupferlackdraht-Verbindungen einlöten. Den Lackdraht haben wir von Rough Rat geschenkt bekommen, worüber ich überhaupt erst aufs Blobbadge gekommen bin!

    Das Geheimbadge basiert auf einem ESP32-C6 und hat integriertes Power Management zum Laden einer 3.7V LiPo-Batterie, 3.3V Step-Down für den ESP32 und 5V Step-Up für RGB LEDs. Auf dem Badge läuft Micropython.

    Da Marble von Bluetooth Low Energy und Micropython schwärmt, habe ich mich zuhause damit noch weiter beschäftigt und versucht, mit aioble Marbles BLE UART nachzubauen. Wie sich herausstellt, kann man auch mit Micropython asynchron Mikrocontroller programmieren, nur ohne die anstrengende Rust-Syntax! Bluetooth Low Energy hat eine ziemlich ähnliche Strukturierung wie LwM2M und Zigbee, was ich interessant fand, und lässt sich sehr leicht mit Web Bluetooth im Browser verwenden.

    Harz

    Ich war ein Wochenende mit Freunden in Hohegeiss im Harz. Anders als letztes Jahr im Januar lag zwar nicht genug Schnee zum Rodeln, es war aber trotzdem ein sehr schönes Wochenende! Leider sind meine Wanderstiefel nicht mehr ganz dicht und ich hab ziemlich nasse Füße bekommen.

    Micropython LoRaWAN Stack

    Irgendwie hat mich die ganze ESP32-Micropython-Thematik an meine LoRaWAN Gartensensoren erinnert. Also habe ich auf ein Heltec WiFi LoRa 32 V3 Micropython geflasht und angefangen, mit der Micropython LoRa-Library zu experimentieren.

    Auf GitHub habe ich ein paar alte Versuche gefunden, einen LoRaWAN-Stack mit Micropython zu implementieren, die offenbar alle aufeinander aufbauen.

    Also habe ich den Code von CircuitPython-LoRaWAN genommen und für Micropython umgebaut, indem ich möglichst alles durch Micropython-Bibliotheken und Funktionen ersetzt habe. Außerdem habe ich mich mit dem LoRaWAN 1.0.4 Standard beschäftigt um den Code anzupassen, sodass er standardkonformer ist.

    Der Stack funktioniert bisher überraschend gut mit dem The Things Network! Anders als meine bisherigen Versuche mit LMIC und Radiolib habe ich das Gefühl, dass die Micropython-Implementierung es mir sehr viel einfacher macht, LoRaWAN zu verstehen und den Stack selber anzupassen.

    Zum LoRaWAN-Micropython-Stack schreibe ich demnächst noch einen Beitrag und lade den Code auf Github hoch.