µTelCon - der Mikro-Telegramm-Konverter
Auf meiner Wetterseite wurde früher neben
den Bildern der Webcams und den Daten der Wetterstation auch die aktuelle Temperatur auf der
Westseite des Hauses angezeigt. Wie kam diese dahin?
Da steckt ein bisschen selbstgebaute Technik und etwas Software dahinter.
-
Technik
Die Temperatur wird mit einem digitalen Temperatur-Messgerät und einem passenden
Außensensor erfasst. Das Modul hat einen synchronen seriellen Ausgang, dessen
Telegramm von einem PIC-Prozessor aufgenommen und in ein Telegramm umgewandelt wird,
das seriell an einen Raspberry Pi übertragen wird.
-
Software
Die Daten werden im Raspberry Pi in Klartext gewandelt und als Datei via FTP auf den Server
übertragen. Die Datei wird in die HTML-Seite eingebunden und schon ist die Anzeige
fertig.
Die Temperatur wird mit einem digitalen Temperatur-Zeitmodul von Conrad Electronic und einem
passenden Außensensor erfasst. Das Modul hat einen synchronen seriellen Ausgang. Das Telegramm
wird von einem PIC-Prozessor PIC16F84A (Datenblatt) aufgenommen und in ein Byte-kodiertes Telegramm umgewandelt, das
über eine RS232-Verbindung an einen Raspberry PI übertragen wird.
Die beiden Bilder zeigen den Aufbau der Schaltung, der
Schaltplan liegt als PDF-Datei vor.
-
Die Schaltung ist alles andere als optimal, das war aber auch nicht meine Absicht. Ich habe
eigentlich nur einige Bauteile aus vergangenen Projekten und aus der Bastelkiste
wiederverwendet.
Über die beiden Transistoren werden die Pegel des Thermometers (1,5V, positive Logik)
an die Notwendigkeiten des PIC (5V) angepasst. Daß es dabei zu negativer Logik kommt,
lässt sich durch die Software wieder ausgleichen. Der Ausgang B4 steuert die
RxD-Leitung der RS232-Schnittstelle des Raspberry Pi. Die Pegel sind ausreichend, nur muss auch hier
die Invertierung im Programm beachtet werden. Die Zenerdiode begrenzt die aus dem
DTR-Anschluß gewonnene Spannung auf für den PIC verträgliche Werte, die
Diode verhindert negative Spannung.
-
Das Programm im PIC ist hier verfügbar.
Die Interruptserviceroutine für den Port B0, an dem das Clock-Signal anliegt, wertet
zunächst die Zeit zwischen einer fallenden und der nächsten steigenden Flanke
aus. Ist die Zeit größer als eine Millisekunde, wird die Datenaufzeichnung neu
aufgesetzt. Bei jeder steigenden Flanke wird der Pegel der Datenleitung B1 eingelesen,
invertiert und dem Datenwort zugefügt. Nach dreizehn Pulsen ist der Temperaturwert
vollständig. Dies wird mit einem Flag der Hauptschleife angezeigt.
Wenn die Hauptschleife das Flag erkennt, berechnet sie die Checksumme und überträgt
ein Startbyte (das nicht als Datum vorkommen kann), die beiden Bytes des Temperaturwertes
und die Checksumme über die serielle Schnittstelle.
Die Byte-Sende-Funktion ist in Assembler geschrieben, um ein möglichst genaues Timing
zu erreichen. Der Wert für "delay_counter" muss durch Probieren oder Ausmessen mit
einem Oszilloskop ermittelt werden, da er von der Taktfrequenz des PIC abhängt.
-
Das Linux-Programm empfängt das Telegramm von PIC. Das Startbyte wird zur
Synchronisation auf den Telegrammanfang verwendet. Dann wird mit der Checksumme geprüft,
ob während der Übertragung Fehler aufgetreten sind.
Jeweils 4 Bit der Daten ergeben eine Zahl der Temperatur :
- 1. Byte, oberes Nibble : Vorzeichen
- 1. Byte, unteres Nibble : Zehnerstelle
- 2. Byte, oberes Nibble : Einerstelle
- 2. Byte, unteres Nibble : Nachkommastelle
Daraus wird eine normale Zahl berechnet. Nach jedem sechsten Telegramm, also nach einer
Minute, wird die Zahl in Text umformatiert und der Text in eine Datei geschrieben. Die wird dann
per FTP auf den Server im Internet übertragen.
-
Ich habe verschiedene HTML-Möglichkeiten ausprobiert, um die Temperatur in meine
Homepage zu bekommen, die aber leider mit den verschiedenen Browsern zu den unterschiedlichsten
und meistens unbefriedigenden Ergebnissen führten.
Die Lösung war schließlich "Server Sided Include". Mit dem Ausdruck <!--#include
virtual="dateiname" --> wird die Datei "dateiname" schon auf dem Server ohne Änderung
in das zu versendende HTML-Dokument eingebunden.
Die Beschreibung der Raspberry Pi-Software ist absichtlich so grob gehalten. Jeder Programmierer hat da seine
eigenen Vorstellungen, was das Programm können soll (meines zeigt z.B. die Temperatur noch
auf dem Bildschirm an), welche Sprache, welches Betriebssystem und welcher Compiler zu verwenden sind.
Zum Verständnis des Vorgangs sollte es aber reichen.
© Uwe Jantzen 17.08.21