Battlescore - Spielstand-Zähler: ESP8266 Projekt



  • Ich bin das absolute Gegenteil eines Vielspielers, wer auch immer sich dieses Wort ausgedacht hat. Trotzdem kommt es in letzter Zeit vermehrt vor, dass am Tag mindestens 10 Runden UNO gespielt werden - mit 40 Karten - zu zweit. Ein richtiger Spaß ist das sag ich euch … 🍻 Ich weiß nicht ob es an Corona und der vielen Freizeit liegt, oder an unsererm neuen Gadget:

    Battlescore


    Kennt ihr diese Diskussionen?

    Steh du auf!

    Nein steh du auf! Ich bin letztes mal schon aufgestanden.

    Mit Battlescore ist das vorbei! Der Gewinner kann sich ausruhen während der Verlierer, im wahrsten Sinne des Wortes, die Arschkarte zieht.

    Battlescore ist das Codewort meines jüngsten ESP8266 Projekt - eine Fernbedienung mit der man Punkte vergeben kann. Entweder Spiel gewonnen, oder Spiel verloren.


    Die Idee war relativ simple: Aufgrund der vielen Diskussionen, … oder lasst mich sagen:

    Schatz, tust du mir einen Gefallen … ?

    Hatte ich die Idee, diese ganzen UNO-Runden festzuhalten. Und zwar per Knopfdruck.

    Beschreibung


    ESP8266 Schaltpan demo

    Per Knopfdruck an einem ESP8266 wird ein Punkt in einer MySQL-Datenbank gespeichert. Die Punkte kann man von dort aus beliebig weiterverarbeiten - Man könnte Graphen oder Statistiken erstellen, man könnte eine Abfrage fürs Smarthome einbauen, man kann einfach alles machen, was man mit Datensätzen eben machen kann.


    Beim Speichern eines Punktes wird je eine Push-Nachricht an das Handy der Freundin und an das eigene Handy geschickt (damit keiner schummeln kann). Vertrauen ist gut, Kontrolle ist besser. Es geht schließlich darum, wer das nächste mal aufstehen muss…

    Pushover Push


    Auf einer Webseite, die lokal auf meinem makesmart-server läuft, bekommt man eine grobe Übersicht:

    • Gesamtanzahl der Matches.
    • wer führt gerade?
    • wie viele Punkte fehlen zum Ausgleich?

    makesmart-server Vorschau

    Und bevor ihr mir jetzt 'nen Vogel zeigt, … ja das braucht eigentlichen keine Sau und man kann die Zeit auch definitiv sinnvoller nutzen, aber das ist ein super Projekt zum “hinter die Kulissen schauen”.


    Trotzdem ist es doch irgendwie eine WIN-WIN Situation. Ich hab Bock zum zocken, die Freundin ist glücklich, ich muss nicht mehr aufstehen und bin ebenfalls glücklich. Fazit: Einfach alle sind glücklich…

    … auch wenn das Ding komplett beschissen aussieht.

    battlescore esp8266 projekt

    telegram antworten


    Aber wen interessiert schon die Optik, eigentlich sind wir doch alle nur an den inneren Werten interessiert, nicht wahr? @marcobaumann @Nick


    Bestandteile

    Das Projekt beinhaltet folgende Hauptkomponenten

    Ablauf


    Punktevergabe | ESP8266 HTTP-Request

    Sobald man auf den schwarzen Taster drückt, wird der ESP aktiviert und die blaue LED fängt an zu leuchten.

    Ab da an hat man 5 Sekunden Zeit einen Punkt zu vergeben, ansonsten geht der ESP8266 zurück in den Standby.


    Punkte werden mit dem roten- und mit dem blauen Taster vergeben. Blau ist meiner, rot ist der der Freundin… Gehen wir davon aus, dass ich gewonnen hab.

    Auf Knopfdruck callt der ESP die mit PHP programmierte GET-API. Es wird die Variable winner mit dem Wert cooper übergeben.

    http://makesmart-server/private/battlescore/add.php?winner=cooper
    
    if (sender.begin("http://makesmart-server/private/battlescore/add.php?winner=cooper")) {
          int httpCode = sender.GET();
           
          //Anfrage wurde gesendet und Server hat geantwortet
          if (httpCode == HTTP_CODE_OK) {
      
            // Die URL wurde erfolgreich gecallt
            // und das PHP-Script wird ausgeführt
                
          }
      
          sender.end();
    
          ESP.deepSleep(0);
    }
    

    Sobald von der gecallten URL ein HTTP-OK kommt, ist der Request abgeschlossen, und der ESP wird mithilfe von ESP.deepSleep(0) wieder in den Standby versetzt - bis man wieder den schwarzen Taster drückt.


    Punkte speichern | PHP GET-API

    Die vom ESP8266 übergebene GET-Variable winner=cooper wird von einem PHP-Script verarbeitet.

    Zuerst wird der Wert der GET-Variable erneut in eine Variable (für das PHP-Script) gespeichert.

    Anschließend wird ein Datensatz in die MySQL-Tabelle count geschrieben.

    $winner = $_GET['winner'];
    
    INSERT INTO `count` (`id`, `name`, `time`, `active`) VALUES (NULL, '$winner', CURRENT_TIMESTAMP, '1')";
    
    id name time active
    1 cooper 2020-04-20 20:04:12 1

    Push-Benachrichtigung | PHP & Pushover


    Die Push-Benachrichtigung wird ebenfalls vom PHP-Script gesendet. Das passiert über die API von dem Service Pushover.

    curl_setopt_array($ch = curl_init(), array(
            CURLOPT_URL => "https://api.pushover.net/1/messages.json",
            CURLOPT_POSTFIELDS => array(
              "token" => "meintoken98zf2fj2f2",
              "user" => "meinuserfo9h2f23f23f",
              "device" => "cooper_iphone_x,cooper_gf_iphone_8",
              "message" => "Punkt für cooper! Am " . date("d.m") . " um " . date("H:i") . " Uhr",
              "html" => 1
            ),
            CURLOPT_SAFE_UPLOAD => true,
            CURLOPT_RETURNTRANSFER => true,
          ));
    
          curl_exec($ch);
          curl_close($ch);
    

    Und fertig ist der Battlescore! 🤣


    Schlusswort

    Mir ist klar, dass das nicht unbedingt das sinnvollste Gadget auf Erden ist. Aber gerade solche Projekte sind perfekt dafür geeignet, neue Dinge unkompliziert und im kleinen Rahmen auszuprobieren.

    Die Codes sind natürlich nur auf die allernötigsten Schnipsel gekürz und dienen rein zur Veranschaulichung. Dementsprechend funktionieren die Codeschnipsel in diesem Post nicht, wenn man sie 1:1 kopiert.


    Die Themen wie Push-Benachrichtigung und MySQL-Insert können genauso gut auf dem ESP8266 selbst ausgeführt werden. Aber ich habe mich bewusst dagegen entschieden. Bei mir sollte der ESP lediglich als Event-Trigger dienen.

    Ein PHP-Script lässts sich einfach komfortabler bearbeiten und erweitern, im Gegensatz zu einem Programm das man jedes mal kompilen und auf eine Hardware bekommen muss. 😉

    Ich habe noch einige Ideen auf Lager die ich vielleicht miteinbauen möchte. Natürlich zu Lernzwecken.

    Aber lasst euch eins sagen: Das Drücken auf den Knopf nach einem Sieg ist mehr als befriedigend. 🤣

    Ich hoffe ich konnte irgendjemand in irgendeiner Form für irgendwas inspirieren.

    winnie.gif


    Viel Spaß mit euren Projekten,

    cooper