ESP8266 NodeMCU
Überblick
Das NodeMCU Development Kit ist ein Breakout-Board des ESP-12 mit einem ESP8266-Chip. Das charakteristische Merkmal aller ESP-Boards ist ihre WLAN-Schnittstelle. Dieses Kit ist eine preiswerte Alternative zu Arduino MKR WiFi.
Der Vorteil gegen andere Breakout-Board Varianten ist:
- Integrierte USB-Schnittstelle zum Flaschen
- Spannungsversorgung von 5 V.
- Die maximale Spannung am Pin VIN sollte Spannungsspitzen von 20V nicht überschreiten.
Datenblatt | https://www.espressif.com/sites/default/files/documentation/esp8266-technical_reference_en.pdf |
Schaltplan | https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF |
ESP8266 NodeMCU buils-in LED’s
Setup zum Programmieren von ESP8266 NodeMCU
Unter Windows kann es vorkommen, dass der Treiber der USB zu UART Bridge (CP210x) nicht installiert ist. In der ArduinoIDE ist der Port in diesem Fall nicht auswählbar, obwohl die NodeMCU über USB mit dem Rechner verbunden ist. Unter den Eigenschaften wird Code 28 im Gerätestatus angezeigt.
Der Treiber kann unter folgendem Link heruntergeladen werden. Die Installation erfolgt über den Windows Geräte-Manager. Dafür muss man die heruntergeladene ZIP-Datei vorher entpacken.
https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=download
Eigenschaften → Treiber → Treiber aktualisieren → Auf meinem Computer nach Treibern suchen → entpackten Ordner auswählen.
Arduino IDE Setup
1. Folgende URL's müssen bei File -> Preferences... unter additional board manager ergänzt werden.
https://dl.espressif.com/dl/package_esp32_index.json
http://arduino.esp8266.com/stable/package_esp8266com_index.json
2. Den Board Manager ergänzen um esp8266 by ESP8266 Community.
Arduino IDE Sketches
ESP8266 Over-the-Air Update
Die integrierte WLAN-Schnittstelle muss nicht immer dafür genutzt werden, mit dem ESP8266 Daten zu versenden. Die Schnittstelle kann auch ausschließlich zum Programmupload genutzt werden. Initial muss nur ein mal über die USB-Schnittstelle die Basic-OTA-Konfiguration aufgespielt werden. Jeder folgende Programmcode muss diese Konfiguration beibehalten. Unter der Voraussetzung, dass sich die Zugangsdaten oder der die SSID-Bezeichnung des WLANs nicht ändern, wird keine USB-Schnittstelle zum Programmupload mehr benötigt.
ESP8266 General Purpose Input/Output Interface (GPIO)
ESP8266 NodeMCU hat 16 GPIOs zur Verfügung. Die GPIOs können mit einfachen Programmanweisungen gesteuert werden. Es wird empfohlen, die fest definierten (sekundären) Funktionen der Pins zu berücksichtigen, damit keine unerwünschten Effekte mit angeschlossener Peripherie auftreten. Diese Funktionen sind für das Programmieren über die USB-Schnittstelle bzw. beim Booten notwendig.
- GPIO2 ist mit der Build-in LED auf dem ESP-12 Modul verbunden.
- GPIO16 ist mit der Build-in LED auf der ESP-12e NodeMCU verbunden.
/*Setup Digital Pins*/
pinMode (16, INPUT); // GPIO 16 = D0
pinMode (5, OUTPUT); // GPIO 5 = D1
/*Read or Write Digital Pins*/
int input = digitalRead(16);
digitalWrite(5, HIGH);
Außer GPIO16 kann jeder GPIO als Pull-up Pin genutzt werden. Nur GPIO16 kann als Pull-down Pin genutzt werden.
pinMode (16, INPUT_PULLDOWN_16); // GPIO 16 = D0
pinMode (5, INPUT_PULLUP); // GPIO 5 = D1
Bei der Nutzung der IO's ist es sinnvoll, die genauen Details zu kennen, damit unerwünschte Effekte vermieden werden. Die programmierbaren IO-Pins können für unterschiedliche Zwecke genutzt werden. Folgende Tabelle zeigt die Besonderheiten.
D3 | GPIO0 | - LOW beim Booten aktiviert Firmware-Upload - zum Normalstart offen oder Pull-up nach HIGH |
TX | GPIO1 (TXD) | - Serieller Ausgang beim Booten - Nicht auf LOW ziehen! |
D4 | GPIO2 (TXD) | - Serieller Ausgang beim Booten - Nicht auf LOW ziehen! - ESP-12 build-in LED |
RX | GPIO3 (RXD) | - Serieller Eingang |
D0 | GPIO16 | - NodeMCU-12 build-in LED |
Folgender Kommentar zu der ESP8266 NodeMCU GPIO Pinbelegung kann als Notiz in den Quellcode kopiert werden. Die eingeklammerten Pins verweisen auf die sekundären Funktionen.
/* ESP8266 NodeMCU GPIO Pins
PIN GPIO
(D0) = 16
D1 = 5
D2 = 4
(D3) = 0
(D4) = 2
D5 = 14
D6 = 12
D7 = 13
D8 = 15
(RX) = 3
(TX) = 1
SD3 = 10
SD2 = 9
-----------------------------*/
ESP8266 Interrupt Service Routine (ISR)
Außer GPIO16 kann jeder ESP8266 GPIO Pin mit einer ISR konfiguriert werden.
Der Quellcode einer Interrupt Service Routine für den ESP8266 ist vergleichbar mit dem Quellcode für einen Arduino-Chip. Man muss allerdings beachten, die Funktion der ISR im RAM auszuführen (siehe unten).
Es wird empfohlen, die fest definierten (sekundären) Funktionen der Pins zu berücksichtigen, damit keine unerwünschten Effekte mit angeschlossener Peripherie auftreten. Diese Funktionen sind für das Programmieren über die USB-Schnittstelle bzw. beim Booten notwendig. Siehe dazu die Tabelle im Kapitel zu den GPIOs.
attachInterrupt(digitalPinToInterrupt(GPIO), ISR, mode);
attachInterrupt() | Setup Interrupt in void setup( ) |
digitalPinToInterrupt(GPIO) | Setzt GPIO als Interrupt-Pin. Außer GPIO16 kann jeder GPIO als Interrupt-Pin genutzt werden. |
ISR | Ist der Name der Funktion, die aufgeführt wird. Die Funktion muss vor void setup() definiert werden, damit sie attachInterrupt übergeben werden kann. |
mode | Kann CHANGE , FALLING , RISING , LOW , HIGH sein. |
An die Funktion muss das Attribut ICACHE_RAM_ATTR zugewiesen werden. Das speichert den auszuführenden Code im RAM des ESP8266. Da der Flash Speicher verhältnismäßig langsam ist, können sonst ungewollte Effekte austreten.
Beispielcode (ohne Funktion):
void ICACHE_RAM_ATTR ISR() {
Serial.println("ISR");
}
void setup() {
pinMode(5, INPUT_PULLUP); //D1
attachInterrupt(digitalPinToInterrupt(5), ISR, RISING);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
delay(1000);
Serial.println("loop");
}
ESP8266 Pulsweitenmodulation (PWM)
ESP8266 NodeMCU hat 9 PWM Pins zur Verfügung. Die Pins können mit einfachen Programmanweisungen gesteuert werden. Es wird empfohlen, die fest definierten (sekundären) Funktionen der Pins zu berücksichtigen, damit keine unerwünschten Effekte mit angeschlossener Peripherie auftreten. Diese Funktionen sind für beim Booten notwendig.
void setup() {
pinMode(15, OUTPUT); //D8 PWM
analogWriteFreq(25000); // set PWM frequency to 25kHz
analogWrite(15, 128); // set PWM duty cycle
}
pinMode(15, OUTPUT); | Konfig. PWM-Pin als Output. |
analogWriteFreq(25000); | Konfig. PWM-Frequenz 25 kHz. Default ist 1 kHz. |
analogWrite(PIN, PWMRANGE); | Konfig. PWM-Range. Default ist 255 (=100 %). |
analogWrite(15, DUTY); | Konfig. PWM-Duty-Cycle. Default ist 0 bis 255 (0 5 bis 100 %). |
Bei der Nutzung der PWM ist es sinnvoll, die genauen Details zu den Pins zu kennen, damit unerwünschte Effekte vermieden werden. Die programmierbaren PWM-Pins können für unterschiedliche Zwecke genutzt werden. Folgende Tabelle zeigt die Besonderheiten.
D3 | GPIO0 | - LOW beim Booten aktiviert Firmware-Upload - zum Normalstart offen oder Pull-up nach HIGH |
D4 | GPIO2 (TXD) | - Serieller Ausgang beim Booten - Nicht auf LOW ziehen! - ESP-12 build-in LED |
Folgender Kommentar zu der ESP8266 NodeMCU PWM Pinbelegung kann als Notiz in den Quellcode kopiert werden. Die eingeklammerten Pins verweisen auf die sekundären Funktionen.
/* ESP8266 NodeMCU PWM Pins
PIN GPIO
D1 = 5
D2 = 4
(D3) = 0
(D4) = 2
D5 14
D6 12
D7 13
D8 15
-----------------------------*/