ESP8266 Wemos D1 Mini

Es gibt zwei Ver­sio­nen des Wemos D1 mit iden­ti­scher Pinbelegung:

  • D1 Mini Typ C mit Mini-USB-Anschluss
  • D1 Mini V4.0 wird mit USB-C-Anschluss
D1 Mini Typ CD1 Mini V 4.0

Board instal­lie­ren

Tra­ge unter Datei -> Ein­stel­lun­gen eine zusätz­li­che Boar­d­­ver­­­wal­­ter-URL ein:

https://​ardui​no​.esp8266​.com/​s​t​a​b​l​e​/​p​a​c​k​a​g​e​_​e​s​p​8​2​6​6​c​o​m​_​i​n​d​e​x​.​j​son

Board aus­wäh­len

Pin­be­le­gung

I²C-Pins

Info zu I²C

D1 -> SCL
D2 -> SDA

SPI-Pins

Info zu SPI

D7 -> COPI/SDO
D6 -> CIPO/SDI
D5 -> CLK
D8 -> CS

Digi­ta­le Pins

Digi­ta­le Pins

linksBemer­kungrechtsBemer­kung
D0 (GPIO16)Zustand HIGH beim Hochladen
eine ange­schlos­se­ne LED leuch­tet beim Hochladen
D1 (GPIO5)
D5 (GPIO14)D2 (GPIO4)
D6 (GPIO12D3 (GPIO0)akti­viert Firm­ware-Upload wenn der Zustand LOW ist
D7 (GPIO13)D4 (GPIO2)darf beim Hoch­la­den nicht LOW sein. 
Kann nach dem Hoch­la­den als nor­ma­ler Ein­ga­be-/Aus­ga­be­pin ver­wen­det werden. 
Inter­ne LED
D8 (GPIO15)darf beim Hoch­la­den nicht HIGH sein
Der Zustand des Pins D2 ist LOWDer Zustand des Pins D2 ist HIGH

Mit die­sem Pro­gramm kannst du den Zustand des Tas­ters 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);                       
}

Ana­lo­ger Pin

Das Wemos D1 Mini hat nur einen ana­lo­gen Pin mit der Bezeich­nung A0. Die Auf­lö­sung beträgt 10 Bit, der maxi­ma­le Wert ist 1024.

WiFi

Bei­spiel

Im Brow­ser wer­den 6 Zufalls­zah­len ange­zeigt.
Im Seri­el­len Moni­tor wird die mit DHCP ermit­tel­te IP des Wemos D1 Mini angezeigt.

Das Pro­gramm

#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();
        }
      }
    }
  }
}