µ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 SSI (Server Sided Include) 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.23