Kurzeinstieg: WEMOS D1 Mini
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.
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:
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 | Funktion | ESP8266 Bezeichnung |
TX | TXD | TXD |
RX | RXD | RXD |
A0 | Analog input, max 3.3V input | A0 |
D0 | IO | GPIO16 |
D1 | IO, SCL | GPIO5 |
D2 | IO, SDA | GPIO4 |
D3 | IO, 10k Pull-up | GPIO0 |
D4 | IO, 10k Pull-up, BUILTIN_LED | GPIO2 |
D5 | IO, SCK | GPIO14 |
D6 | IO, MISO | GPIO12 |
D7 | IO, MOSI | GPIO13 |
D8 | IO, 10k Pull-down, SS | GPIO15 |
G | Ground | GND |
5V | 5V | - |
3V3 | 3.3V | 3.3V |
RST | Reset | RST |
WEMOS I2C - Schnittstelle
Oft gebraucht und leider nicht beschriftet, ist die I2C Schnittstelle.
D1 -> SCL
D2 -> SDA