Testprogramm für den ESP8266

Beim Setup, zur Nutzung des Mikrocontrollers ESP8266, wird ab und an ein Programm benötigt um die Funktionsweise des Controllers bzw. des Flashvorgangs zu testen. Der einfachste Weg dies zu testen ist es die integrierte LED des Controllers zu nutzen. Dazu wird folgendes Programm benötigt:

void setup() {
  pinMode(2, OUTPUT)
}

void loop() {
  digitalWrite(2, LOW);   
  delay(250);            
  digitalWrite(2, HIGH);  
  delay(250);
}

Das Programm definiert PIN 2 des Controllers als Ausgang und sendet anschließend alle 250 Millisekunden ein Signal an diesen PIN. Dies führt dazu dass die eingebaute LED des Controllers in kurzen Abständen blinkt und somit das Setup und der Controller getestet werden kann.

Feinstaub selber messen

Feinstaub wirkt in den Medien im Moment wie die ultimative Geißel des Menschheit. Problematisch an Feinstaub ist dass dieser nicht sichtbar ist und entsprechend tief in die Lunge vordringt. Da wäre es natürlich interessant zu erfahren, wie viel Feinstaub sich vor der eigenen Wohnung oder dem eigenen Haus befindet. Um dies zu messen wird ein entsprechendes Messgerät benötigt. Mit dem Bau eines solchen Messgerätes beschäftigt sich die Webseite luftdaten.info.

luftdaten.info

Neben einer Bauanleitung findet sich auf der Webseite weitere Informationen rund um das Projekt, z.B. um auf die API zur Abfrage der Daten zuzugreifen. Betrieben wird das Projekt vom OK Lab Stuttgart, welches zur Code for Germany Initiative gehört. Die Daten des fertigen Sensors können an luftdaten.info übertragen werden oder nur lokal genutzt werden. Quelltexte der verwendeten Soft- und Firmware sind auf GitHub zu finden. Lizenziert ist die Software unter der GPL in Version 3 und somit freie Software.

ESP8266 als Apple I Emulator

Mit dem ESP8266 wurde schon eine Vielzahl von interessanten Projekten entwickelt. Eines der Projekte welches aus der Menge heraussticht, ist ein Emulator für den Apple I. Besonders ist dabei nicht der Emulator als solches, sondern die Art wie er an den Bildschirm angeschlossen wird. Über einen Draht wird das Bild als PAL Signal ausgestrahlt und kann somit von jedem Fernseher empfangen werden.

Aktivieren Sie JavaScript um das Video zu sehen.
Video-Link: https://www.youtube.com/watch?v=rCqbB1UmW8o

Das System wird fast komplett kabellos betrieben, denn die Eingabe über die Tastatur erfolgt ebenfalls kabellos mittels Telnet. Um Software auf den Rechner zu bringen, ist ein TFTP-Server implementiert.

Das NodeMCU-Board in Version 3, mit einem verbauten ESP8266

Der Emulator emuliert die MOS 6502 CPU in ihrer Originalgeschwindigkeit von einem Megahertz und stellt 20 Kilobyte an RAM zur Verfügung. Das Projekt ist auf GitHub zu finden. Es ist unter der MIT-Lizenz lizenziert und damit freie Software.

Pinbelegung des NodeMCU-Boards

Wenn man einen ESP8266 programmiert, so wird man dessen GPIOs nutzen um externe Dinge wie Sensoren oder ähnliches anzusteuern bzw. auszulesen. Versucht man das gleiche mit einem NodeMCU-Board wird man feststellen das die Pinbelegung des Boards nicht mit der vom ESP8266 übereinstimmt.

Das NodeMCU-Board in Version 3

Wenn man die Pinbelegung des NodeMCU-Boards mit der vom ESP8266 in Reinform vergleicht, ergibt sich folgendes Bild:

NodeMCU D0 zu ESP8266 16
NodeMCU D1 zu ESP8266 5
NodeMCU D2 zu ESP8266 4
NodeMCU D3 zu ESP8266 0
NodeMCU D4 zu ESP8266 2
NodeMCU D5 zu ESP8266 14
NodeMCU D6 zu ESP8266 12
NodeMCU D7 zu ESP8266 13
NodeMCU D8 zu ESP8266 15
NodeMCU D9 zu ESP8266 3
NodeMCU D10 zu ESP8266 1

Bei der Entwicklung über die Arduino IDE braucht man allerdings keine Sorgen machen. Wird hier das NodeMCU-Board genutzt, so findet man definierte Konstanten von D0 bis D10 um die NodeMCU-GPIOs direkt anzusprechen. Einige der Pins haben auf dem Board eine besondere Funktion:

D1 (I2C Bus / SCL (Clock-Signal))
D2 (I2C Bus / SDA (Datenleitung))
D4 (wie LED_BUILTIN, aber invertierte Logik)
D5 (SPI Bus SCK (Clock-Signal))
D6 (PI Bus MISO)
D7 (SPI Bus MOSI)
D8 (SPI Bus SS (CS))
D9 (Serielle Konsole RX)
D10 (Serielle Konsole TX)

Temperatur mit dem NodeMCU messen

Inspiriert vom Golem.de Temperatur im Büro-Projekt habe ich einen NodeMCU genutzt um die Temperatur zu messen. Auf der Teileliste stehen dabei folgende Bauteile:

  • NodeMCUv3-Board
  • Temperatursensor DS18B20
  • Widerstand (4,7 kOhm)
  • Verbindungskabel (6x)

Diese Teile müssen nun wie folgt auf dem Board angebracht werden:

Die fertige Schaltung

Anschließend kann das NodeMCU-Board mit dem passenden Programmcode bestückt werden:

#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(D2);
DallasTemperature sensors(&oneWire);
DeviceAddress thermometer;

void setup(void) {
  Serial.begin(115200);

  sensors.begin();
  sensors.getAddress(thermometer, 0); 
  sensors.setResolution(thermometer, 12);
}

void loop() {

  Serial.println("Read temperature...\n");
  sensors.requestTemperatures(); 
  
  float temperature = sensors.getTempC(thermometer); 
  Serial.println(temperature);

  delay(5000);
}

In dem Programm wird zuerst eine One-Wire-Verbindung definiert und in der setup-Methode die Verbindung konfiguriert. Anschließend wird in der loop-Methode alle fünf Sekunden die Temperatur ausgelesen und in die serielle Konsole geschrieben.