Hackerspace-FFM Badge
Aus Hackerspace Ffm
Inhaltsverzeichnis
Impressionen
- Badge Aufbau Impressionen vom Open Hackerspace Day
Basis
- ESP32-S3 Modul, entweder "Super Mini ESP32-S3" oder "ESP32-S3-Zero"
- 1,3 SH1106 / (SSD1306) OLED, 128x64 1bit via I2C
- CR123A 3V Zelle und Halter zur Versorgung
Aufbau mit Laufkarte
Besucher kaufen ein Badge und erhalten die Roh-PCB, beim Speaker-Add-On einen Speaker sowie eine Laufkarte:
- KID (ohne AUDIO): Datei:Laufkarte KID 4 x A6.odg
- AUDIO: Datei:Laufkarte AUDIO - 4 x A6.odg
- Reflow-Löten: Lotpaste wird aufgetragen, SMDs werden bestückt (bei Speaker-Add-On auch die Teile des Speaker-Bereichs), gelötet wird im Reflow-Ofen oder auf der heißen Platte
- Handlöten: Display-Connector, ESP-Modul, Neopixel, CR123 Halter, ggf. PCB-Patches, ggf. Speaker-Buchse werden per Hand gelötet
- Mechanischer Aufbau: Display einschrauben, PCB montieren, Neopixel platzieren, Halsband anbringen, ggf. Speaker montieren
- Programmieren: Grundprogram wird per USB-C eingespielt, Funktionen werden kontrolliert: Display, Neopixel, ggf. Speaker
- Testen: Batterie wird eingelegt: Test das Ein-Taster funktioniert und Touch Funktioniert
- Personalisieren: Name wird hinterlegt, Benutzergrafik (mit Name) kann erstellt und übertragen werden
Aufbaustationen
Damit mehrere Badges parallel aufgebaut werden können sind die Bauschritte auf Stationen verteilt:
- REFLOW-LÖTEN: Datei:Hackerspace-FFM Badge - REFLOW-LÖTEN.pdf
- HANDLÖTEN: Datei:Hackerspace-FFM Badge - HANDLÖTEN.pdf (Update)
- PROGRAMMIEREN: Datei:Hackerspace-FFM Badge - PROGRAMMIEREN.pdf
- DIES UND DAS
- MECHANIK: Datei:Hackerspace-FFM Badge - MECHANIK.pdf (Update)
Software / Funktionen
- Initialisierung
- Hardware-Erkennung wo das Display angeschlossen ist - darüber Pin-Zurordnung
- Neopixel auf ESP-Modul zur Fehlerausgabe
- Versorgungstransistor einschalten
- Auto-Power-Off Task starten
- Version + Logo + etc auf Display anzeigen für ein paar Sekunden
- Hauptschleife
- Augen animieren
- Alle X-Sekunden Namen bzw. Custom-Bild statt den Augen anzeigen
- Hin und wieder Neopixel aktivieren
- Touch Sensor: Verschiebt Augen etwas in die Richtung, wechselt Augenausdruck für ein paar Sekunden
- Bei Tastendruck Boot-0:
- Wifi starten und ggf Firmwareupdate holen von fixen Space-Server (kostet viel Energie!)
- Featuritis wenn jemand anderes mitprogrammiert oder viel Zeit bleibt:
- Per ESP-Now andere Badges in der Nähe finden und "begrüßen", dabei evtl. den Namen des gegenüber übertragen
- Wenn viel "getoucht" wird entsprechend reagieren mit den Augen (Tamagochi wird fröhlich oder genervt etc)
- Sounds ausgeben
- USB Funktionen
- Zur Zeit läuft USB noch im USB SERIAL(CDC)/JTAG Modus. Damit gehen nur genau zwei Sachen, die dafür aber recht gut:
- Serial.XXX landet alles auf dem virtuellen Serial-Port
- JTAG-Debuggen ist möglich (scheint in VSCode zu gehen, hilft aber nicht so arg viel)
- Flashen geht verhältnismäßig zuverlässig (wenn nicht: Boot gedrückt halten bei Reset geht immer)
- Light-Sleep kappt leider bereits auch hier die USB-Verbindung (nicht gut wenn man Strom/Batterie sparen will)
- Ein Umschalten auf den nativen USB-Modus (=USB OTG genannt) würde ermöglichen
- USB als Host sowie als Device benutzen
- Host: Anschluss Tastatur/Maus/USB-Stick etc
- Device: USB-Laufwerk (z.B. zur Konfiguration oder Firmwareupload .uf2)
- Serieller Port für Logs (aber vermutlich nicht so stabil)
- Video-Grabber: Displayinhalt könnte als "Webcam" gezeigt werden (sehr experimentel derzeit)
- Zur Zeit läuft USB noch im USB SERIAL(CDC)/JTAG Modus. Damit gehen nur genau zwei Sachen, die dafür aber recht gut:
Feature Wünsche / Ideen
- Volle CircuitPython Unterstützung und Integration in die CircuitPython-Bibliothek (Basis für ein Teil mit OLED könnte das sein)
- Arduboy Spiele portieren
- Benachbarte Badge finden
- Uhrzeit beim Start Syncen und dann Uhrzeit anzeigen
Konzept der Software und HackFFMBadge Bibliothek
Damit das Hauptprogram einfach zu schreiben ist, sind sehr viele Dinge in den Hintergrund ausgelagert.
Die HackFFMBadge Bibliothek kümmert sich um:
- Verfügung stellen des "HackFFMBadge"-Objekt, das auch über "Badge" angesprochen werden kann.
- Hardware-Erkennung des Badges:
- Alle Pinne werden automatisch zugeordnet - es muss aber ein OLED-Display richtig angeschlossen werden, denn daran richtet sich die Hardware-Erkennung
- Nicht so zuverlässig wird das schwarze "ESP32-S3 Super Mini" Modul vom blauen "ESP32-S3-Zero" Modul unterschieden allein auf Grund eines Spannungsteilers an GPIO3 (weshalb dort Touch nicht geht...)
- OLED Funktionen:
- Es steht ein "u8g2" zur Verfügung
- Displayauswahl derzeit über einen Eintrag in der platformio.ini
- Initialisierung des Displays, Logoanzeige beim Start
- Face Objekt:
- Ein fertig eingerichtetes Face-Objekt steht als Objekt-Member zur Verfügung, Zugriff über
- Entweder per "Badge.face().xxx"
- oder per "Badge.face_->xxx"
- Steht .faceActive auf true (automatisch nach .begin), dann wird das Face zumindest intern aktualisiert
- Der Aufruf von Badge.face().Draw(); bringt das aktuelle Face aufs Display - und sonst nichts.
- Der Aufruf von Badge.face().UpdateBuffer(); zeichnet das aktuelle Face in den u8g2-Buffer, der aber vorher mit u8g2.clearBuffer(); manuel gelöscht werden muss und danach manuel mit u8g2.sendBuffer(); aufs Display gebracht werden muss. Hiermit können noch Veränderungen vorgenommen werden, bevor das Face gemalt wird...
- Ein fertig eingerichtetes Face-Objekt steht als Objekt-Member zur Verfügung, Zugriff über
- Door Funktionen:
- Die Bibliothek erstellt einen zufälligen ED25519 Private key zur Signierung der Tür-Kommandos, sofern noch kein Key vorhanden ist.
- Mit dem Kommandobefehl pXX.64HEXDIGITS..XX kann ein anderer private Key hinterlegt werden
- Es gibt dann einige Funktionen in der Lib um die Tür zu finden und ggf zu öffnen/zu schliessen.
FAQ / Probleme
- F: Kann der Einschalt-Button abgefragt werden? A: Nein, das geht leider nicht. Aber es kann der BOOT (Button0) hinten abgefragt werden.
- F: Programmieren klappt nicht mehr, seit ich ein komisches Update gemacht habe. A: Halte BOOT gedrückt, wärend du RESET drückst. Damit kommt das MCU-Modul in einen Bootloader-Modus und der Upload sollte wieder klappen.
- F: Das Programmieren will trotz BOOT+RESET Kombo (s.O.) nicht ganz klappen. A: Wenn du das schwarze MCU Board (typ. von Tenstore) hast, kann es helfen, beim Upload auch noch GPIO3 an 3V3 zu verbinden - das ist ein seltsamer Strapping Pin. Beim blauen MCU Board ist da bereits ein Spannungsteiler enthalten.
- F: Warum ist der USB-Stecker von der Batterie blockiert? A: Das ist Absicht, damit der USB-Stecker nicht eingesteckt werden kann, wenn eine Batterie eingesetzt ist. Wir verwenden Primär-Batterien, die ansonsten über USB geladen werden würden und dabei explodieren könnten.
- F: Die LED auf dem MCU Board blinkt rot-blau beim Einschalten A: Das OLED wurde nicht gefunden und die restliche Hardware kann damit nicht initialisiert werden. Kontrolliere das OLED bzw. die Verbindungen dazu.
- F: OLED geht nicht/wird heiß/Pin-Belegung ist nicht VDD an Pin1. A: VDD muss Pin 1 sein, falls nicht gibt es aber bei einigen Displays auf der Rückseite 0-Ohm Jumper, die umgesetzt werden können, um VDD und GND zu tauschen.
- F: Kann ich CircuitPython nutzen? A: Noch gibt es keine Variante genau für das Badge. Am nächsten ist das Waveshare ESP32 S3 Zero oder das Feather ESP32-S3 4MB Flash 2MB PSRAM - das CircuitPython lief bei mir bereits auf dem MCU-Board des Badge. Ist dann aber Handarbeit (Power-Hold-Leitung, Display, Touch, Audio etc richtig bedienen per Python).
PlatformIO
- Build
platformio run --environment esp32s3
- Build FileSystem
platformio run --target buildfs --environment esp32s3
- Upload
platformio run --target upload --environment esp32s3
- Erase flash
platformio run --target erase --environment esp32s3
- Upload FS
platformio run --target uploadfs --environment esp32s3
Optional: Hack-FFM Badge Desk Stand
- OpenSCAD File: Datei:Hack-FFM Kid Badge Desk Stand.scad
- STL: Datei:Hack-FFM Kid Badge Desk Stand.zip