Browserbasierte Blockly-IDE für CircuitPython auf dem Cytron MAKER-PI-RP2040
makerSpaceOS ermöglicht es Kindern und Einsteigern, physische Elektronikprojekte zu programmieren – ohne eine einzige Zeile Code zu tippen. Per Drag & Drop werden bunte Blöcke zu einem Programm zusammengesteckt, das makerSpaceOS direkt in lauffähigen CircuitPython-Code übersetzt und über eine serielle Verbindung auf den Mikrocontroller überträgt.
Der Einstieg in Mikrocontroller-Programmierung scheitert oft an zwei Hürden: der Entwicklungsumgebung und der Syntax. makerSpaceOS beseitigt beides.
- Kein Setup: Die App läuft direkt im Browser – kein npm, kein Build-Schritt, keine Installation.
- Kein Tippen: Blöcke statt Syntax. Kinder im Grundschul- und Mittelschulalter können sofort loslegen.
- Echte Hardware: Der generierte Code läuft auf echtem CircuitPython, nicht auf einem Simulator. Was man baut, funktioniert wirklich.
- Deutsch: Alle Labels, Tooltips und Fehlermeldungen sind auf Deutsch – für den Einsatz im deutschsprachigen Unterricht oder Makerspaces.
Das Projekt entstand mit dem Ziel, ein Werkzeug zu schaffen, das in AGs, Schulstunden und Workshops ohne Vorkenntnisse sofort einsetzbar ist.
makerSpaceOS ist auf dieses Board zugeschnitten:
- RP2040-Chip (Dual-Core ARM Cortex-M0+, 264 KB RAM)
- Onboard: 2× Grove-kompatible I2C-Ports, 7× Grove-Ports (GPIO/ADC), 4× Motor-Treiber (DC + Servo), 2× RGB-NeoPixel, Piezo-Buzzer, programmierbare LEDs, USB-C
- CircuitPython-kompatibel: Wird als USB-Laufwerk (
CIRCUITPY) erkannt, Code einfach kopieren - Kinder-freundlich: Robuste Stecker, farbige Ports, kein Löten nötig
⚠️ Stromversorgung für die Motor-Treiber: maximal 6 Volt! Keine 9-V-Blöcke an den Versorgungseingang (VIN/Batterie-Anschluss) anschließen – das zerstört das Board. Geeignet sind z. B. 4× AA-Batterien (6 V) oder ein LiPo-Akku (3,7 V).
Bezugsquelle: Cytron oder gängige Elektronik-Distributoren (Mouser, Reichelt, …)
makerSpaceOS hat fertige Blöcke für folgende Komponenten:
| Kategorie | Komponenten |
|---|---|
| Temperatur & Feuchte | DHT22, DHT11, BMP280 |
| Abstand & Licht | HC-SR04 (Ultraschall), LDR (Fotowiderstand), BH1750 (Lux) |
| Digital-Sensoren | Taster, Hindernis, Liniensensor, Neigung, Magnetfeld, Flamme, Schall, Touch, Vibration |
| Analog (universell) | Analogeingang (0–65535), NTC-Temperaturfühler |
| Joystick & Encoder | Joystick (X/Y/Taster), Rotary Encoder |
| LED & Licht | Einzel-LED, Blink-LED, RGB-LED, 2-Farb-LED, NeoPixel |
| Ton | Passiver Buzzer (Frequenz), Aktiver Buzzer |
| Bewegung | Servo (Winkel), DC-Motor (vorwärts/rückwärts/stop) |
| Sonstiges | Relais |
Ein günstiges 37-teiliges oder 45-teiliges KY-Sensor-Set (z. B. „Elegoo Sensor Kit" oder vergleichbare Sets) deckt den Großteil der Blöcke ab.
Web Serial API wird benötigt – unterstützt von:
- Google Chrome (empfohlen)
- Microsoft Edge
Firefox und Safari werden nicht unterstützt.
- Visueller Editor mit Blockly (Drag & Drop)
- Live-Codegenerierung – CircuitPython-Code wird in Echtzeit angezeigt
- Direkt ausführen – Code wird per Web Serial Raw REPL auf das Board geladen und gestartet
- Board-Libs-Button – prüft, ob die Bibliotheken auf dem Board aktuell sind (🟢 „Libs aktuell" / 🔴 „Jetzt aktualisieren") und installiert sie bei Bedarf automatisch, inkl. Neustart
- UF2-Firmware-Button – flasht die Firmware aus dem Browser ins BOOTSEL-Laufwerk des Boards (
RP2040/RPI-RP2): Manifest-Check per SHA-256, chunkweises Schreiben mit Fortschritt, Schritt-für-Schritt-Fotos als Hilfe („So geht's") vor dem Flash, kein Brick-Risiko (der ROM-Bootloader ist über Mass Storage nicht überschreibbar) - Parallele Aktionen (Ereignis-Blöcke) – mehrere Stapel laufen gleichzeitig (z. B. eine Dauer-Animation und eine Sensor-Reaktion), ähnlich wie bei Lego Spike. Umgesetzt über kooperatives Multitasking mit
asyncio. - Serieller Monitor –
print()-Ausgaben des Boards live im Browser sehen - REPL-Eingabe – manuelle Befehle direkt ins Board schicken
- Keine Installation –
index.htmlim Browser öffnen, fertig
- Editor per lokalem Web-Server ausliefern, z. B.
python3 -m http.server 8001im Editor-Verzeichnis, undhttp://localhost:8001in Chrome oder Edge öffnen - Firmware installieren (nur bei leerem Pico): BOOTSEL gedrückt halten und per USB-C anstecken (das Laufwerk
RP2040/RPI-RP2erscheint) → „⚡ Firmware" im Header → Bootloader-Laufwerk wählen → Flashen. Der Bootloader verifiziert das UF2-Image (SHA-256-Prüfdaten aus dem generierten Manifest) und startet automatisch in die neue Firmware. - Board per USB-C anschließen (Normalbetrieb)
- Board einrichten – Header-Button „📦 Libs prüfen": Beim ersten Mal das Board-Laufwerk
CIRCUITPYwählen. Der Editor lädt danach alle benötigten Bibliotheken (makerspaceos.py,asyncio,adafruit_ticks, je nach Blöckenadafruit_dht,neopixel, …) perfetch()von dem Server herunter, der die Seite ausliefert, kopiert sie nachCIRCUITPY/lib/und startet das Board per serieller Verbindung neu – kein lokaler Repo-Checkout nötig, ein leeres Board wird so komplett bespielt. Der Button wird grün („Libs aktuell") – fertig. Liegt das Board nicht aktuell, wird der Button rot („Jetzt aktualisieren"). - Blöcke zusammenstecken
- ▶ Ausführen klicken → Browser fragt nach Zugriff auf den seriellen Port → Board auswählen
- Programm läuft auf dem Board; Ausgaben erscheinen im Seriellen Monitor
Ohne serialen Port / ohne File System Access API / Seite unter
file://geöffnet?lib/manuell oder perscripts/sync_lib.shaufCIRCUITPY/lib/kopieren und danach das Board neu starten (USB trennen & neu stecken).
index.html – Einstiegspunkt (keine Build-Pipeline nötig)
css/style.css – Dunkles Theme
js/
boards.js – Board-Profil & Pin-Konstanten
toolbox.js – Block-Kategorien & Toolbox-Definition
blocks/
control.js – SETUP- und FÜR-IMMER-Blöcke
events.js – Ereignis-Hut-Blöcke (parallele Aktionen)
blocks_db.js – generiert aus components/*.md (Sensor-/Aktor-Blöcke)
block_builder.js – registriert Blöcke aus blocks_db.js
generator.js – Blockly → CircuitPython Transpiler (asyncio-Multitask)
app.js – Workspace-Init & UI-Events
serial.js – Web Serial API (Raw REPL)
lib_manifest.js – generiertes lib/-Manifest (libVersion für den Board-Libs-Button)
board_setup.js – Board-Libs-Button: Versions-Check + lib/-Installation + Auto-Reboot
firmware_manifest.js – generierte UF2-Firmware-Liste (Name + Größe + SHA-256)
firmware_flash.js – UF2-Firmware-Dialog: BOOTSEL-Laufwerk wählen + verifiziertes Flashen
firmware/ – UF2-Images (Pico) + ESP32 .bin (nicht per UF2 flashbar)
- Phase 2.5 – Code direkt als
code.pyauf CIRCUITPY speichern (File System Access API) - Phase 3 – Projekte speichern/laden, Board-Auswahl
- Phase 4 – OLED-Display, weitere Sensoren, Notenblöcke, Lernmodus
Dieses Projekt ist für den Einsatz in Bildung und Maker-Communities gedacht. Lizenz folgt.