Hier eine kurze Beschreibung dieses Projektes:
Ziel des Projektes ist das Aufzeichnen und Ausgeben der Messdaten auf einem PC von einem an der seriellen Schnittstelle
angeschlossenen Mikrocontroller. Auf dem PC läuft ein Linux Betriebssystem (Debian Sarge - stable). Mit einigen Anpassungen
(Dateipfade Webserver etc.) läuft er aber auf allen Linux-Systemen
Gerade im Bereich Kommunikation mit dem µC müsste sicher noch einiges geändert werden. Hier habe ich zu Gunsten der Einfachheit
auf ein CRC-Verfahren verzichtet. Lediglich die Übertragung der
Sensor-IDs wird über eine XOR-Verknüpfung grob geprüft und bei einem Fehler werden die Daten erneut abgefragt.
Kurze Auflistung der Funktionen:
Alle Einstellungen werden in der mcmysql.conf Datei vorgenommen.
Dazu schließt man nur einen DS1820-Sensor an den Mikrocontroller an und ruft dann das Programm mit mcmysql -r
auf. Als Rückgabe erhält man dann die 16-stellige Identifikationsnummer welche man gleich an entsprechender Stelle
im Config-File einträgt. Als SensorName trägt man noch einen Namen zur Messung ein.
Hat man alle IDs ausgelesen sowie die Zugangsdaten der MySQL-Datenbank eingetragen, wird mit dem Aufruf mcmysql -d
die entsprechende Datenbank angelegt, sowie mit dem Aufruf mcmysql -i die 1-Wire Seriennummern in das EEPROM
des Mikrocontroller übertragen.
Mit dem Aufruf mcmysql -z fragt das Programm dann im eingstellten Zyklus die Temperaturen der Sensoren ab und trägt
sie in der Datenbank ein.
Sind alle benötigen Komponenten installiert kann durch ein
make mcmysqldie ausführbare Datei kompiliert werden.
Der 1-Wire Bus ist am AVR an Port C Pin 0 angeschlossen. Der AVR arbeitet mit einer Taktfrequenz von 4,194304 MHz.
Die Übertragungsrate der seriellen Schnittstelle ist auf 4800 Baud eingestellt.
Der AVR wartet auf ein ankommendes Zeichen an der seriellen Schnittstelle. Das übertragene Zeichen gibt an, welcher
Messkanal gelesen werden soll. Dieser Wert wird dann an den PC zurückübertragen
Die Daten können aus der Datenbank mittles eines Web-Interfaces abgerufen werden. Dazu müssen die Perl-Skripte
mcausgabe.pl, mcauswert.pl und show.gp in das cgi-bin Verzeichnis des Webservers kopiert werden.
(bei Debian ist standardmäßig /usr/lib/cgi-bin/). Die Datei messmenu.html wird in das Verzeichnis des
Webservers kopiert (bei Debian /var/www/). In dem Menü kann man dann die darzustellende Messung sowie
den Zeitbereich auswählen. Sind für diesen Bereich Daten vorhanden wird dann mittels Gnuplot das Diagramm erstellt.
Messdaten werden dazu erst aus der Datenbank geholt und in die Datei messung.dat geschrieben. Das entsprechende
Batch-File für Gnuplot ist die Date show.gp.
Alle Diagramme werden im png-Format im root-Verzeichnis des Webservers gespeichert.
Eventuell auftretende Fehler lassen sich im Logfile /var/log/apache/error.log des Apache einsehen.
Wichtig: In beiden Perl-Skripten müssen die Zugangsdaten zur MySQL-Datenbank eingetragen werden.
TODO: Ältere Diagramme automatisch löschen.
Für das Parsen des Config-Files gibt es unter Linux keine API oder einen einheitlichen Standard.
Deshalb habe ich auf die Bibliothek libConfuse zurückgegriffen, die als Debian-Paket verfügbar ist.
apt-get install libconfuse-devDokumentation zu libconfuse finden sich auf
Messwerterfassung mit Linux:
http://www.linux-magazin.de/Artikel/ausgabe/1999/08/Messen/messen.html
http://www.loetstelle.net/praxis/seriellport/seriell.php
Infos zur seriellen Schnittstelle unter Linux:
http://www.easysw.com/~mike/serial/serial.html
CGI-Programmierung, Ansprechen der MySQL-API uvm.:
http://pronix.linuxdelta.de/C/standard_C/index.shtml
Perl-Programmierung:
Perl-Einführung auf SelfHTML
Dokumentation der MySQL C-API: (englisch/deutsch)
http://dev.mysql.com/doc/refman/4.1/en/c.html
http://dev.mysql.com/doc/refman/4.0/de/c.html
#stty ospeed 1200 ispeed 1200 -crtscts -parenb cs8 < /dev/ttyS0Einstellungen anzeigen lassen mit:
#stty -a < /dev/ttyS0