Foto vom ESP-01 Modul
ESP-01 Modul

Foto von einem Arduino Nano
Arduino Nano Board

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 zahlreiche selbst gebaute elektronischen Geräte per WLAN fernsteuern.

Meine Firmware kontrolliert alle freien analogen und digitalen I/O Pins des AVR Mikrocontrollers, das sind je nach Typ 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 können Sie mit Qt Creator compilieren.

Download source code, compiled binaries (hex files).

Anmerkung: Ich wurde einige male gefragt, warum ich für diese Anwendung neben dem ESP Modul einen zweiten Mikrocontroller einsetze:

  1. Weil jemand das WLAN Modul überwachen und ggf. einen Hardware-Reset auslösen sollte.
  2. Weil ich den selben C Quelltext (io-commands.c) verwenden wollte, den auch die anderen Projekte für verkabeltes Netzwerk und USB/Bluetooth enthalten.
  3. Weil ich einen USB Port für Konfiguration und Debugging wollte und ein Arduino Nano Klon nicht mehr kostet, als ein USB Adapter.

So funktioniert es

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

Zum Beispiel setzen Sie so den Pin PC3 auf High:

Sende: oPC3,1
Antwort: Ok

So fragen Sie Port D als Hexadezimalzahl ab:

Sende: iPD
Antwort: PD=60

Den vollständigen Befehlsatz finden Sie weiter unten. Sie können ungefähr 4 Befehle pro Sekunde ausführen.

Hardware-Voraussetzungen

*=Beim Crumb644 muss eine Leiterbahn am USB-UART Chip unterbrochen werden um einen 1k Ohm Widerstand einzufügen. Aufgrund der winzigen Abmessungen empfehle ich dies nur Elektronikern mit viel Löterfahrung. Die oben genannten AVR Boards sind alle mit vorinstalliertem Bootloader erhältlich, so daß Sie keinen extra Programmieradapter benötigen.

Bildschirmfotos

Test mit Netcat:
Bildschrimfoto vom Test mit Netcat

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!

Spezielle Befehle

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

Darüber hinaus können Sie alle AT-Befehle verwenden, die das WLAN Modul versteht (außer AT+CIPSEND). Wobei immer nur die erste Antwort-Zeile zurückgeliefert wird.