Wemos D1 Mini

Inhalt

Was kann der Wemos D1 Mini

Aktuell gibt es zwei Version des Wemos D1.Die Pinbelegung ist identisch. Der D1 Mini Typ C wird mit einen Mini-USB-Anschluss, der D1 Mini V4.0 wird mit USB-C verbunden.

Pinbelegung

I2C-Pins

Der I²C-Bus (Inter Inte­gra­ted Cir­cuit) wur­de ursprüng­lich von Phil­ips ent­wi­ckelt. Ein Controller (hier der Wemos D1 Mini) sollte mit verschiedenen Peripheriegeräten kommunizieren können. Die Anschlüsse tragen die Bezeichnungen SDA und SCL.
Einige Bauteile werden mit I2C gesteuert:

I2C -Pins

D1 -> SCL
D2 -> SDA

SPI-Pins

Auch der SPI-Bus (Seri­al Peri­phe­ral Inter­face) dient der Kommunikation zwischen dem Controller und Peripheriegeräten. Der SPI-Bus benö­tigt zwei Daten­lei­tun­gen und zwei Steuerleitungen:

 

Anmerkung:

Es gibt mehrere Initiativen die alten, aber immer noch weit verbreiteten Bezeichnungen MOSI (Master Out Slave In -> COPI) und MISO (Master In Slave Out -> CIPO) zu ersetzen:

https://www.sparkfun.com/spi_signal_names
https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/
https://docs.arduino.cc/learn/communication/spi

SPI-Pins

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

Digitale Pins

Digitale Pins

D0 Zustand HIGH beim Hochladen  
D5                                                               
D6        
D7      
D8  darf beim Hoch­la­den nicht HIGH sein
D1
D2
D3 akti­viert Firm­ware-Upload wenn der Zustand LOW ist
D4 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

Das LED-Blinkprogramm an Pin D8

				
					int LED = D8;

void setup()
{
  pinMode(LED, OUTPUT);
}

void loop()
{
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000);
}
				
			

Wird der Anschluss D4 verwendet, leuchtet gleichzeitig die interne LED.

Analoger Pin

Das Wemos D1 Mini verfügt über einen analogen Pin mit der Bezeichnung A0. Die Auflösung beträgt 10 Bit, der maximale Wert ist 1023.

Beispiel:
Potentiometer am Pin A0

				
					// Potentiometer an Pin A0
int Potentiometer = A0;

// Variable für den gelesenen Wert
int GelesenerWert = 0;

void setup() 
{
  Serial.begin(9600);
  delay(1000);
}

void loop() 
{ 
  // analogen Wert lesen
  GelesenerWert = analogRead(Potentiometer);
  Serial.println(GelesenerWert);
  delay(500);
}
				
			

Ausgabe im Seriellen Plotter bei der Drehung des Potentiometers

WiFi

Beispiel: Das Programm zeigt im Browser 6 Zufallszahlen an.
Im Seriellen Monitor wird die mit DHCP ermittelte IP des Wemos D1 Mini angezeigt.

Diese Adresse musst du in einem Browser deiner Wahl eingeben.

Das dazugehörige 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);
  
  // 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(0));
}

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

Board installieren

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

https://arduino.esp8266.com/stable/package_esp8266com_index.json

 

Board auswählen

Wenn der Wemos D1 Mini nicht automatisch erkannt wurde, klicke auf „Wähle ein anderes Board und einen anderen Port“ und suche nach Wemos D1. Je nach Betriebssystem wird der USB-Port eine andere Bezeichnung haben.

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE