Embedded Webserver CrumbX1-NET von Chip45 mit Bluetooth Modul HC-06

Projekt Status

Die Firmware läuft sehr stabil und hat alle Features, die ich bislang implementieren wollte. Neue Funktionen sind daher in absehbarer Zeit nicht zu erwarten.

Changelog

2.12.7 2015-08-05
Fix timer sporadically not working properly (atomic access to timer counter).

2.12.6 2015-05-21
Add support for ATmega128.
Improved compiler error message in case of unsupported ATmega type.
Applied a patch to protothreads to get rid of the "unused PT_YIELD_FLAG" warnings.

2.12.5 2015-05-12
Removed gcc command line option that is not supported by WinAVR.
Fixed compilation error when the AUTH module is disabled.

2.12.4 2015-04-13
Removed wrong and useless pull-up settings for serial ports.

2.12.2 2014-10-28
Fix for wrong output on Port Y after oPY command with bit number 15-31. The problem did not occur on all gcc versions.

2.12.1 2014-04-23
Fixed compiler warnings that have been introduced by new avr-gcc version.

2.12.0 2014-03-16
Reduced size of hex file.
Added support for more serial ports.
Serial echo is now disabled by default (in serialconsole.h).

2.11.12 2014-03-02
Made serial port much more stable on Xmega devices with R/C oscillator.
Fixed buffer overflow when receiving an oversized packet.
Fixed a missing byte in DHCP discover request.
Added DHCP status info to the "ip" command.

Startseite   English version of this page

I/O Schnittstellen Module für USB und Ethernet

Mit I/O Schnittstellen Modulen steuert und überwacht man elektrische Einrichtungen. Da PC's keine herkömmlichen Parallel-Ports mehr haben, stelle ich hier einen Ersatz mit USB, Ethernet und Bluetooth vor. So kommt man je nach Mikrocontroller auf 19 bis 71 steuerbare Anschlüsse. Und mit Hilfe von ein paar billigen Schieberegistern sind noch mehr I/O Leitungen machbar.

Der Zugriff auf die I/O Ports erfolgt über einfache Textbefehle, so daß keine speziellen Treiber oder Libraries erforderlich sind. Es funktioniert daher mit nahezu jeder beliebigen Programmiersprache und jedem Betriebsystem, wie PC, Smartphones, Tablets, Raspberry Pi, usw.

Die Firmware enthält eine optionale Komponente, welche 8 Pins überwacht und bei einem Wechsel von Low nach High jeweils eine konfiguierbare Meldung per Email verschickt.

Darüber hinaus enthält die Firmware einen eingebetteten Webserver, mit dem man das Gerät konfiguriert. Der Webserver kann Dateien von einer SD Karte zum Download bereit stellen. Auch ohne SD Karte kann man als Softwareentwickler eigene Features und kleine funktionale Webseiten hinzufügen.

Der C Compiler zum Programmieren des Mikrocontrollers ist kostenlos für Windows, Linux und Mac OS erhältlich. Die Beispiel App "ioModule" für PC und Smartphones kannst du mit Qt Creator compilieren. Schaue dir auch die Alarmanlage als Anwendungsbeispiel an. Eine ausführliche Erklärung, wie das zugrunde liegende µIP von Adam Dunkels funktioniert, findest du hier.

Download source code, compiled binaries (hex files).

So funktioniert es

Baue eine Verbindung zum I/O Modul auf. Dann sende Befehle in Text-Form und empfange Antworten auf dieser Verbindung. Zum Testen von seriellen, USB und Bluetooth Verbindungen empfehle ich das Hammer Terminal Programm oder Cutecom. Um den TCP-IP Socket zu testen, empfehle ich Netcat (nc) oder telnet.

Zum Beispiel setzt man so den Pin PC3 auf High:

Sende: oPC3,1
Antwort: Ok

So fragt man den Port D als Hexadezimalzahl ab:

Sende: iPD
Antwort: PD=60

Bei HTTP hängt man die Befehle an die URL an:

Request: http://192.168.0.123/io?oPC3,1
Response: Ok

Den vollständigen Befehlsatz findest du weiter unten. Du kannst über 100 Befehle pro Sekunde ausführen, aber kurzzeitige Verzögerungen durch das Netzwerk sollten eingeplant werden.

Voraussetzungen

Du kannst den Ethernet Controller an beliebige Pins des Mikrocontrollers anschließen, da die Zuordnung der Pins konfigurierbar ist.

Bei Chip45 kann man das betriebsfertige CrumbX1-Net Modul mit vorinstallierter Firmware kaufen. Oder du baust die Hardware anhand der Schaltpläne im Download selbst.

Um die Firmware in den Mikrocontroller zu laden, benötigst du einen zum Chip kompatiblen Programmieradapter (ISP für ATmega, PDI für Xmega).

Schnittstellen

Eine optionale Speicherkarte kann bei 3,3V direkt an den SPI Port des AVR angeschlossen werden. Sie bietet sich zum Sammeln und Speichern von größeren Datenmengen an.

Die Chinesischen Bluetooth Module HC-05 und HC-06 passen perfekt auf das CrumbX1-NET Modul. Ansonsten empfehle ich auch das BTM-222, welches mit externer Antenne mehr Reichweite verspricht.

Für USB benötigst du einen USB-UART Chip, wie den FT232R, den CP2102, CH-340 oder CH-341.

Die Anzahl der I/O Ports kann mit Schieberegistern vom Typ 74HC165 und 74HC595 erweitert werden. So kommt man auf jede Menge zusätzliche Eingänge und Ausgänge. Außerdem wird ein serieller 12bit ADC vom Typ MCP3204 oder MCP3208 unterstützt.

Protokolle

Bildschirmfotos

I/O-Befehle über TCP Socket (Telnet):


I/O-Befehle über seriellen Port (USB):


I/O-Befehle über HTTP:


Web Server:










Die Beispiel App "ioModule" steuert zwei LEDs an:

Befehlssatz

Digitale I/O

Das Modul wird mit vier Basis-Befehlen gesteuert, nämlich d, p, o und i.

Diese Befehle können sich wahlweise auf eine einzelne I/O Leitung (PB7), einen ganzen Port (PB) oder alle Ports auf einmal beziehen:

PB7 und PB sind hier nur als Beispiel genannt, es funktioniert mit allen Ports genau so. Wenn man alle Ports auf einmal anspricht, muss man je nach AVR Größe mit 8 oder 16-Stelligen Hexadezimal-Zahlen arbeiten, entsprechend den Ports: DDCCBBAA oder HHGGFFEEDDCCBBAA.

Bei Befehlen für einzelne Pins kann man anstelle von 0 und 1 auch Buchstaben verwenden:

Die Befehle d, p und o antworten immer mit "Ok". Der Befehl i antwortet so:

Analoge Eingänge

Je nach Fähigkeiten des Mikrocontrollers stehen folgende Referenzen zur Verfügung:

Beispiel für den r Befehl:

Beim a Befehl gibt man die Nummer des analogen Eingangs (Kanals) an, zum Beispiel:

Erweiterte Eingänge

Mit Hilfe eines Schieberegisters kann man die Anzahl der Eingänge erweitern. Diese zusätzlichen Eingänge nenne ich "Port X". Sie können mit dem i Befehl abgefragt werden:

Je nach Größe des Schieberegisters antwortet der iPX Befehl mit unterschiedlich großen Hexadezimal-Zahlen (8-32 Bits).

Erweiterte Ausgänge

Mit Hilfe eines Schieberegisters kann man die Anzahl der Ausgänge erweitern. Diese zusätzlichen Ausgänge nenne ich "Port Y". Sie können mit dem o Befehl beschrieben werden:

Je nach Größe des Schieberegisters erwartet der oPY Befehl unterschiedlich große Hexadezimal-Zahlen (8-32 Bits). Der aktuelle Zustand von Port Y kann mit dem i Befehl eingelesen werden.

Die Befehle d und p stehen bei erweiterten Eingängen und Ausgängen nicht zur Verfügung!

Weitere Befehle