IoT-Gerät mit ESP8266-01 & Arduino Nano: Komplettanleitung
Komponenten und Materialien
| Arduino Nano R3 | 1× |
| ESP8266 ESP-01 WiFi-Modul | 1× |
| 2-Kanal-Relais-Modul | 1× |
| LED (Standard) | 2× |
| Steckbrett | 1× |
| Jumper-Kabel | 1× |
| Widerstand 1 kΩ | 2× |
| Widerstand 2,2 kΩ | 1× |
| Custom PCB (PCBWay) | 1× (optional) |
Werkzeuge
- Lötkolben, bleifreies Lot, Lötflussmittel
Software und Online-Dienste
- Arduino IDE
- Visual Studio Code (optional)
- Autodesk Eagle (optional, für PCB-Design)
Projektbeschreibung
Einführung
Ein Gerät, das über WLAN mit dem Internet verbindet und die ferngesteuerte Steuerung von Haushaltsgeräten ermöglicht. Basis: Arduino Nano + ESP8266-01 als Webserver.
Funktionsweise
Control Panel (Webseite): HTML/CSS/jQuery – Buttons senden HTTP-GET-Requests an den ESP8266.
Embedded Hardware: ESP8266 empfängt Requests, leitet per Serial an Arduino weiter, dieser schaltet Relais/GPIOs.
ESP8266-01 Pinout & Konfiguration
| Pin | Funktion |
|---|---|
| VCC | 3,3 V (nicht 5 V!) |
| GND | Masse |
| CH_PD | Chip Enable (High = aktiv) |
| RST | Reset (Low-aktiv) |
| GPIO0, GPIO2 | Freie GPIOs |
| TX | An Arduino RX (Pin 2 per SoftwareSerial) |
| RX | An Arduino TX (Pin 3 per SoftwareSerial) |
Der ESP kommt ab Werk mit 115.200 Baud – zu schnell für SoftwareSerial. Per AT-Kommandos auf 9.600 Baud umstellen:
- Leeren Sketch auf Arduino laden
- ESP an Hardware-Serial (Pin 0/1) anschließen
- Serial Monitor: 115.200 Baud, „Both NL & CR“
AT→OKprüfenAT+UART_DEF=9600,8,1,0,0(oderAT+CIOBAUD=9600) senden- Monitor auf 9.600 Baud umstellen,
ATtesten - WLAN verbinden:
AT+CWJAP="SSID","PASSWORT"
Webseite (Control Panel)
HTML/CSS/jQuery. Buttons haben IDs wie „111“ (Pin 11, AN) und „110“ (Pin 11, AUS). Per jQuery wird $.get("https://IP_DES_ESP:80/", {pin: p}) gesendet.
<!DOCTYPE html>
<html>
<head>
<title>Smart Home Control Panel</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body style="background-color: seagreen; color: seashell; text-align: center;">
<h1>Smart Home Control Panel</h1>
<h4>Sorry But I'm a Meme Addict!</h4>
<img src="dogMeme.jpg" width="400" height="400">
<br>
<button style="margin:10px" id="111" class="button">Blue LED ON</button>
<button id="110" class="button">Blue LED OFF</button>
<br>
<button style="margin:10px" id="121" class="button">Red LED ON</button>
<button id="120" class="button">Red LED OFF</button>
<script>
$(".button").click(function() {
var p = $(this).attr('id');
$.get("https://192.168.1.4:80/", {pin: p}); // IP anpassen!
});
</script>
</body>
</html>
Arduino-Code (Final)
#include <SoftwareSerial.h>
SoftwareSerial esp8266(2, 3); // RX, TX
#define SERIAL_SPEED 9600
#define DEBUG true
int blueLED = 11, redLED = 12;
void setup() {
pinMode(blueLED, OUTPUT); pinMode(redLED, OUTPUT);
digitalWrite(blueLED, HIGH); digitalWrite(redLED, LOW);
Serial.begin(SERIAL_SPEED);
esp8266.begin(SERIAL_SPEED);
initWifiModule();
digitalWrite(blueLED, LOW);
}
void loop() {
if (esp8266.available()) {
if (esp8266.find("+IPD,")) {
delay(1000);
int connectionId = esp8266.read() - 48;
esp8266.find("pin=");
int pinNumber = (esp8266.read() - 48) * 10;
pinNumber += (esp8266.read() - 48);
int pinState = (esp8266.read() - 48);
digitalWrite(pinNumber, pinState);
// Verbindung schließen
String closeCmd = "AT+CIPCLOSE=" + String(connectionId) + "\r\n";
sendData(closeCmd, 1000, DEBUG);
}
}
}
String sendData(String cmd, const int timeout, boolean debug) {
String resp = "";
esp8266.print(cmd);
long t = millis();
while ((t + timeout) > millis()) {
while (esp8266.available()) {
char c = esp8266.read();
resp += c;
}
}
if (debug) Serial.print(resp);
return resp;
}
void initWifiModule() {
sendData("AT+RST\r\n", 2000, DEBUG);
sendData("AT+CWJAP=\"DEINE_SSID\",\"DEIN_PASSWORT\"\r\n", 5000, DEBUG);
sendData("AT+CWMODE=1\r\n", 1500, DEBUG);
sendData("AT+CIFSR\r\n", 1500, DEBUG);
sendData("AT+CIPMUX=1\r\n", 1500, DEBUG);
sendData("AT+CIPSERVER=1,80\r\n", 1500, DEBUG);
}
Hochspannungslasten per Relais schalten
Zweikanal-Relais-Modul: IN1 an Pin 11, IN2 an Pin 12. COM an Last, NO (Normally Open) an Netzspannung. Webseite um zwei Buttons (IDs 121/120) erweitern.
Professionelle PCB
Design in Autodesk Eagle, Fertigung bei PCBWay (Open Source: Projektlink).
Fehlerbehebung
- Port 80 (HTTP) im Request verwenden
- PC und ESP im gleichen WLAN
- Richtige ESP-IP in jQuery eintragen
- Last an Pin 11/12 anschließen
- Webseite nach Änderungen speichern & neu laden
Schaltpläne
Steckbrett- und PCB-Schaltplan als Bilder verfügbar.
Herstellungsprozess
- TinyML Spracherkennung mit Edge Impulse auf Arduino Nano 33 BLE Sense
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Ultraschall-Schwebegerät mit Arduino bauen – Akustische Levitation Schritt für Schritt
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
- TV per Alexa steuern mit Arduino IoT Cloud – Schritt-für-Schritt