Embedded AVR Webserver CumbX1-NET von Chip45 mit Bluetooth Modul HC-06
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 sollten Sie daher in absehbarer zeit nicht 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.

...

2.11.0 2012-04-20
Add support for SD/MMC card slot

...

2.10.0 2012-03-09
Add support for CrumbX1-NET module and other Xmega devices.

...

2.9.0 2012-02-23
Add support for more I/O pins using shift registers

...

2.8.0 2009-12-10
Added support for configurable hardware layout.
Added display of stored settings in config.shtml.
Added support for AVR with more than 20Mhz.
Added support for port E, F, G, H, J, K and L

...

2.7.0 2009-10-03
Added authentication to httpd and socketd.
Added smtp client.
Added port D monitor with eMail notification.

...

2.6.0 2009-09-10
New web form to execute I/O commands via JavaScript (AJAX).

...

2.5.0 2009-08-30
Added serial port (USB) daemon
Added compatibility to Crumb-NET v2.0 and v2.1

...

2.4.0 2009-04-18
Added telnet server for faster i/o commands.

...

2.3.0 2009-04-17
Added the same commands as my USB firmware supports, through the URL http://address/io?command, see io_help.shtml for the list of commands.

...

2.2.0 2009-04-16
Added status display for port B and D.
Added display for the analog inputs.

...

2.1.0 2009-04-14
Added DHCP client
Added configuration page for IP-Address and DHCP
Added function to display the own MAC address
Added UDP protocol and statistics

...

2.0.0 2009-04-11
Major parts of the code has been rewritten to fix bugs, improve performance and add new features.
Add missing documentation.

...

1.3
Last version of Stefan Perzborn / Chip45.
My release 2.0.0 is based on release 1.3 with friendly permission of the author.

Startseite    English version of this page

I/O Schnittstellen Module mit Ethernet

Mit I/O Schnittstellen Modulen steuern und überwachen Sie elektrische Einrichtungen.

Mit den Informationen dieser Webseite bauen Sie sich ein I/O Interface Modul, welches per Ethernet, USB oder Bluetooth mit dem Computer vebunden wird. Das ergibt je nach Mikrocontroller 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.

Darüber hinaus enthält die Firmware einen eingebetteten Webserver, mit dem sie schöne Bedienfelder in HTML und Javascript erstellen. Sie können sogar emails senden.

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 können Sie mit Qt Creator compilieren. Schauen Sie sich auch die Alarmanlage als Anwendungsbeispiel an.

Eine ausführliche Erklärung, wie das zugrunde liegende µIP von Adam Dunkels funktioniert, finden Sie hier.

Download NET-IO-Modul.zip.

So funktioniert es

Bauen Sie eine Verbindung zum I/O Modul auf. Dann senden sie Befehle in Text-Form und empfangen 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 setzen Sie so den Pin PC3 auf High:

Sende: oPC3,1
Antwort: Ok

So fragen Sie 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 finden Sie weiter unten. Sie können über 100 Befehle pro Sekunde ausführen.

Voraussetzungen

Sie können den Ethernet Controller an beliebige Pins des Mikrocontrollers anschließen, da die Zuordnung der Pins konfigurierbar ist.

Bei Chip45 können Sie das betriebsfertige CrumbX1-Net Modul mit vorinstallierter Firmware kaufen, sowie ein Ethernet Interface ohne Mikrocontroller. Oder sie bauen die Hardware anhand der Schaltpläne im Download selbst.

Um die Firmware in den Mikrocontroller zu laden, benötigen Sie 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 benutzen Sie 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 kommen Sie 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):
Bildschrimfoto von I/O Befehle über TCP Socket

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

I/O-Befehle über HTTP:
Bildschrimfoto von I/O-Befehle über HTTP

Web Server:
Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Die Beispiel App "ioModule" steuert zwei LED's an:
Bildschirmfoto von der Demo App in C++ Bildschirmfoto von der Demo App in C++

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