Zur Steuerung meiner Gartenbeleuchtung, Ein- und Ausschalten via Shelly, baute ich mir einen Bewegungsmelder mit einem ESP8266 als Herzstück.
!!Nachbau wie immer auf eigene Gefahr!!
Benötigte Bauteile:
- 1 x ESP8266 (NodeMCU V3)
- 1 x LDR5528-Modul
- 1 x HC-SR501 Bewegungssensor
- diverse Kabel und Litzen für Stromversorgung und Zusammenbau
- Teilstück 3-Loch-Streifenrasterplatine
Versuchsaufbau

/*********
Michael Wiesner
Complete project details at https://4bastler.de
*********/
// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#define brightnessPin 14
//WLAN-Daten
const char* ssid = "IhreSSID";
const char* password = "IhrWLANPasswort";
// Web Server Port definieren
WiFiServer server(80);
//Variablen Serveraufruf
const char* host = "DeineSteuerzentraleIP"; //IP Raspi als Steuerzentrale
const char* host2 = "DeinzusteuerndesGerätIP"; //IP geschalteter Shelly
int motionPin = D1;
int displayLED = D2;
boolean brightness_ldr = false;
String tageslicht;
void setup()
{
// Start the Serial Monitor
Serial.begin(115200);
//Helligkeitsmessung
pinMode(brightnessPin, INPUT);
// Mit Wifi verbinden
Serial.print("Verbinden mit: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi verbunden");
// Eigene IP ausgeben
Serial.print("Diese URL zum Verbinden aufrufen: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
pinMode(motionPin, INPUT);
pinMode(displayLED, OUTPUT);
digitalWrite(displayLED, LOW);
delay(5000);
}
void loop() {
brightness_ldr = digitalRead(brightnessPin);
if (brightness_ldr) {
tageslicht = "No";
Serial.print("Light detected: ");
Serial.println(tageslicht);
delay(2000);
if(digitalRead(motionPin)==HIGH)
{
ausfuehren();
}
else
{
digitalWrite(displayLED, LOW);
}
}
else {
tageslicht = "Yes";
Serial.print("Light detected: ");
Serial.println(tageslicht);
delay(2000);
}
}
void ausfuehren()
{
digitalWrite(displayLED, HIGH);
// Einschalten
String url2 = "/relay/0?turn=on";
delay(1000);
Serial.print("url");
Serial.print("Requesting URL: ");
Serial.println(url2);
WiFiClient client;
if (!client.connect(host2, 80)) {
Serial.println("connection failed");
return;
}
client.print(String("GET ") + url2 + " HTTP/1.1\r\n" +
"Host: " + host2 + "\r\n"+
"Connection: close\r\n\r\n");
if (!client.connect(host2, 80)) {
Serial.println("connection failed");
return;
}
Serial.println();
Serial.println("closing connection");
//Ende Einschalten
delay(600000);
digitalWrite(displayLED, LOW);
// Wieder ausschalten
url2 = "/relay/0?turn=off";
delay(1000);
Serial.print("url");
Serial.print("Requesting URL: ");
Serial.println(url2);
//Daten auf Krake speichern
if (!client.connect(host2, 80)) {
Serial.println("connection failed");
return;
}
client.print(String("GET ") + url2 + " HTTP/1.1\r\n" +
"Host: " + host2 + "\r\n"+
"Connection: close\r\n\r\n");
if (!client.connect(host2, 80)) {
Serial.println("connection failed");
return;
}
Serial.println();
Serial.println("closing connection");
//Ende Wieder ausschalten
delay(5000);
}
Der Quellcode ist eine erste Programmierung und natürlich noch optimierungsbedürftig.
Aber das Wichtige für mich:
Er funktioniert!
Die Umsetzung
Bilder folgen!