Arduino Nano + ESP-01 Modul

Changelog

1.0.7 11.03.2016
Add a watchdog which resets the WLAN module when it hangs.

1.0.6 10.03.2016
Add system clock initialization code for Xmega controllers.

1.0.5 09.03.2016
Improved timing and source code structure.

1.0.4 08.03.2016
The correct line-feed format for the WLAN module is now auto-detected. Debugging via SERIAL_ECHO option is now disabled by default.

1.0.3 07.03.2016
Reduced RAM usage a lot and improved stability.

1.0.2 05.03.2016
Add hardware layouts for Arduino Uno, Crumb328, Crumb644, Crumb128 and Crumb2561.

1.0.1 05.03.2016
AT and I/O commands can now be executed on both WLAN and USB.

1.0.0 03.03.2016
First release

Startseite   English version of this page

I/O Schnittstellen Module für WLAN

Mit einem AVR Mikrocontroller Board und einem WLAN Modul kann man selbst gebaute elektronische Geräte per WLAN fernsteuern. Diese Lösung bietet sich als Ersatz für herkömmliche Parallel-Ports an, mit denen aktuelle PC's leider nicht mehr ausgestattet sind. Sie erhalten je nach Mikrocontroller 16 bis 82 steuerbare Anschlüsse. Und mit Hilfe von ein paar billigen Schieberegistern sind noch mehr 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.

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.

Download Quelltext und Schaltplan, Compilierte Firmware (hex files).

So funktioniert es

Nach einmaliger Einstellung der Netzwerk-Parameter, baue eine Verbindung zum WLAN Modul auf Port 23 auf. Ich bevorzuge zum Testen das Programm Netcat (nc). Sende Befehle in Text-Form und empfange die Antworten.

Zum Beispiel setzt man so den Pin PC3 auf High:

Sende: oPC3,1
Antwort: Ok

So fragt man Port D als Hexadezimalzahl ab:

Sende: iPD
Antwort: PD=60

Den vollständigen Befehlssatz findest du weiter unten. Du kannst ungefähr 4 Befehle pro Sekunde ausführen.

Schaltplan

Beim Crumb644 Modul fehlt der interne 1k Ohm Serienwiderstand zwischen USB-UART Tx und AVR Rx. Die manuelle Anpassung ist wegen der kleinen Bauteile schwierig.

Ich habe bei nachgemachten Arduino Nano mit CH340 Chip festgestellt, dass der AVR manchmal Probleme hat, Daten vom USB Anschluss zu empfangen. Diesen Designfehler kann man umgehen, indem man die "Rx" LED entfernt.

Die originalen Arduino Boards werden immer mit Bootloader verkauft. Bei den Crumb Modules ist dies ein optionales Feature.

Bildschirmfotos

Test mit Netcat:

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!

Spezielle Befehle

Mit dem ATZ Befehl wird ein Hardware-Reset des WLAN Moduls ausgelöst.

Darüber hinaus kannst du alle AT-Befehle verwenden, die das WLAN Modul versteht (außer AT+CIPSEND). Wobei deren Antworten auf eine Zeile beschränkt sind. Die folgende Befehlsfolge richtet die WLAN Verbindung des ESP Moduls ein: