CQDL-Artikel
Grundlage für einen Artikel für die CQDL
Inhaltsverzeichnis
Wie alles begann
Wenn man sich mit Mikrocontrollern befasst, merkt man schnell das für fast alle Probleme schon Lösungen existieren. Sei es Soundausgabe, Netzwerkfunktionen oder die Erfassung von Messdaten. Problem ist es meist, meherere Funktionen zu verbinden, wenn man z.b. via Browser und Funkchip die Funksteckdosen ansteuern will. Hilfe bietet das quelloffene und unter der GPL3 veröffentlichte Projekt Ethersex. Es basiert auf der Software der von Alexander Neumann entwicklten AVR-Hardware namens Etherrape, die IPv4 Kommunikation mit dem Mikrocontroller ermöglicht. So kann man einfach über das Netzwerk mit einem Browser Befehle an den Mikrocontroller senden. Initiert von Stefan Siegl DO5NST wurde die Software um das IPv6 Protokoll erweitert und dafür ein neues Projekt names "Ethersex" ins Leben gerufen. Der Name spielt auf die Ethernet Fähigkeiten und die 6. Version des Internet Protokolls an. Kernelement ist eine Menügesteuerte Auswahl von Hard- und Softwaremodulen mit der dann neue Firmware für den AVR erstellt wird.
AUSWÄHLEN, COMPILIEREN, FLASHEN, FERTIG
Da auf Grund des begrenzten Speichers im µC nicht alle Funktionen gleichzeitig aktiviert werden können, muss man für die jeweils verwendete Hardware eine Auswahl treffen. Das geht mit Ethersex denkbar einfach: Man wählt z.B. den ENC28J60 von Microchip (Netzwerkchip), das Funkmodul RFM12 und einen HTTP-Server aus und kann daraus dann die benötigte Firmware kompilieren, ohne Programmierkenntnisse und ohne von verschiedenen Projekten die benötigten Funktionen zusammenzusuchen und anzupassen. Nach der Auswahl der Module wird die Firmware erstellt und kann auf den AVR gespeichert werden. Dafür gibt es meherere Möglichkeiten. Entweder per Bootloader über die serielle Schnittstelle, oder, wie beim AVR sehr häufig benutzt, mit dem Programm "avrdude" und einem davon unterstützten Programmieradapter.
HARDWAREUNTERSTÜTUNG
Mittlerweile werden fast beliebige Kombinationen von Hardware untersützt, nicht nur das schon erwähnte Etherrape, sondern auch der Pollin AVR-IO Bausatz und der als vom Fichtenberg Fieldday bekannte FIFI-Webserver (zu finden als Radig Webmodul). Auch eigene Lösungen z.B. auf Lochraster oder Steckbrett sind einfach zu integrieren. Dazu gibt es vorbereitete Scripte um die Pinbelegung auf die eigenen Bedürfnisse anzupassen.
ONLINE FIRMWARE BUILDER
Ganz eilige können einen Online Firmware-Builder verwenden, der die benötigte und jeweils aktuellste Variante der Firmware automatisch erstellt.
-> URL FIRMWARE BUILDER
AUFRUF PER BROWSER
Sofern alles richtig geflashed und angeschlossen ist, kann den eigene Bausatz dann je nach Auswahl aufgerufen werden. z.B.
- mit dem Browser über http://192.168.1.133
- per telnet 192.168.1.133 2701
- per serielle Schnittstelle
- Chat Client (IRC, Jabber)
GEMEINSAMEN ENTWICKELN
Da xoni einige Dutzend ausgebaute Kangtai Funkmodule zum Basteln geschenkt bekommen hat, und dieses sich bei einigen Freunden herumsprach, wurde versucht diese Funkmodule per Ethersex anzusteuern. Vorhanden war schon die Möglichkeit Tevion Funksteckdosen anzusprechen. Diese sind allerdings lernbar und somit etwas einfacher anzusteuern. Daher wurde ein gemeinsamer Bastelabend vereinbart um die neue Hardware mit dem bereits vorhandenen RFM12 entprechend anzusteuern. Ziel war es das Funkprotokoll zu analysieren und selber die Codes zu senden um die Funksteckdosen anzusteuern.
Zunächst wurde ein Funkmodul soweit konfiguriert das wir den sensing Ausgang an die Soundkarte anschließen konnten. Mangels Speicheroszilloskop die günstigste Lösung. Alternativ hätte man auch einfach eine anderes Funkgerät für das 70cm Band einsetzen können. Wenn die Handsteuerungen der Funksteckdosen betätigt wurden erschienen die Pulsfolgen auf dem Computerbildschirm. Dafür wurde die freie Software audacity genommen, mit der sich meherere Aufzeichnungen als Wav Datei bequem miteinander vergleichen liessen. Mittels Datenblätter der in den Funksteckdosen verbauten Chips und einiger Anleitungen aus dem Internet, haben wir den Code recht schnell aus der Wav Datei visuell ablesen können. EVTL BILD DER AUFZEICHNUNG Diese Codes wurden als Pulsfolge kodiert und über einen extra RFM12 Sender ausgesendet. Nach und nach wurden verschiedene Parameter wie Pulslänge und Pausenzeiten angepasst, sowie ein Stopp-Bit angehängt, bis tatsächlich eine im Raum vorhandene Funksteckdose korrekt reagierte und uns allen ein Licht aufgang. Mittels Dokumentation fand took noch sehr einfach einen weiteren Ausgang auf den Funksteckdosen verwendeten ICs. Schnell wurde eine Low-Power Lösung mit 2 LEDs als Anzeige gelötet und auch dieser 2. Ausgang konnte nun mit den analysierten Pulsfolgen separat von dem 1. Ausgang, der normalerweise das Relais für die Steckdose schaltet, angesteuert werden.
Die Ansteuerung sollte natürlich einfach über den Browser gemacht werden. Ein Klick und die Lampe im Arbeitszimmer ist aus. Eine einfaches AJAX Javascript im Webserver des Ethersex sorgt nun dafür das bei einem Klick auf die angezeigten Links, die entsprechenden Steckdosen reagieren.
Vorteile gegenüber dem Handsender sind
- Höhere Reichweite der RFM12 Sender
- Es können weit mehr als 5 Steckdosen geschaltet werden
- Zeitsteuerung möglich
- Mehrere Hauscodes, bzw. Handsteuerungen werden zusammengefasst
- Mehrere Hersteller können gleichzeitig benutzt werden (z.b. Tevion und Kangtai)
- einfache Lösung in Software, der verwendete RFM12 Funkchip kann auch zum Datenaustausch mit anderen Funkchips dienen (natürlich IP Protokoll)
[Hier fehlt weiterer Text]
RFM12 Senden
Das RFM12 Funkmodul selbst sendet FM, um ASK zu "kodieren" kann man es einfach entsprechend senden lassen. Die dadurch erzeugten Pulse funktionieren erfolgreich bei einer Reihe von Funksteckdosen z.B.
- Kangtai
- Pollin
- ELRO
- Tevion (lernfähig)
Das Datenblatt zum Funk-chip findet man unter http://www.hoperf.com/pdf/RFM12.pdf
die Funksteckdosen: Tevion
Die Tevion Funksteckdosen sind lernfähig und konnten so sehr einfach auf einen eigenen Code eingestellt werden der mit dem RFM12 gesendet wird.
die Funksteckdosen: Kangtai/Pollin/ELRO
Zu Beachten ist das mindestens Funksteckdosen von Kangtai vom Hersteller zurückgerufen wurden, da bei Überlastung der Dosen eine erhebliche Brandgefahr besteht. Schwieriger war es die von mir eingesetzten Kangtai Funksteckdosen zur Mitarbeit zu überreden. Dazu wurden erst verschiedene Signale der Handsender mittes Soundkarte vom CFIL (PIN4) Ausgang des RFM12 aufgezeichnet und analysiert. Der Chip wird dazu per Software auf "external filter" gestellt.
Dank der Anleitung vom Labor Bochum e.V. und der freien Software audacity/??ANDERESOFTWARENAME?? konnten die gesendeten Impulse eindeutig zugeordnet werden. Eine logische "1", also ein Bit, wird demnach als PULS,PULS,PAUSE und eine logische "0" als PULS,PAUSE,PAUSE gesendet. (BILD MITLIEFERN) Eine komplette Sendesequenz bei Kangtai besteht mit aus Hauscode des Senders, Empfangscode des Empfängers und Schaltbefehl aus insgesamt 25 Bit.
- Hauscode 10 Bit
- Gerätecode 10 Bit
- Schaltbefehl 4 Bit
- Syncronisation 1 Bit
Der ursprüngliche Sourcecode von Gregor B. den veyron nach Ethersex portierte, bestand Schwierigkeit eigendlich nur darin das genaue Puls/Pausenverhältnis einzustellen und die Puls/Pausenlänge festzulegen.
[DETAILIERTER TEXT...]
Zu guter Letzt fand took noch einen zweiten Ausgang des HX2722 ICs den man ebenfalls ansteuern konnte. Zwar ist hier keine Steckdose oder ähnliches angeschlossen, und auch die mitgelieferte Fernbedienung kann den Code nicht senden. Ein kleiner Sendetest mit dem RFM12 brachte bewies das wir den Ausgang nun auch den Ausgang schalten können.
siehe http://www.das-labor.org/wiki/Diskussion:Funkfernbedienung http://ethersex.de/tiki-index.php?page=RF12_PowerSwitch
Hardware: Radig Webmodul
Stellvertretend für andere Schaltungen mit ATMEGA µC erkläre die von mir verwendete Hardware. Nachdem ich die mit dem Radig-Webmodul, aka FIFI-Webserver, angebotene Software selbst angepasst hatte und mir noch etliche Erweiterungen vorschwebten stieß ich bei einem Mikrokontroller Bastelwochenende im Labor Bochum auf die ethersex Firmware. Nach einer kleinen (aber hartnäckigen) Softwareanpassung der Firmware konnte das Radig Webmodul auch via Netzwerk-IC kommunizieren. Daraufhin wurde sehr schnell Unterstützung für in das Projekt aufgenommen.
- SD-Card-Reader
- Philips dc3840 Camera
- I2C-EEPROMs
- diverse andere I2C-ICs
siehe http://www.ulrichradig.de/home/index.php/avr/avr-webmodule
Hardware: etherrape
Eine von fd0 entwickelte Hardwareplattform die folgende Features bietet:
- Ethernet und TCP/IP
- Linux Command Line tool
- RS232
- RS485/422 (half- /fullduplex)
- Dallas 1wire Bus
- Infrarotsender und -empfänger für Fernbedienungscodes (RC5 ist implementiert)
- 2MB Data-Flash Speicher
- I2C
- SPI
siehe http://www.lochraster.org/etherrape/
Ethersex: die Firmware
Nachdem fd0 die etherrape Hardware aufgebaut, Schaltplan und Source veröffentlichte wurde der Sourcecode von Entwicklern um stesie aus Rothenburg um IPv6 Funktionen erweitert und folglich etherse(x|ch) genannt. Mittels Sourcecode Verwaltung "git" können sehr kompfortabel die nötigen Dateien auf den eigenen Rechner kopiert werden und man kann seine Firmware erstellen. Natürlich gibt es auch vorbereitete Dateien die man direkt auf den Mikrokontroller flashen kann, aber die ist evtl. veraltet oder bietet nicht die gewünschten Funktionen. Deshalb sind hier ein paar Merkmale der Software aufgelistet, die natürlich nur nach vorhandener Hardware genutzt werden können:
- Cryptografie für OpenVPN
- Virtual File System
- Netzwerk via
- USB-Softwarestack mit USB-Net
- Ethernet-IC (ENC28J60)
- RFM12
- ZBUS
- Netzwerkprotokolle
- TCP/UDP (mit Broadcast)
- ICMP
- BOOTP
- TFTP
- DNS
- OpenVPN
- SNMP
- NTP
I/O Funktionen
- Modbus
- YPort
- PS/2 Keyboard
- ADC input
- KTY
- OneWire
- I2C-Master
- SPI
- FS20
- RC5-IR-Codes
- Blinkenlights
- USART für RS232/RS485
- DCF77
- HD44780 LC-Display
- Philips DC3840 Serial Camera
Applikationen
- Systemuhr
- Cron daemon
- HTTP Server (mit Passwortabfrage)
- Mailserver
- Control6 Script
siehe http://ethersex.de/tiki-index.php?page=EtherSex
die Konfiguration/Installation
Grundlegend braucht man erstmal "git" als Content-Tracker und "avr-libc" als Kompiler für die Sourcen des Mikrocontrollers. Dazu kommt dann noch die "ncurses" bibliothek um die konfiguration etwas bunter zu haben und natürlich ein Programmierer z.b. "avrdude" http://git.or.cz/ http://www.nongnu.org/avrdude/ http://savannah.nongnu.org/projects/avr-libc/
Zunächst holt man sich den Quellcode von ethersex mittels: "git clone git://git.brokenpipe.de/ethersex" Mit dem Befehl "make menuconfig" ruft man dann die die Hauptkonfiguration auf, um sich eine der zahlreichen Default Konfigurationen auszusuchen, oder um die gewünschten Funktionalitäten anzuwählen. Hier sei darauf hingewiesen, das man im Gegensatz zu einer Linux Kernel "make menuconfig" nicht einfach fast alle Funktionen auswählen kann, sondern wirklich auf die Möglichkeiten und vorhandene Hardware Rücksicht nehmen muss. So hat ein ATMEGA16 nur 16kB Flashspeicher und die sind sehr schnell gefüllt.
Da einige Einträge von anderen abhängen, sind einge "ummögliche" Konfigurationen dann deaktiviert. Nachdem nun alle absolut nötigen Einstellungen gemacht wurden, speichert man die Konfiguration ab und ruft "make clean" auf, um alle alten Arbeitsdateien zu entfernen, dann "make" um den die neue Firmware zu erstellen
Ausgabe:
[...] ethersex compiled for: atmega644 size is: Program: 49936 bytes (.text + .data) Data: 3279 bytes (.data + .bss)
Die Firmware "ethersex.bin" als Binärdatei ist danach 54836 Bytes groß und damit klein genug für meine ATMEGA644 mit 64kb Speicher.
Nun wird mittels avrdude, Ponyprog oder einem anderen Programm der ATMEGA mit der neuen Firmware beschrieben. Hier sind die Fuse Bits zu beachten die bei jedem µC etwas anders eingestellt werden. (LINK FUSEBITSRECHNER)
Beispielsweise kann die Hardware nun angepingt werden
ping 192.168.133.23
oder man benutzt gleich das etherrape Command Line Interface ECMD mit telnet auf port 2701.
telnet 192.168.133.23 2701
Das erste Kommando sollte "help" sein, um sich die jetzt möglichen Befehle aufzulisten. Genauere Hinweise zu den Kommandos und Parametern können aus Speichermangel leider nicht mit angezeigt werden, sind aber im Wiki meist ausführlich erklärt.
Abschluß
Fragen und Kommentare
Via E-Mail an die Mailingliste oder Chat kann man die Projektgruppe einfach und schnell erreichen. Für die meisten Fragen hilft aber schon die Webseite www.ethersex.de die in Form eines Wikis von jedem erweitert werden kann.
Dank
Dieser Text wurde erstellt von Stefan Riepenhausen (DG1OSR) mit Unterstützung von xoni, veyron, took, stesie, stettberger und anderen Beteiligten des Projektes, ohne die nicht so viele vielfältige Funktionen eingebaut worden wären. Für die großzügige Unterstützung bin ich besonders stesie dankbar, ohne den es dieses Projekt auch gar nicht gegeben hätte.
Mitstreiterdetails: siehe Mitstreiterliste
Disclaimer
Nennungen von Projekt und Markennamen implizieren nicht das der Autor oder die Unterstüzter Rechte an der Verwertung haben oder im Besitz der Verwertungsrechte sind. Sämtliche Copyright und Trademarks verbleiben bei ihren jeweiligen Besitzern. Irrtümer sind nicht zu vermeiden. Da das Projekt weiterentwickelt wird, kann es sein das Teile dieses Dokumentes zur Drucklegung bereits veraltet sind.