Arduino Uno Clone mit WiFi

Vom Arduino Uno existieren zahlreiche Nachbauten, teilweise auch mit abweichendem Aufbau. Gemeinsam ist den meisten Nachbauten, dass sie statt einem eigenen Controller für die USB-Verbindung einen USB-TTL-Konverter CH340 nutzen. Die Verbindung zur Arduino IDE erfolgt aber auf die gleiche Weise über eine serielle Schnittstelle und der dafür nötige Bootloader des Arduino Uno funktioniert auch mit diesen Boards und ist in der Regel auch schon vorhanden.

Das hier gezeigte Modell habe ich privat zu einem Preis von 14,95 EUR gekauft. Angeboten wurde es als „WiFi R3 ATmega328P+ESP8266 32Mb memory + UNO USB-TTL CH340G für Arduino NodeMCU“ und die Lieferung erfolgte ohne jede Dokumentation. Auch auf der auf der Platine selbst habe ich keine Hinweise zum Hersteller oder Modell gefunden. Bei meinen Recherchen bin ich aber auf den „RobotDyn UNO+WIFI“ gestoßen, der vom Aufbau her weitgehend identisch mit meinem Modell ist. Die Dokumentation dazu findet man auf der Website des Herstellers.

Robot Dyn Arduino Uno mit WiFi

Aufbau und Programmierung

Der Aufbau ist eine Kombination aus einem ATmega328P, einem ESP8266 mit WiFi-Unterstützung und ein CH340G USB-TTL-Konverter für die Ansteuerung der seriellen Schnittstellen der Controller. Im Gegensatz zum Arduino Uno wird für den USB-Anschluss  eine MicroUSB-Buchse verwendet.

Eine zusätzliche Buchse für die Spannungsversorgung ist auch vorhanden, aber recht unsinnig mit „DC6-0V“ beschriftet – offenbar handelt es um einen Nachbau des Orginals von RobotDyn, wo „DC 6-9V“ zu finden sind. Auf der Rückseite ist bei beiden Modellen dagegen als Versorgungsspannung von 7-12V angegeben, was dem Spannungsbereich des Arduino Uno entspricht. Dort ist auch der Text  „WiFi-ESP8266+8Mb flash“ zu finden, was 1 MiB entsprechen würde. Allerdings hat der verbaute Speicherchip Winbond 25Q32JVSIQ eine Kapazität von 32 Megabit, was 8 MiB entsprechen würde.

Die Steckerleisten entsprechen in der Anordnung und Belegung dem Arduino Uno, weshalb entsprechende „Shields“ direkt nutzbar sind. Ebenso ist ein ISP-Anschluss vorhanden, um den ATmega328P über einen Programmer anzusteuern und eine Reset-Taste. Darüber kann man auch den Bootloader neu schreiben, wenn nötig – der Bootloader für den Arduin Uno funktioniert auch mit diesem Board.

Zusätzlich sind zwölf Anschlüsse des ESP8266 als Pfostenstecker herausgeführt, der wie folgt belegt ist (von oben betrachtet mit den Anschlüssen am rechten Rand des Boards):

GPIO4 TXD GND
GPIO2 GPIO12 GPIO2
CH_PD GPIO16 RXD
RST VCC TOUT

Die Beschriftung auf dem Board ist etwas irritierend, weil der Hersteller nicht „GPIO“ sondern „GP10“ angegeben hat – ein häufiges Problem bei Produkten aus China, wenn Schriftzeichen nicht verstanden werden und nur optisch ähnliche Symbole genutzt werden.

Neben dem Pfostenstecker gibt es noch eine kleinere Reset-Taste für den ESP8266 und am Rand der Platine einen Pigtail-Anschluss für eine externe WLAN-Antenne zur Verbesserung der Reichweite.

Über den DIP-Schalter kann man einstellen, wie die Komponenten verbunden werden. Der Schalter 8 ist ohne Funktion und kann immer ausgeschaltet bleiben.

1 2 3 4 5 6 7
CH340G → ESP8266 (Programmiermodus) on on on
CH340G → ESP8266 (Datenübertragung) on on
CH340G → ATmega328P on on
ATmega328P → ESP8266 on on
Keine Verbindung untereinander

Die Beschriftung auf der Platine gibt die Funktion ebenfalls an, wobei hier „MCU“ für den ATmega328P steht und „ESP“ für den ESP8266. Die Beschriftung „GND-OPIOO“ soll wohl für „GND-GPIO0“ stehen, denn der Schalter 7 verbindet GPIO0 mit GND, um den ESP8266 in den Programmiermodus zu versetzen.

Der schematische Aufbau dazu ist wie folgt:

Robot Dyn Arduino Uno mit WiFi, schematischer Aufbau

Um die USB-Verbindung zum CH340G zu benutzen, ist ggf. noch ein Treiber erforderlich. Siehe dazu auch:

https://www.makershop.de/ch340-341-usb-installieren/

https://sparks.gogo.co.nz/ch340.html

In der Arduino IDE kann man den ATmega328P als „Arduino UNO“ über die entsprechende serielle Schnittstelle programmieren. Auch der „Blink“-Sketch funktioniert – die LED dafür ist auf dem Board vorhanden.

Um den ESP8266 zu programmieren, muss man noch die Unterstützug dafür im Board-Manager der Arduino IDE installieren. Benötigt wird „esp8266“ von der „ESP8266 Community“. Danach kann man den ESP8266 als „Generic ESP8266 Module“ ansprechen.

Neben der Verbindung über USB steht auf dem Board auch eine sechspolige ISP-Schnittstelle zur Verfügung, mit der man den ATmega328P über einen Programmer ansprechen kann. Darüber kann man auch den Arduino-Bootloader neu schreiben, wenn nötig. Ein Vorteil dieser Verbindungsart: man muss zur Programmierung die DIP-Schalter nicht jedesmal umstellen, sondern kann diese auch direkt in der Einstellung für die Verbindung zwischen dem ATmega328P und ESP8266 belassen.

AT-Firmware für den ESP8266

Prinzipiell kann man den verbauten ESP8266 auch völlig unabhängig vom ATmega328P nutzen und eigene Software darauf verwenden. Die Idee dieses Aufbaus ist aber eigentlich, dass der ESP8266 vom ATmega328P über AT-Kommandos steuerbar ist.

AT-Kommandos gehen zurück auf die Zeit von Modems für das Telefonnetz, als Computer über eine serielle Schnittstelle das Modem über Text-Kommandos gesteuert haben. Konkret wurde diese Steuerung vom Hersteller Hayes eingeführt und danach von allen Anderen übernommen. AT steht dabei für „attention“. Man sendet dabei einen Text, wie „AT+GMR“  gefolgt von CR/LF und erhält dann eine Antwort wiederum als Text.

Um diese Funktion zu testen, kann man die DIP-Schalter 5 und 6 auf „on“ stellen, alle übrigen auf „off“, dann per USB verbinden und eine Verbindung mit dem seriellen Monitor der Arduino IDE mit 115200 Bit/s aufbauen. Sofern die nötige Firmware vorhanden ist, würde der ESP8266 AT-Kommandos mit CR+LF erwarten, d.h. man stellt die entsprechend Option auf „Both NL & CR“ ein.

Optionen für serielle Verbindung zum ESP8266 in der Arduino IDE

Leider klappte der erste Versuch nicht. Nachdem ich die DIP-Schalter entsprechend eingestellt und das USB-Kabel neu verbunden hatte, hat nur die RX-LED auf dem Board regelmäßig geblinkt, es wurde mit einer unbekannten Baudrate regelmäßig eines oder zwei Zeichen  gesendet und der ESP8266 hat auf keine Kommandos reagiert. Offenbar war die erforderliche Firmware nicht vorhanden.

Um die Firmware zur Nutzung mit AT-Kommandos zu flashen, bin ich wie folgt vorgegangen:

Eine aktuelle Version der Firmware von https://github.com/espressif/ESP8266_NONOS_SDK/releases herunterladen (bei mir war das Version 3.0.4). Diese Firmware erhält zwar keine neuen Features mehr und nur noch Bugfixes bei kritischen Fehlern, ist aber grundsätzlich benutzbar.

Das Flash-Tool von https://github.com/nodemcu/nodemcu-flasher herunterladen.

Die DIP-Schalter 5, 6 und 7 auf „on“, alle anderen auf „off“.

Das Board mit USB verbinden.

Das Flash-Tool starten und die Dateien entsprechend der Angaben in der Datei bin/at/README.md für „Flash size 8Mbit: 512KB+512KB“ angeben:

  • bin/boot_v1.2.bin an Adresse 0x00000
  • bin/at/user1.1024.new.2.bin an Adresse 0x01000
  • bin/esp_init_data_default_v05.bin an Adresse 0xfc000
  • bin/blank.bin an Adresse 0xfe000

NodeMCU Programmer, Konfiguration für AT-Firmware

Unter „Advanced“ habe ich folgende Optionen eingestellt:

  • Baudrate: 115200
  • Flash size: 1MByte
  • Flash speed: 26.7MHz
  • SPI Mode: QIO

NodeMCU Programmer, erweiterte Einstellungen

Schließlich unter „Operation“ den Flash-Vorgang mit einem Klick auf „Flash“ starten und abwarten. Sobald der in der Statusleiste wieder ein grüner Haken zu sehen ist, ist der Vorgang beendet und man kann die USB-Verbindung wieder trennen.

Für einen erneuten Test habe ich nun den DIP-Schalter 7 wieder auf „off“ zurückgestellt und das Board erneut über USB verbunden.

Ein Unterschied zur vorherigen Situation: die rote LED direkt beim ESP8266 leutet nun dauerhaft. Der erste Test mit dem seriellen Monitor der Arduino IDE ist jetzt aber auch erfolgreich – mit AT+GMR kann man die Firmware-Version abfragen, worauf ich jetzt auch eine Antwort erhalte:

Verwenden der AT-Kommandos

Eine Liste aller AT-Kommandos findet man im entsprechenden PDF-Dokument von Espressif. Eine ausführliche Erläuterung würde den Rahmen dieses Artikels sprengen – Beispiele für die Nutzung des ESP8266 über die serielle Schnittstelle findet man im Netz aber reichlich.

Dennoch soviel dazu:

Einen Webserver auf diese Weise aufzubauen, über den man den ATmega328P per Browser steuern kann, ist wenig sinnvoll. Zwar kann man rein technisch über AT-Kommandos auch einen Server im ESP8266 aktivieren, der eingehende Verbindungsanfragen entgegennimmt und die empfangenen Daten über die serielle Schnittstelle an den ATmega328P übergibt – allerdings müsste man dann faktisch einen Webserver für den ATmega328P nachbauen, der HTTP versteht und das wiederum mit lediglich 32 KiB Flash-Speicher und 2 KiB RAM.

Wesentlich effektiver ist es, den ESP8266 direkt für solche Zwecke zu nutzen und statt der Firmware für die Nutzung mit AT-Komandos eigene Software für den ESP8266 zu schreiben. Dort steht selbst bei einfachen Modellen 1 MiB Flash-Speicher und 64 KiB RAM zur Verfügung. Darüber hinaus gibt es fertige Bibliotheken für den Aufbau eines Servers.

Ein bestehendes Arduino-Projekt mit einem ESP8266 für das senden von Daten an einen Server zu erweitern, kann dagegen durchaus sinnvoll sein. Die Verbindungsdaten zum WLAN kann man vorab konfigurieren und dauerhaft speichern lassen, so dass der ATmega328P nur noch den Verbindungsaufbau zum Server und das Senden der Daten durchführen muss.

Öffentlichen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Dies ist kein Kontaktformular! Wenn Du mir eine persönliche Nachricht schreiben möchtest, benutze die E-Mail-Adresse in meinem Impressum.

Du kannst die folgenden HTML-Tags im Kommentar verwenden:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>