In diesem kleinen Blog post möchte Ich euch den WEMOS D1 Mini vorstellen. Er basiert auf dem bekannten ESP8266 Modul von Espressif.

Einführung

Als ich das erste mal mit Arduinos in Berührung kam, war ich von dem ganzen Arduino-Universum sehr begeistert. Endlich etwas welches es einem erlaubte Mikrocontroller einfach zu programmieren. Es gab vorher schon so einige Ansätze aber irgendwie hat sich nichts durchgesetzt. Ich erinnere mich noch an BASCOM.

Motivation

Etwas fehlte aber an dem ganzen Arduino-Zeug. Nämlich eine einfache Möglichkeit auf Sensordaten zuzugreifen. Vor ein paar Jahren beschäftigte ich mich daher mit den kleinen NRF24L01-Modulen. Ich find die Dinger immer noch Klasse, allerdings haben sie einige Nachteile. Man braucht erstmal noch einen Arduino oder einen Raspberry als Receiver, welcher die Daten empfängt aufbearbeitet und loggt. Ein weiterer Nachteil des Moduls, den ich als ganz gravierend empfand war die Reichweite. Mit ein paar Modulen mit erhöhter Sendeleistung kam ich gerade einmal auf weniger als 50m. Mit den ganz kleinen Modulen nur auf wenige Meter. Da reichte es schon aus aus dem Zimmer herauszugehen und man hatte keinen Empfang mehr. Mittlerweile gibt es ja LoRa.

ESP8266

Im Prinzip ist ein ESP8266 ein kleiner Microcontroller mit WLAN. Der ESP8266 lässt sich auch, ganz wie man es gewohnt ist, mit dem Arduino-Framework programmieren.

Ich hatte auch schon damals von dem ESP8266 gehört, aber es gab nur Module die über die Serielle Schnittstelle kommuniziert hatten. Das ganze nahm auch erst langsam Schwung auf und entwickelte sich dann zu einem "Boom".

Zu erwähnen sind hier vor allem das ESP8266 Github Projekt.

Um die ESP8266 Module hat sich dann noch ein Board durchgesetzt. Im Prinzip das kleine ESP8266 Modul mit einem freundlicheren Layout. Die Leute von Wemos haben hier saubere Arbeit geleistet. https://www.wemos.cc/

Mittlerweile gibt es den Wemos auch in einem Arduino UNO Layout. Allerdings sollte hier darauf geachtet werden, dass der Wemos nicht exakt den Arduino ersetzt. Er hat zum Beispiel nur einen Analog input.

turaisde_blog_img_9451
WEMOS D1 in der Revision 2 im UNO Layout. Leider gibt es hier nur einen Analog Input.

Programmierung

Zur programmierung des WEMOS benutzte ich PlatformIO.
https://platformio.org/
Im Prinzip ist das wie die, bestimmt bekannte, Arduino IDE.

Wer sich nur für den Core interessiert ist hier ganz gut aufgehoben: http://docs.platformio.org/en/latest/core.html

Ich habe mir das ganze mit CLion eingerichtet, im Prinzip kann man jeden Editor seiner wahl benuzten. Wer will kann zum Beispiel Visual Studio Code benutzen.
Manchmal laden die Bibliotheken in CLion nicht richtig. Mir hat es immer geholfen zuerst ein:
platformio init --board d1_mini
zu machen und danach im automatisch generierten src-Folder eine main.cpp mit folgendem Inhalt anzulegen:

#include <Arduino.h>

void setup() { 

}

void loop() {

}

Danach nochmal ein:
platformio init --ide clion --board d1_mini

und die Bibliotheken wurden bei mir im CLion richtig erkannt. Wichtig wäre noch im Clion nie den Play Button zu benutzten sondern immer die unterschiedlichen Build-Commands welche oben rechts erscheinen.

Wem das ganze zu umständlich ist kann aber auch einfach die IDE von Platformio benutzen, im Prinzip ist das der Atom Editor mit dem Platformio Plugin.

Treiber

Für den Wemos braucht ihr unter Linux keinen Treiber. Unter Mac OSX und Windows werden Treiber für den USB-to-SERIAL Chip benötigt. Die gibt es unter anderem auf der Wemos Seite:
https://docs.wemos.cc/en/latest/ch340_driver.html CH340 Treiber

Web-Server

Ein kleiner Web-Server ist in den ESP8266 Examples gleich mit dabei:

https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WebServer/examples/HelloServer/HelloServer.ino

Für einfache Projekte ohne Logging, in denen Ihr nur ein paar Werte ablesen wollt ist das ja schonmal ganz ideal.

BLYNK

Blynk besteht aus einer App fürs Handy und einem Server mit einer gut dokumentierten API und einem kleinen Admin Panel. Im Prinzip ist das ein MQTT

Zum Blynk Projekt: https://www.blynk.cc/

Ihr könnt entweder den Server von den Blynk Leuten benutzen oder euren eigenen Server im Netzwerk aufsetzen.

Hier der Docker-Container dazu: https://hub.docker.com/r/mpherg/blynk-server/

https://examples.blynk.cc/?board=WeMos D1&shield=ESP8266 WiFi&example=GettingStarted%2FPushData

Der obige Link geht direkt zu einem Blynk-Example. Ich finde die App relativ selbsterklärend spielt einfach ein bisschen damit rum.

Wichtig! Wenn Ihr einen eigenen Blynk Server benutzt, dann habt ihr standardmäßig 100k "Energie" könnt also sehr viel "Blynk"-Sachen benuzten. Weiterhin bleibt alles bei euch im Heimnetzerk. Nachteil ist allerdings, dass Ihr von aussen nicht auf euren Blynk Server zugreifen könnt. Entweder Ihr richtet eine Port-Freigabe ein oder Ihr habt noch irgendwo einen kleinen V-Server rumliegen. Sowas gibt es z.B. bei Hetzner Online für nur ca. 3EUR/Monat.

Man kann folgende initalisierungen benutzen:

Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);

PIN-OUT

Zu den PINs sei noch folgendes gesagt, es gibt zwar D0 bis D8 und man könnte sich erstmal denken, schön viele freie PINs zur Verfügung. Jedoch sind viele PINs mit einer doppelten Funktion ausgestattet, manch andere sind dauerhaft auf die Versorgungsspannung hochgezogen. Hier unten also eine kleine Tabelle über den PINOUT. Ich möchte aber auch noch auf folgende Website hinweisen: https://espeasy.readthedocs.io/en/latest/Reference/GPIO.html#best-pins-to-use-on-esp8266

Wenn man jetzt also die I2C-Schnittstelle benutzt, gibt es nicht so viel freie PINs zur Verfügung.

Bezeichnung FunktionESP8266 Bezeichnung
TX TXDTXD
RX RXDRXD
A0 Analog input, max 3.3V input A0
D0 IO GPIO16
D1 IO, SCLGPIO5
D2 IO, SDAGPIO4
D3 IO, 10k Pull-upGPIO0
D4 IO, 10k Pull-up, BUILTIN_LEDGPIO2
D5 IO, SCKGPIO14
D6 IO, MISOGPIO12
D7 IO, MOSIGPIO13
D8 IO, 10k Pull-down, SSGPIO15
G GroundGND
5V 5V-
3V3 3.3V3.3V
RST ResetRST
turaisde_blog_img_9468
Wemos D1 Pro mit Möglichkeit zum Anschluss einer externen Antenne

WEMOS I2C - Schnittstelle

Oft gebraucht und leider nicht beschriftet, ist die I2C Schnittstelle.
D1 -> SCL
D2 -> SDA