Es gibt zwei Versionen des Wemos D1 mit identischer Pinbelegung:
- D1 Mini Typ C mit Mini-USB-Anschluss
- D1 Mini V4.0 wird mit USB-C-Anschluss
Inhalt
D1 Mini Typ C | D1 Mini V 4.0 |
Board installieren
Trage unter Datei -> Einstellungen eine zusätzliche Boardverwalter-URL ein:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
Board auswählen
Pinbelegung
I²C-Pins
D1 -> SCL
D2 -> SDA
SPI-Pins
D7 -> COPI/SDO
D6 -> CIPO/SDI
D5 -> CLK
D8 -> CS
Digitale Pins
Digitale Pins
links | Bemerkung | rechts | Bemerkung |
---|---|---|---|
D0 (GPIO16) | Zustand HIGH beim Hochladen eine angeschlossene LED leuchtet beim Hochladen | D1 (GPIO5) | |
D5 (GPIO14) | D2 (GPIO4) | ||
D6 (GPIO12 | D3 (GPIO0) | aktiviert Firmware-Upload wenn der Zustand LOW ist | |
D7 (GPIO13) | D4 (GPIO2) | darf beim Hochladen nicht LOW sein. Kann nach dem Hochladen als normaler Eingabe-/Ausgabepin verwendet werden. Interne LED | |
D8 (GPIO15) | darf beim Hochladen nicht HIGH sein |
Der Zustand des Pins D2 ist LOW | Der Zustand des Pins D2 ist HIGH |
Mit diesem Programm kannst du den Zustand des Tasters an Pin D2 testen:
int Taster = D2;
int Status = 0;
void setup()
{
// die Taster werden als INPUT (Eingang) deklariert
pinMode(Taster, INPUT);
Serial.begin(9600);
}
void loop()
{
// Taster für die gelbe LED abfragen
Status = digitalRead(Taster);
if (Status) Serial.println("Zustand des Tasters: HIGH" );
else Serial.println("Zustand des Tasters: LOW" );
delay(500);
}
Analoger Pin
Das Wemos D1 Mini hat nur einen analogen Pin mit der Bezeichnung A0. Die Auflösung beträgt 10 Bit, der maximale Wert ist 1024.
WiFi
Beispiel
Im Browser werden 6 Zufallszahlen angezeigt.
Im Seriellen Monitor wird die mit DHCP ermittelte IP des Wemos D1 Mini angezeigt.
Das Programm
#include "ESP8266WiFi.h"
// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";
WiFiServer Server(80);
WiFiClient Client;
// Minimum und Maximum der Zufallszahlen
int Minimum = 1;
int Maximum = 49;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(500);
// WiFi starten
WiFi.begin(Router, Passwort);
// Verbindung herstellen
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Server.begin();
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.println(WiFi.localIP());
// Zufallsgenerator mit dem Signal an A0 starten
randomSeed(analogRead(A0));
}
void loop()
{
Client = Server.available();
if (Client)
{
// Seite aufbauen wenn SeiteAufbauen true ist
boolean SeiteAufbauen = true;
// solange der Client verbunden ist ...
while (Client.connected())
{
if (Client.available())
{
// Anforderung vom Clienten lesen ...
char Zeichen = Client.read();
// return (\n) gesendet
if (Zeichen == '\n')
{
// wenn SeiteAufbauen den Wert true hat
if (SeiteAufbauen)
{
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(erzeugt einen Zeilenumbruch im Quelltext)
*/
// HTML-Seite aufbauen
Client.println("HTTP/1.1 200 OK");
Client.println("Content-type:text/html");
// Leerzeile zwingend erforderlich
Client.println();
Client.println("<!doctype html>");
Client.println("<html>");
Client.println("<body>");
// alle 60 Sekunden aktualisieren mit meta-Tag
Client.println("<meta http-equiv=\"refresh\" content=\"60\">");
// <h2> Überschrift H2
Client.println("<h2>Zufallszahlen</h2>");
// <hr> horizontale Linie
Client.println("<hr>");
// Zufallszahlen anzeigen
for (int i = 0; i < 6; i++ )
{
int Zahl = random(Minimum, Maximum);
Client.println(Zahl);
Client.println(" ");
}
Client.print("<hr>");
// IPs anzeigen
Client.print("Eigene IP (Server): ");
Client.print(Client.remoteIP());
// <br> break = neue Zeile
Client.print("<br>IP Adresse Klient DHCP ");
Client.print(WiFi.localIP());
// Seite schließen
Client.println("</body>");
Client.println("</html>");
// HTTP-Antwort endet mit neuer Zeile
Client.println();
// Seite vollständig geladen -> loop verlassen
break;
}
// wenn new line (\n) gesendet wurde -> Seite aufbauen
if (Zeichen == '\n') SeiteAufbauen = true;
else if (Zeichen != '\r') SeiteAufbauen = false;
delay(1);
Client.stop();
}
}
}
}
}