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)

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.

Motorsteuerung

Ein Elektomotor kann sich vorwärts und rückwärts drehen. Erreicht wird dies indem man ihn einfach umpolt. Problematisch wird das ganze wenn man einen Motor ansteuern möchte z.B. über einen Arduino. Da kann man das ganze natürlich nicht einfach per Hand umpolen. Also muss eine Schaltung her. Diese Schaltung hört auf den Namen Vierquadrantensteller und sieht so aus:

Mit dieser Schaltung ist es möglich den Motor zu beschleunigen und ihn wieder zu bremsen. Das ganze funktioniert dabei sowohl vorwärts als auch rückwärts. Wer das ganze nicht von Hand nachbauen möchte, der kann sich auch ICs besorgen welche diese Schaltung bereits enthalten.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Vierquadrantensteller
http://www.elektronik-kompendium.de/sites/slt/0208031.htm
http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung

Einen Servo mit dem Arduino ansteuern

Bei einem Servo handelt es sich um einen Motor welcher sich genau steuern lässt z.B. auf eine exakte Position. Die Ansteuerungselektronik ist bei einem Servo gleich eingebaut. Servos sind im übrigen im Normalfall nicht zum Durchlauf gedacht, da eine mechanische Sperre dies verhindert. Neben dem Servo soll es auch noch zwei LEDs (eine rote und eine grüne) zur Anzeige des Zustandes sowie einen Taster zum an- und ausschalten geben.

Zuerst wird der Servo mit dem Board verbunden. Der Servo hat dabei drei Anschlüsse, GND (schwarz bzw. braun), VDD (rot) sowie SIGNAL (Orange). GND wird dabei mit Ground verbunden, VDD mit der 5 Volt Buchse des Arduino und Signal mit PIN 9 des Boards. Der Taster wird mit PIN 4 verbunden, die beiden LEDs mit PIN 2 und 3. Damit wäre die Verkabelung erledigt.

Nun geht es an den Quellcode. Dieser soll den Servo ansteuern, die Lichter leuchten lassen, sowie den Taster abfragen. Interessant ist die Zeile:

digitalWrite(pushButton, HIGH); //Pull up Widerstand aktivieren

In dieser Zeile wird der interne Pull Up Widerstand des Arduino für PIN 4 aktiviert. Andernfalls müsste ein hochohmiger (1000 – 100000 Ohm) Widerstand auf dem Board im Tasterschaltkreis verbaut werden, da es sonst vorkommen kann das der Taster nicht reagiert.

#include <Servo.h> 

Servo servo;

int pushButton=4;

int ledRed=3;
int ledGreen=2;

void setup()
{
 pinMode(pushButton, INPUT);

 pinMode(ledRed, OUTPUT);
 pinMode(ledGreen, OUTPUT);

 servo.attach(9);

 digitalWrite(pushButton, HIGH); //Pull up Widerstand aktivieren
} 

void loop()
{
 int pressed=digitalRead(pushButton);

 digitalWrite(ledGreen, LOW);
 digitalWrite(ledRed, HIGH);

 if(pressed==LOW)
 {
 digitalWrite(ledGreen, HIGH);
 digitalWrite(ledRed, LOW);

 servo.write(360);
 delay(2000);
 servo.write(0);
 }

 delay(15);
}

In Action sieht das ganze dann so aus:

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

Der Sourcecode sowie der Schaltplan können sich natürlich auch heruntergeladen werden.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Servo
http://www.freeduino.de/books/servos-f%C3%BCr-durchlauf-umbauen
http://de.wikipedia.org/wiki/Pull_up

Die erste Schaltung mit dem Arduino

Die erste Schaltung welche man im Normalfall mit dem Arduino baut, ist ja meist recht einfach. Eine LED wird einfach an einen PIN sowie Ground angeschlossen und zum leuchten gebracht. Ich habe mir da allerdings gleich ein wenig mehr zusammen gebaut. Bei mir wurden es ein paar LEDs sowie zwei Lautsprecher. Zuerst wurden die LEDS auf das Breadboard gesteckt und anschließend mit Ground sowie je einem PIN auf dem Arduino Board verbunden. Das gleiche wurde mit den zwei Lautsprechern getan.

Die Schaltung im Aufbau.

Nun fehlte nur noch der Sourcecode. In diesem werden die LEDs sowie die Lautsprecher angesteuert:

int ledPinRed1=13;
int ledPinYellow1=12;
int ledPinRed2=11;
int ledPinGreen=10;
int ledPinRed3=9;
int ledPinYellow2=8;
int ledPinRed4=7;

int soundKlack=6;
int soundSin=5;

void setup()
{
 pinMode(ledPinRed1, OUTPUT);
 pinMode(ledPinYellow1, OUTPUT);
 pinMode(ledPinRed2, OUTPUT);
 pinMode(ledPinGreen, OUTPUT);
 pinMode(ledPinRed3, OUTPUT);
 pinMode(ledPinYellow2, OUTPUT);
 pinMode(ledPinRed4, OUTPUT);

 pinMode(soundKlack, OUTPUT);
 pinMode(soundSin, OUTPUT);
}

void loop()
{
 blinkRed();

 sound();

 blinkGreen();

 sound();

 blinkYellow();

 sound();

 analogWrite(soundSin, 200);
 delay(100);
 analogWrite(soundSin, 0);

 analogWrite(soundSin, 500);
 delay(200);
 analogWrite(soundSin, 0);

 analogWrite(soundSin, 1000);
 delay(400);
 analogWrite(soundSin, 0);
}

void sound()
{
 digitalWrite(soundKlack, LOW);
 delay(100);
 digitalWrite(soundKlack, HIGH);
}

void blinkRed()
{
 digitalWrite(ledPinRed1, HIGH);
 digitalWrite(ledPinRed2, HIGH);
 digitalWrite(ledPinRed3, HIGH);
 digitalWrite(ledPinRed4, HIGH);
 delay(500);
 digitalWrite(ledPinRed1, LOW);
 digitalWrite(ledPinRed2, LOW);
 digitalWrite(ledPinRed3, LOW);
 digitalWrite(ledPinRed4, LOW);
}

void blinkYellow()
{
 digitalWrite(ledPinYellow1, HIGH);
 digitalWrite(ledPinYellow2, HIGH);
 delay(500);
 digitalWrite(ledPinYellow1, LOW);
 digitalWrite(ledPinYellow2, LOW);
}

void blinkGreen()
{
 digitalWrite(ledPinGreen, HIGH);
 delay(500);
 digitalWrite(ledPinGreen, LOW);
}

Wer das ganze nachbauen möchte (warum auch immer ;) ) findet hier den Sourcecode sowie die Fritzing Datei (der Schaltplan).

Und so sieht das ganze dann in Action aus:

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