meta data for this page
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
gadget_entwicklung [2021/05/30 09:34] – angelegt tom | gadget_entwicklung [2025/04/17 05:39] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
Die Bedienbarkeit über Mobilgerät (Tablet, Handy, Android oder iOS, PC) erfordert eigentlich zwangsläufig eine Browserlösung mit Javascript. Das hat zwar ein paar hässliche Implikationen, | Die Bedienbarkeit über Mobilgerät (Tablet, Handy, Android oder iOS, PC) erfordert eigentlich zwangsläufig eine Browserlösung mit Javascript. Das hat zwar ein paar hässliche Implikationen, | ||
- | Von der Hardware Seite war gefordert: Robustes Gehäuse, integrierte Stromversorgung, | + | Von der Hardware Seite war gefordert: Robustes Gehäuse, integrierte Stromversorgung, |
===== Hardwarekonzept ===== | ===== Hardwarekonzept ===== | ||
Zeile 21: | Zeile 21: | ||
Zum Einbau werden die Platine mit Isolierband umwickelt (ich hab vergessen Schrumpfschlauch zu bestellen :-( ) und einigermaßen sicher mit Verpackungschips aufgefüllt. Wie robust das im Trainingsbetrieb ist, wird sich erst nach Corona zeigen. | Zum Einbau werden die Platine mit Isolierband umwickelt (ich hab vergessen Schrumpfschlauch zu bestellen :-( ) und einigermaßen sicher mit Verpackungschips aufgefüllt. Wie robust das im Trainingsbetrieb ist, wird sich erst nach Corona zeigen. | ||
+ | ===== Software auf dem ESP32 ===== | ||
+ | Als Entwicklungsumgebung habe ich Arduino mit der ESP-Erweiterung unter Linux genutzt. Im wesentlichen hat die Firmware auf den ESPs drei Funktionen: | ||
+ | - Kontakt mit einem WLAN aufnehmen | ||
+ | - Updates über die OTA entgegennehmen | ||
+ | - Kommunikation mit den Clients und Management der LEDs und des Touch-Eingangs | ||
+ | ==== Kontakt mit einem WLAN aufnehmen ==== | ||
+ | |||
+ | Beim Start wird das WLAN zweigleisig initialisiert. Zum einen wird versucht, sich als Client im letzten bekannten WLAN einzuloggen. Gleichzeitig wird auch ein eigenes WLAN als Accesspoint aufgespannt. Das ist komplett offen. Falls das Einloggen als Client erfolgreich ist, wird der AP abgeschaltet. Falls der Client nicht innerhalb von 60s in ein WLAN einloggen kann, wird der Versuch aufgegeben. Der AP bleibt dann insgesamt 10 Minuten aktiv. In der Zeit kann man sich mit diesem offenen WLAN verbinden, und die URL http:// | ||
+ | ==== Updates über OTA ==== | ||
+ | |||
+ | Eine großartige Funktion der ESPs, die leider erst spät entdeckt habe, ist das Update über WiFi. Den ESP einmal richtig einbauen, WLAN konfigurieren und gut. Der realisierte Code ist direkt Copy& | ||
+ | |||
+ | ==== Kommunikation mit den Clients ==== | ||
+ | |||
+ | Die Kommunikation erfolgt auf zwei Ebenen. Zum einen steht ein WebServer bereit, der statische Seiten serviert. Die Ursprungsidee war, dort nur die Konfiguration abzuhandeln und die eigentlichen LED-Programme lokal auf den Clients zu speichern. Das funktioniert auch prima mit dem FireFox auf dem Desktop, aber so gar nicht mit mobilen Clients unter Android (Safari unter iOS habe ich dann gar nicht mehr probiert...). Dort sind die Browserhersteller der Meinung, lokale Dateien sind viel gefährlicher als Web-Seiten, deswegen muss das unbedingt verboten sein. Kann man sich gar nicht ausdenken, so was. | ||
+ | |||
+ | Also braucht man entweder einen externen Web-Server oder die Seiten müssen auf den ESP. Wenn man als AP einen RasPi 4 nimmt, kann man auch noch gleich einen nginx oder lighttpd draufsetzen und gut. Das verkompliziert aber den Aufbau, also kommen die Seiten auf die Micros. Praktischerweise sind von den 4MB Speicher 1.2MB für ein Dateisystem reserviert (Das war früher man die Kapazität einer Floppy...). Die einzelnen Dateien werden " | ||
+ | |||
+ | Der Web-Server liefert HTML, Javascript und ein bischen CSS aus. Für die Kommunikation baut der Client eine Web-Socket Verbindung zu den ESPs auf, über die er Kommandos schicken kann. | ||
+ | |||
+ | Das einfachste Kommando ist " | ||
+ | |||
+ | Die weiteren Kommandos von Clientseite sind: | ||
+ | * setX, wobei X zwischen 0 und 2 liegt: Schaltet Farbe X an (Rot, Grün, Blau) | ||
+ | * SETxyz: x, y, z jeweils 0 oder 1: Setzt den Zustand Rot auf x, Grün auf y, Blau auf z. | ||
+ | * CLR: Schaltet alle Farben dunkel | ||
+ | |||
+ | Als Antwort schickt der Micro jeweils den neuen Zustand, Zeit und Toucheingang zurück. | ||
+ | ===== Software auf dem Browser ===== | ||
+ | |||
+ | Es braucht nicht viel, ein Browser, der JavaScript kann. Getestet habe ich mit dem Firefox unter Linux und Windows, Safari unter iOS, sowie Fennec und Bromite unter Android. Etwas nervig ist die Angewohnheit moderner Browser, '' | ||
+ | |||
+ | Bislang gibt es drei Seiten, die man tatsächlich im Training gebrauchen kann: | ||
+ | |||
+ | demo01.html: | ||
+ | |||
+ | demo02.html: | ||
+ | |||
+ | demo03.html: | ||
+ | |||
+ | ===== Anwendung in der Praxis ===== | ||
+ | |||
+ | Ich habe mir auf einen Raspi einen Accesspoint installiert, | ||
+ | |||
+ | Ich habe mit den Mädels Reaktionstest gemacht (demo03), vier Stück im Quadrat, möglichst schnell berühren, hat gut funktioniert. demo02 war nicht so wirklich gut, weil das Grün schwer zu erkennen war. Die habe ich kombiniert mit der Aufgabe: Rot=Blocksprung, | ||
+ | |||
+ | Auf dem Plan habe ich noch, einen Spieler oder eine Halterung beim Einschlagen von der IV auf die I und die V zu stellen. Zwischen Anspiel zum Zuspieler und Schlag leuchtet einer der Pods auf, und entsprechend soll Longline oder Diagonal geschlagen werden. Aber da ist erst mal noch ausgiebiges Stellertraining vor... | ||
+ | |||
+ | Weitere Ideen von außerhalb nehme ich natürlich gerne auf. |