Hallo,
ich versuche inzwischen verzweifelt, mein Projekt zum laufen zu bringen und finde den Fehler nicht.
Ich möchte über einen Wemos D1 mini und ein 2-Kanal-Relais-Modul 2 Leuchten schalten. Die Leuchten sollen über WLAN (Amazon Echo) und über die vorhandenen Wandschalter gesteuert werden. Dazu habe ich die Schalter an 3V3 angeschlossen, die andere Seite an D5 bzw. D6 (mit Pulldown 10K). Wenn jetzt der Schalter den Zustand (an oder aus) ändert, erfaßt das der Eingang D5/D6 und schaltet den Ausgang D2 oder D3 passend.
Funktioniert soweit wunderbar. Solange der Wemos über USB vom PC versorgt wird. Sobald ich ein 5V-Netzteil verwende, erkennen die Eingänge D5 und D6 zwar zuverlässig den Zustand "an" (3,3V), bei "aus" schalten sie wild hin und her, wie ein Blinker.
Ein tauschen der Pull-Down-Widerstände gegen 1 kOhm ändert nichts.
Es ist auch egal, ob das Netzteil (5V, 1A) am 5V-Pin oder an USB hängt.
Wieder am USB vom PC funktioniert alles prima!
Woran kann das liegen???
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#define SchalterA D5
#define SchalterB D6
#define LichtA D2
#define LichtB D3
int SchalterMemoryA = 0;
int SchalterMemoryB = 0;
int SchalterAktuellA = 0;
int SchalterAktuellB = 0;
int ZustandA = 0;
int ZustandB = 0;
const char* ssid = " xxx ";
const char* password = " xxx ";
const char* HomematicIP = " xxx ";
const int httpPort = 80; // Port der Homematic
String webString=""; // String zum anzeigen
ESP8266WebServer server(80);
unsigned long timeout = 0; // timeout beim warten auf Homematic
void setup() {
Serial.begin(115200);
Serial.println(F("Starte Programm"));
pinMode(SchalterA,INPUT);
pinMode(SchalterB,INPUT);
pinMode(LichtA,OUTPUT);
pinMode(LichtB,OUTPUT);
// Verbindung mit WLAN
WiFi.begin(ssid, password);
Serial.print("\n\r \n\rVerbindung wird hergestellt");
// Warte auf Verbindung
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("SchalterKueche Server");
Serial.print("Verbunden mit ");
Serial.println(ssid);
Serial.print("IP Adresse: ");
Serial.println(WiFi.localIP());
server.on("/", SchleifeServerRoot);
server.on("/0", [](){
ZustandA = 0;
digitalWrite(LichtA,ZustandA);
webString="Deckenlampe ausgeschaltet";
server.send(200, "text/plain", webString);
Serial.println("HTTP-Anfrage 0");
delay(100);
});
server.on("/1", [](){
ZustandA = 1;
digitalWrite(LichtA,ZustandA);
webString="Deckenlampe eingeschaltet";
server.send(200, "text/plain", webString);
Serial.println("HTTP-Anfrage 1");
delay(100);
});
server.on("/2", [](){
ZustandB = 0;
digitalWrite(LichtB,ZustandB);
webString="Arbeitsplattenbeleuchtung ausgeschaltet";
server.send(200, "text/plain", webString);
Serial.println("HTTP-Anfrage 2");
delay(100);
});
server.on("/3", [](){
ZustandB = 1;
digitalWrite(LichtB,ZustandB);
webString="Arbeitsplattenbeleuchtung eingeschaltet";
server.send(200, "text/plain", webString);
Serial.println("HTTP-Anfrage 3");
delay(100);
});
server.begin();
Serial.println("HTTP Server gestartet");
SchalterMemoryA = digitalRead(SchalterA);
SchalterMemoryB = digitalRead(SchalterB);
}
void loop() {
server.handleClient();
WiFiClient client;
SchalterAktuellA = digitalRead(SchalterA);
SchalterAktuellB = digitalRead(SchalterB);
if (SchalterMemoryA != SchalterAktuellA) {
SchalterMemoryA = SchalterAktuellA;
if (ZustandA == 0) {
ZustandA = 1;
digitalWrite(LichtA,ZustandA);
Serial.println("Schalter Decke geschaltet! neuer Zustand 1");
delay(500);
}
else { ZustandA = 0;
digitalWrite(LichtA,ZustandA);
Serial.println("Schalter Decke geschaltet! neuer Zustand 0");
delay(500);
}
}
if (SchalterMemoryB != SchalterAktuellB) {
SchalterMemoryB = SchalterAktuellB;
if (ZustandB == 0) {
ZustandB = 1;
digitalWrite(LichtB,ZustandB);
Serial.println("Schalter Arbeitsplatte geschaltet! neuer Zustand 1");
delay(500);
}
else { ZustandB = 0;
digitalWrite(LichtB,ZustandB);
Serial.println("Schalter Arbeitsplatte geschaltet! neuer Zustand 0");
delay(500);
}
}
}
void SchleifeServerRoot() {
webString="Hallo vom Kuechenschalter! Gib ein: /0 schaltet Deckenlampe aus /1 schaltet Deckenlampe ein /2 schaltet Arbeitsplattenbeleuchtung aus /3 schaltet Arbeitsplattenbeleuchtung ein";
server.send(200, "text/plain", webString);
delay(100);
}