Überblick
Das Wemos D1 R32 Board ist mit dem ESP32-WROOM-32 von Espressif bestückt, es verfügt über:

- digitale Ein- und Ausgänge
- analoge Eingänge
- Bussysteme: I2C und SPI
- WiFi
- Bluetooth LE (BLE)
Board installieren
Trage unter Datei -> Einstellungen eine zusätzliche Boardverwalter-URL ein:
https://dl.espressif.com/dl/package_esp32_index.json

Board auswählen

- Icon für den Boardverwalter anklicken oder Werkzeuge-> Board -> Boardverwalter
- nach lolin d32 suchen
- Board installieren

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

Pinbelegung
I²C
⇒Info

I2C ‑Pins
22 -> SCL
21 -> SDA
Beispiel: Anschluss eines LCD

So sieht es aus:

SPI
⇒Info
Digitale Pins

Digitale Pins (INPUT und OUTPUT)
links rechts
15 22 14
32 21 27
33 18 16
2 19 17
4 23 25
5 26
13
12
Die Pins 35, 34 36 und 39 sind ebenfalls digitale Pins, können aber nur als INPUT verwendet werden. Die Pins 15, 32 und 33 können nur sicher verwendet werden, wenn eine Stiftleiste angelötet wird.
Beispiel:
LED mit einem Taster schalten. Die LED leuchtet, solange der Taster gedrückt wird

Das Programm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int LED = 13; int Taster = 12; void setup() { pinMode(LED, OUTPUT); pinMode(Taster, INPUT_PULLUP); } void loop() { if (digitalRead(Taster) == LOW) digitalWrite(LED, HIGH); else digitalWrite(LED, LOW); } |
Touch-Pins
Der menschliche Körper und elektrisch leitfähige Gegenstände können elektrische Ladung speichern. Wird einer der Touch-Pins berührt, verändert sich der Messwert.

Touch-Pins (in Klammern alternative Zuordnung)
4 (T0)
15 (T3)
33 (T8)
32 (T9)
12 (T5)
14 (T6)
27 (T7)
Die Pins 15, 32 und 33 können nur sicher verwendet werden, wenn eine Stiftleiste angelötet wird.

Das Programm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | void setup() { // Serielle Kommunikation starten Serial.begin(9600); delay(1000); } void loop() { Serial.print(“Wert: ”); // gemessenen Wert am Touch-Pin 14 anzeigen Serial.print(touchRead(14)); // wenn der Wert < 25 -> Pin wurde berührt if (touchRead(14) < 25) Serial.println(“ -> Pin berührt”); // bei größeren Werten wurde der Pin nicht berührt else Serial.println(“ -> Pin nicht berührt”); delay(1000); } |

Analoge Pins
Es stehen zwei ADC-Wandler (Analog Digital Converter) mit einer Auflösung von 12 Bit zur Verfügung. Wenn WiFi verwendet wird, können nur die Pins 34 bis 36 als analoge Eingänge angesprochen werden. Das Signal hat den Wertebereich von 0 bis 4095.

Analoge Pins
2
4
36
38
39

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

Diese Adresse musst du in einem Browser deiner Wahl im Adressfeld eingeben.

Das Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #include “WiFi.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.mode(WIFI_STA); 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 < 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(); } } } } } |
Bluetooth BLE
Das Programm
Zunächst musst du die Bibliothek ArduinoBLE installieren:

Das Programm schaltet eine LED an Pin 13:
1 -> einschalten, 0 -> ausschalten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include “ArduinoBLE.h” /* eindeutige UUID bestimmen: https://www.guidgenerator.com/online-guid-generator.aspx https://www.uuidgenerator.net/ BLERead | BLEWrite | BLENotify -> schreiben, lesen, Info */ // Name BLE-Service BLEService LEDSchalten(“19b10000-e8f2-537e-4f6c-d104768a1214”); BLEUnsignedCharCharacteristic Auswahl(“19b10000-e8f2-537e-4f6c-d104768a1214”, BLERead | BLEWrite | BLENotify); // LED an Pin 13 int LED = 13; void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial); delay(1000); // pinMode festlegen pinMode(LED, OUTPUT); // BLE starten if (!BLE.begin()) Serial.println(“Bluetooth-Modul konnte nicht gestartet werden!”); else Serial.println(“Bluetooth-Modul erfolgreich gestartet!”); // Name festlegen (wird in der App angezeigt) und den Service (LEDSchalten) zuweisen BLE.setLocalName(“LED schalten”); BLE.setAdvertisedService(LEDSchalten); // Auswahl als Platzhalter für den in der App gewählten Wert LEDSchalten.addCharacteristic(Auswahl); // Service LEDSchalten hinzufügen BLE.addService(LEDSchalten); // Startwert für die Kommunikation schreiben Auswahl.writeValue(0); // Zuweisung starten BLE.advertise(); } void loop() { // auf die Verbindung zu Geräten warten BLEDevice Verbindung = BLE.central(); // wenn der ESP32 mit einem Gerät verbunden ist … if (Verbindung) { Serial.println(“Verbunden … ”); // solange der Controller mit einem Gerät verbunden ist … while (Verbindung.connected()) { if (Auswahl.written()) { // LED einschalten if (Auswahl.value() == ‘1’) { Serial.print(char(Auswahl.value())); Serial.println(“ -> LED ein”); digitalWrite(LED, HIGH); } // LED ausschalten if (Auswahl.value() == ‘0’) { Serial.print(char(Auswahl.value())); Serial.println(F(“ -> LED aus”)); digitalWrite(LED, LOW); } } } } } |
Smartphone-Apps
ESP32 BLE Terminal (iOS)
![]() | ![]() |
BLE Terminal (iOS)
![]() | ![]() | ![]() | ![]() |
BluetoothLE (iOS)
![]() | ![]() | ![]() | ![]() |
Letzte Aktualisierung:










