Blog der Heimetli Software AG

SenseHat: dynamische Temperaturanzeige

Der SenseHat

Der SenseHat ist ein Zusatzboard zum Raspberry. Es kann einfach auf den Pi gesteckt werden und hat eine 8x8 RGB LED Matrix und diverse Sensoren:

SenseHat

Kürzlich habe ich mir einen zugelegt und bin am experimentieren mit dem Ding.

Die LED-Matrix ist recht cool, aber bisher ist es mir noch nicht gelungen die Anzeige vernünftig zu filmen. Der Post mit der Matrix muss deshalb noch etwas warten.

Der Temperatursensor ist nicht gerade das Gelbe vom Ei, denn der Messwert ist immer zu hoch. Das ist nicht nur bei meinem Exemplar so, weil der Sensor zu nahe bei der CPU montiert ist, und von diesem Chip geheizt wird.

Im Internet findet man Anleitungen wie man den Fehler korrigieren kann. In diesen Posts wird die CPU-Temperatur gemessen und dann mit irgendwelchen magischen Konstanten die Temperatur vom Sensor umgerechnet...

Da es mir hier nicht um eine genaue Temperatur geht habe ich darauf verzichtet den Sensorwert zu kompensieren. Die angezeigte Temperatur ist also eindeutig ein paar Grad zu hoch:

webseite mit Temperaturanzeige

Software-Installation

Für diesen Versuch habe ich ein aktuelles Buster installiert. Erfreulicherweise enthält es bereits den Code für den SenseHat und das flask-Framework. Es gibt also nichts zu installieren.

Das Markup der Webseite

<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>AJAX, flask und SenseHat</title>
 </head>
 <body>
  <h1>Demo für AJAX, flask und SenseHat</h1>
  <p>Die aktuelle Temperatur ist <span id="temperature"></span> Grad</p>
  <script>
   function updateTemperature()
   {
      fetch( "/temperature" )
         .then( response => {
            if( !response.ok )
               throw new Error( "fetch failed" ) ;

            return response.json() ;
         } )
         .then( json => document.querySelector("#temperature").textContent = json.temperature )
         .catch( error => alert(error) ) ;
   }

   updateTemperature() ;

   setInterval( updateTemperature, 5000 ) ;
  </script>
 </body>
</html>

Interessant ist vor allem das Script in diesem File. Es holt die Temperatur im JSON-Format und setzt den Messwert in die Seite ein.

Ungewöhnlich ist der Pfad zum File: damit flask es findet, muss es im Directory static abgelegt sein.

Der Code auf dem Server

Das ist mein erster Versuch mit flask, der Code ist also mit Vorsicht zu behandeln!

from flask     import Flask, jsonify
from sense_hat import SenseHat

app   = Flask( __name__ )
sense = SenseHat()

@app.route( "/" )
def index():
    return app.send_static_file( "index.html" )

@app.route( "/temperature" )
def temperature():
    value = round( sense.get_temperature(), 1 )
    return jsonify( {"temperature": value} )

Starten von flask

Es wird allgemein empfohlen einen ausgewachsenen WSGI-Server für flask-Projekte einzusetzen. Für den ersten Versuch habe ich aber doch den eingebauten Server genommen:

export FLASK_APP=sense.py
flask run --host=0.0.0.0

Download der Sourcen

Mit diesem Link können Sie die Source herunterladen.