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.

NodeMCU als Bauteil in Fritzing hinzufügen

Das NodeMCU-Board ist ein Entwicklungsboard für den ESP8266 in der ESP-12er Variante. Durch seinen günstigen Preis kann es direkt in Projekte eingebaut werden. Wenn man ein solches Projekt in der Elektronik-Software Fritzing dokumentieren möchte, benötigt man das entsprechende Bauteil in Fritzing. Es existieren zwar einige der ESP8266-Varianten, aber das NodeMCU-Board fehlt in der Standardausstattung.

Das NodeMCU Bauteil wurde Fritzing hinzugefügt.

Allerdings ist es kein Problem neue Bauteile zu Fritzing hinzuzufügen. Für das NodeMCU-Board gibt es Vorlagen für die Version 1 und die Version 3 des Boards. Wichtig ist hierbei die fzpz-Datei. Nachdem diese heruntergeladen wurde, kann sie in Fritzing per Drag & Drop installiert werden. Anschließend ist das neue Bauteil installiert und kann genutzt werden. Wenn man Fritzing beendet, wird nachgefragt ob das neue importierte Bauteil dauerhaft behalten werden soll. Hier sollte mit Ja geantwortet werden.

Größe des Flashspeichers beim NodeMCU ermitteln

Das auf dem ESP8266 basierendem Entwicklungsboard NodeMCU gibt es unterschiedlichen Varianten, die sich unter anderem durch die Größe des Flashspeichers unterscheiden. Möchte man nun ermitteln welche Größe der Speicher beim eigenen NodeMCU-Board hat kann man dies mit einem Programm aus einem der ESP8266-Repositories sehr unkompliziert ermittelt.

Die Größe des Flashspeichers wird über die serielle Schnittstelle ausgegeben

Nachdem die Arduino IDE mit dem Programm geöffnet wurde und das Programm auf das NodeMCU-Board geflasht wurde, kann die Ausgabe über die serielle Schnittstelle ausgelesen werden. Dazu muss der serielle Monitor, im Menü unter Werkzeuge -> Serieller Monitor zu finden, aktiviert werden. Wichtig ist es, dass hier die korrekte Baudrate eingestellt wird.