Hackerspace-FFM Badge: Unterschied zwischen den Versionen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche
(PlatformIO)
(PlatformIO)
Zeile 63: Zeile 63:
  
 
== PlatformIO  ==
 
== PlatformIO  ==
*Build*
+
*Build
 
  platformio run --environment esp32s3
 
  platformio run --environment esp32s3
  
*Upload*
+
*Upload
 
  platformio run --target upload --environment esp32s3
 
  platformio run --target upload --environment esp32s3
  
*Erase flash*
+
*Erase flash
 
  platformio run --target erase --environment esp32s3
 
  platformio run --target erase --environment esp32s3
  
*Upload FS*
+
*Upload FS
 
  platformio run --target uploadfs --environment esp32s3
 
  platformio run --target uploadfs --environment esp32s3

Version vom 28. März 2025, 21:46 Uhr

Hackffm kid animeyes.gif

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:

  1. 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
  2. Handlöten: Display-Connector, ESP-Modul, Neopixel, CR123 Halter, ggf. PCB-Patches, ggf. Speaker-Buchse werden per Hand gelötet
  3. Mechanischer Aufbau: Display einschrauben, PCB montieren, Neopixel platzieren, Halsband anbringen, ggf. Speaker montieren
  4. Programmieren: Grundprogram wird per USB-C eingespielt, Funktionen werden kontrolliert: Display, Neopixel, ggf. Speaker
  5. Testen: Batterie wird eingelegt: Test das Ein-Taster funktioniert und Touch Funktioniert
  6. Personalisieren: Name wird hinterlegt, Benutzergrafik (mit Name) kann erstellt und übertragen werden

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

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...

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.

PlatformIO

  • Build
platformio run --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