Elektroda.de
Elektroda.de
X

Thermometer fürs Schlafzimmer in Form eines Rahmens

krzbor 5523 9
This content has been translated flag-pl » flag-de View the original version here.
  • Thermometer fürs Schlafzimmer in Form eines Rahmens
    Zu Beginn eine Erklärung zum Titel - es ist kein typisches Thermometer, denn es misst nichts, sondern zeigt einfach die von anderen Sensoren gemessene Temperatur an. Allerdings fand ich, daß die "Temperaturanzeige" seltsam klingt. Aber ,,fürs Schlafzimmer" hat seine Begründung, über die ich später schreiben werde.

    Etwas Geschichte

    Anzeige der Außentemperatur im Schlafzimmer macht Sinn - schließlich entscheiden wir dort, wie wir uns kleiden. Anfangs wurde die Temperatur von einem alten Lenovo-Tablet angezeigt - dank des Chrome-Browsers und der Möglichkeit, sie im Vollbild anzuzeigen, sah sie ziemlich anständig aus. Das Problem war die Helligkeit - nachts soll es im Schlafzimmer dunkel sein. Der Browser kann die Hintergrundbeleuchtung nicht steuern. Ich habe das Problem teilweise gelöst, indem ich ein halbtransparentes "div" basierend auf den Daten der astronomischen Uhr eingestellt habe. Es funktionierte sogar ganz gut, aber die WLAN- oder Power-Symbole leuchteten trotzdem hell auf. Allerdings reichte es, den Bildschirm so zu drehen, dass man ihn vom Bett aus nicht sehen konnte und es war OK. Einmal bemerkte ich jedoch, dass sich das Display ausbeulte, und nach einer Weile, als die Ausbeulung zunahm, begann das Display zu versagen. Ich habe gelesen, dass Batterien bei konstanter Stromversorgung anschwellen, aber ich dachte, Lenovo würde davon nicht betroffen sein. Es stellte sich das Problem - ein neues Tablet zu bekommen oder es "auf eigene Weise" zu machen. Als ich an meine eigene Temperaturanzeige dachte, kaufte ich mir einmal ein TFT-Modul 480x320px. Grundsätzlich wollte ich ein großes Display, keine hohe Auflösung, aber dann konnte ich nichts Interessanteres finden als dieses 4" Display. Also beschloss ich, meine eigene Konstruktion auf Basis von ESP8266 zu bauen.

    Bau des Rahmens

    Das Grundproblem beim Bau eines Gerätes "in Sichtweite" ist natürlich das Gehäuse. Ich habe mich entschieden, das Ganze in Form eines Bilderrahmens zu gestalten. Es gibt auch noch andere Rahmen mit echten Fotos auf der Kommode, wo sich das "Thermometer" befindet - ich dachte, dass alles gut passen würde:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Es war mein erstes Projekt mit einem TFT-Display - deshalb habe ich erstmal ein paar Tests gemacht:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Normalerweise baue ich Schaltungen auf einer Universalplatine, aber ich hatte für ein ganz anderes Projekt eine fertige Platine für ESP-12 (bekanntes Problem - man muss ein paar Stück bestellen) - so habe ich mich für "Recycling" entschieden. Ich werde keinen Schaltplan zeichnen, da die entsprechenden ESP-Pins (SPI-Schnittstelle) einfach mit dem Display verbunden sind. Zusätzliche Stifte sind:
    Code: c
    Melde dich an, um den Code zu sehen

    und GPIO15 zur Steuerung der TFT-Hintergrundbeleuchtung. Die Wahl von GPIO15 war kein Zufall. Während des Starts wird dieser Pin auf Low gesetzt (ESP8266 erfordert dies). Dadurch wird der Bildschirm während der gesamten Dauer des ESP-Starts nicht hinterleuchtet und erst wenn alles bereit ist, wird die Hintergrundbeleuchtung eingeschaltet.
    Wie bereits erwähnt, war das Dimmen wichtig, daher wurde der Rahmen mit einem Fotowiderstand ausgestattet:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Der einzige ADC-Eingang des ESP8266-Prozessors erwies sich als nützlich. Der hohe Widerstand von R4 mag überraschen. Dies resultiert aus der Tatsache, dass die Schaltung eine gute Auflösung bei sehr geringer Beleuchtung haben sollte.

    Konstruktion

    Nachdem ich den Rahmen gekauft und den hinteren Fuß abgerissen hatte, schnitt ich ein Loch für das Display:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Die Präzision des Schnitts ist nicht besonders wichtig - es wird vorne ein Passepartout sein, das alles verdeckt. Es ist jedoch wichtig, das Loch vertikal zu platzieren - der aktive Teil des Displays befindet sich nicht in seiner Mitte, was beim Schneiden des Lochs berücksichtigt werden sollte.
    Nach der Montage des Displays auf der Vorderseite sieht es so aus:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Die Schrauben mit Senkkopf werden versenkt, dass vorne eine ebene Oberfläche entsteht. Da die Platte dünn ist, habe ich einen kleinen Tropfen Kleber unter die Schraubenköpfe gegeben, um das Ganze zu verstärken. Seitenansicht:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Die Dicke der Platte und der Mutter passte perfekt zur Dicke des Displays.
    Und so sieht es nach dem Zusammenbau aus:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Die oberen Schrauben der Platine sind nicht mit dem Display verbunden - sie dienen nur als Abstandshalter.
    Rückansicht des fertigen Rahmens:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Da ich den Touch­screen nicht verwende, habe ich das Original-Plexiglas im Rahmen gelassen.

    Software

    ESP-Programmierung habe ich wie gewohnt mit Arduino gemacht. Zur Unterstützung des Displays habe ich mich für die TFT_eSPI-Bibliothek entschieden, die mit meinem Display sehr gut funktioniert. Die Autoren der Bibliothek haben das Problem der Konfiguration der Steuerpins und des Anzeigetyps auf interessante Weise gelöst - alles befindet sich in der Datei "User_Setup.h". Diese Lösung hat den Vorteil, dass Sie nach einer einmaligen Konfiguration Musterprojekte bauen können, die sofort funktionieren! Zuerst war das Beispiel der Anzeige eines JPG-Bildes - es funktionierte sehr gut, und ich fand heraus, dass ich ein gut verbundenes und funktionsfähiges Display hatte. Der nächste Schritt ist die Anzeige vom Text - Beispiele sind auch hier verfügbar. Ich beschloss, sie ein wenig zu modifizieren und zu prüfen, was ist es mit polnischen Zeichen. Leider gab es sie nicht. Später las ich, dass es möglich ist, aber es ist nicht einfach. Das kühlte meinen Enthusiasmus etwas ab, um so mehr, weil ich schöne, große Zeichen verwenden wollte.
    Ich entschied mich, das Problem anders zu lösen - ich entschied, dass der Rahmen nur das gesamte Bild anzeigen würde, das auf der Serverseite mit PHP und der GD-Bibliothek erstellt werden würde. Die GD-Bibliothek gibt mir Zugriff aufs Schreiben mit TrueType, und da PHP eine interpretierte Sprache ist, ist es sehr einfach zu ändern - ich muss nicht kompilieren, hochladen usw.
    Das Problem blieb, wie man ein Bild von PHP nach ESP hochlädt. Ich habe die JPEG-Komprimierung abgelehnt - es ist eine verlustbehaftete Komprimierung, und ich wollte kein verschwommenes Bild an den Rändern haben. Das Modul für die PNG-Komprimierung funktionierte nicht (erfordert wahrscheinlich mehr RAM). Ich habe noch über GIF nachgedacht, aber am Ende habe ich mich für eine eigene Lösung mit eigener Komprimierung entschieden.
    Ich habe entschieden, dass PHP das Bild sofort für die Anzeige vorbereitet, d. h. es wird es in 65k Farben (RGB 565) kodieren, was für das TFT-Display erforderlich ist. Zunächst wurden die Daten unkomprimiert gesendet - jede Zeile bestand aus 320 Pixeln oder 640 Bytes. Das gesamte Bild war somit 307.200 Byte groß. Es funktionierte sehr schön und interessant, aber langsam. Ich fand das WLAN auf dem ESP8266 sehr langsam. Das Neuzeichnen dauerte über 2 Sekunden. Da es ausgeführt werden kann, ohne den vorherigen Inhalt zu löschen, wurde ein interessanter "Rolladen" Übergangseffekt erzeugt, der nützlich sein kann, wenn jemand einen elektronischen Fotorahmen erstellen möchte.
    Ich wollte jedoch Geschwindigkeit, also habe ich RLE-basierte Komprimierung hinzugefügt. Nachfolgend finden Sie eine Beschreibung der verwendeten Methode.

    Kompression

    Da ein Pixel 2 Bytes sind, habe ich mich entschieden, alles auf zwei Bytes zu codieren - in der weiteren Beschreibung werde ich es als "Wort" bezeichnen, das Zahlen oder eine RGB-Farbe (im 565-System) enthalten kann. Die Grundannahme war auf der ESP-Seite leichtes Ablesen. Daher enthält das erste Wort die Anzahl der Wörter in der Zeile. Das nächste Wort ist das Steuerwort (nennen wir es n) - wenn es kleiner als 10000 ist, bedeutet dies, dass die nächsten n Wörter als Pixel umgeschrieben werden sollten. Wenn n größer als 10000 ist, sollte das nächste Wort (Pixel) (n-10000) Mal wiederholt werden. Wir verwenden eine solche Codierung bis zum Ende der Zeile, also dem nächsten Steuerwort und Daten usw. Nach dem Codieren der Zeile prüft der PHP-Code, ob der codierte String (Pixelreihe) nicht länger als unkomprimiert ist. In diesem Fall wird die Komprimierung für diese Zeile abgebrochen, und ESP weiß, wenn es liest, dass die Zeile 320 Wörter lang ist, dass sie nicht komprimiert ist. Für das Bild unten:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Die Komprimierung ergibt eine resultierende Größe von 43.160 Bytes, was 14 % des Originals entspricht. Ich fand es ein sehr ordentliches Ergebnis.

    Arduino-Code

    Code: c
    Melde dich an, um den Code zu sehen

    Cool? DIY-Rangliste
    Hast du ein Problem mit Arduino? Stelle bei uns eine Frage. Besuche unser Arduino-Forum.
    Über den Autor
    krzbor
    Niveau 25  
    Offline 
    krzbor hat 1106 Beiträge geschrieben mit der Bewertung 632, und dabei 21 Mal geholfen. Er ist seit 2004 bei uns.
  • #2
    gulson
    Forenbetreiber
    Vielen Dank für die Vorstellung der eigenen Konstruktion und das Einfügen des Logos von Elektroda. Das Ergebnis ist super. Ich denke, dass der Rahmen immer problematisch ist, damit er ästhetisch ansprechend aussieht und alles hineinpasst.
    Schreiben Sie mich für ein bescheidenes Geschenk an! :)
  • #3
    error105
    Niveau 14  
    Cooles Design.
    Das einzige, was mich stört, ist dieses dürftige TFT ohne Blickwinkel :( Es tut ein bisschen weh, dass es im Grunde keine guten SPI-Displays gibt oder sie mehr kosten als 27-Zoll Monitore :(
  • #4
    ADI-mistrzu
    Niveau 30  
    Haben Sie nicht daran gedacht, TFT durch E-Ink zu ersetzen? Sogar bunt.
  • #5
    krzbor
    Niveau 25  
    error105 hat geschrieben:
    Cooles Design.
    Das einzige, was mich stört, ist dieses dürftige TFT ohne Blickwinkel :( Es tut ein bisschen weh, dass es im Grunde keine guten SPI-Displays gibt oder sie mehr kosten als 27-Zoll Monitore :(

    Die Winkel sind nicht so schlimm. Es lohnt sich jedoch, dies zu überprüfen, da sie vertikal unterschiedlich zu sein scheinen, je nachdem, wie wir den Bildschirm drehen. Es gibt praktisch kein billiges Display mit SPI über 4 Zoll, oder wie Sie schreiben, haben sie einen kosmischen Preis.

    ADI-mistrzu hat geschrieben:
    Haben Sie nicht daran gedacht, TFT durch E-Ink zu ersetzen? Sogar bunt.

    Das Foto des Rahmens wurde am Abend aufgenommen - daher der hohe Kontrast zwischen dem Rahmen und dem auf dem TFT angezeigten Inhalt. Tagsüber sieht es normalerweise viel besser aus. Außerdem verstärkt die Kamera den Kontrast zwischen Rahmen und TFT.
    Ich stimme zu, dass die angewandte Lösung gut für E-Ink geeignet ist - obwohl ich in diesem Fall eine Prüfsumme des übertragenen Bildes hinzufügen würde. Wenn sich die Prüfsumme nicht ändert, erfolgt keine Aktualisierung. Ich hatte nur TFT, E-Ink musste gekauft werden. Ich wollte, daß es auch nachts sichtbar ist.
  • #6
    ADI-mistrzu
    Niveau 30  
    @krzbor, es gibt E-Ink mit der Möglichkeit der Hintergrundbeleuchtung, aber ich weiß leider nicht, ob sie erhältlich sind.
  • #7
    ArturAVS
    Moderator HP/Truck/Electric
    @krzbor, und was für ein Display ist es genau?
  • #8
    krzbor
    Niveau 25  
    Chinesisch :) Genaue "polnische" Beschreibung: ''3,95 "/ 4,0" Zoll 320 * 480 ST7796S TFT-Farb-LCD-Display mit Touchscreen für Arduino UNO Mega2560 8/16 Bit". Bild des Steckers:
    Thermometer fürs Schlafzimmer in Form eines Rahmens
    Ich hänge User_Setup.h an:
  • #10
    krzbor
    Niveau 25  
    Kein Rahmen sieht von hinten schön aus. Wenn die Rückseite irgendwie sichtbar wäre, würde ich ein Gehäuse oder eine Art Abdeckung hinzufügen. Allerdings wusste ich, dass bei der Größe des Rahmens im Verhältnis zu Display und Elektronik nichts zu sehen wird. Ich habe versucht, es so flach wie möglich zu machen - daher der nicht sehr ästhetisch geneigte Stabilisator. Ideal wäre natürlich schöne Leiterplatte, von Grund auf neu gestaltet, am besten mit einem Sockel, der direkt auf die Pins des Displays passt - so ein Sandwich. Ich denke jedoch, dass die anderen den anderen Weg gehen werden - einfach eine NodeMCU verwenden - dort haben sie eine Strombuchse, einen Stabilisator und eine einfachere Programmierung. Ein kleines Problem wird jedoch die Notwendigkeit sein, den ADC-Eingang zu überarbeiten.
    [F]