Frohe Ostern Euch allen und hallo.
Ich hoffe, ich habe jetzt nicht wieder im falschen Bereich gepostet - falls doch, bitte ich um Entschuldigung.
Wie komme ich auf Blynk (1.0)? Nun, simpel. Weil es gerade "besser passt". Und ich habe mich durchgewühlt, aber wie immer nur Ansätze gefunden, die mein Problem nicht behandeln.
Szenario:
Ich möchte bei Blynk 4 normale Push-Buttons einbinden (mit dem standard Template geht das auch prima), um einen Deckenventilator über SSR anzusteuern. Der hat eine Phase, die am 3-Fach-Schalter in Stufen unterteilt wird (also an der Wickelung).
Schalter 1 soll den Vent ein- und ausschalten, Schalter 2 bis 4 sollen Stufe 1 bis 3 regeln.
Wenn Schalter 2, dann 3 und 4 AUS, bei den beiden anderen entsprechend umgekehrt, also S3 AN = 2 & 4 AUS, S4 AN = 2 & 3 AUS.
Besser wäre sogar, wenn S1 ganz wegfallen würde und aus S2, S3, S4 nunmehr S1, S2, S3 würde. Und der Vent eben bei drücken der Tasten entsprechend die Stufe ein- oder ausschaltet, ganz egal welche Position gerade läuft.
Aber sobald ich in den einzelnden void's etwas ändere um den Button-Status upzudaten, macht Blynk da nicht ganz mit. Ich habe den Eindruck, als würden die Arrays doppelt und dreifach ausgeführt, sodass sich alles aufhebt. Und genz ehrlich? Ich blicke irgendwie nicht dahinter und wäre froh, wenn mir jemand sagen kannwas zu tun ist, bzw. eingreifen kann - nicht das ich es nicht schätzen würde von selbst dahinter zu kommen, aber lernen kann man auch mit einer Lösung.
Sorry für den etwas "unaufgeräumten" code, aber wie ihr sehen könnt, zum probieren etwas ausgeklammert. Nur, wenn ich void's nicht rausnehme moppert der natürlich herum, aber so ist ein "rausfinden" halt unmöglich, weil ich nicht weiß in welcher Abfrage der wieder alles aufhebt. Benutzt wird hier ein Wemos D1 Mini clone (ESP8266).
//#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp8266.h>
#include <Credentials.h>
//#include <BlynkSimpleEsp32.h>
// define the GPIO connected with Relays and switches
#define RelayPin1 14 //D5
#define RelayPin2 12 //D6
//#define RelayPin3 13 //D7
//#define RelayPin4 15 //D8
#define SwitchPin1 5 //D2
#define SwitchPin2 4 //D3
//#define SwitchPin3 0 //D4
//#define SwitchPin4 2 //D5
#define VPIN_BUTTON_1 V1
#define VPIN_BUTTON_2 V2
//#define VPIN_BUTTON_3 V3
//#define VPIN_BUTTON_4 V4
int toggleState_1 = 1; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 1; //Define integer to remember the toggle state for relay 2
//int toggleState_3 = 1; //Define integer to remember the toggle state for relay 3
//int toggleState_4 = 1; //Define integer to remember the toggle state for relay 4
int wifiFlag = 0;
BlynkTimer timer;
void relayOnOff(int relay){
switch(relay){
case 1:
if(toggleState_1 == 1){
digitalWrite(RelayPin1, LOW);
toggleState_1 = 0;
Serial.println("Device1 ON");
}
else{
digitalWrite(RelayPin1, HIGH); // turn off relay 1
//digitalWrite(RelayPin2, HIGH);
toggleState_1 = 1;
//toggleState_2 = 1;
Serial.println("Device1 OFF");
}
delay(100);
break;
case 2:
if(toggleState_2 == 1){
digitalWrite(RelayPin2, LOW); // turn on relay 2
// digitalWrite(RelayPin1, HIGH);
toggleState_2 = 0;
//toggleState_1 = 0;
Serial.println("Device2 ON");
}
else{
digitalWrite(RelayPin2, HIGH); // turn off relay 2
// digitalWrite(RelayPin1, LOW);
toggleState_2 = 1;
//toggleState_1 = 0;
Serial.println("Device2 OFF");
}
delay(100);
break;
default : break;
}
}
void with_internet(){
//Manual Switch Control
if (digitalRead(SwitchPin1) == LOW){
delay(200);
relayOnOff(1);
//relayOnOff(2);
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1);
//Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);// Update Button Widget
}
else if (digitalRead(SwitchPin2) == LOW){
delay(200);
relayOnOff(2);
//relayOnOff(1);
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
//Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1);// Update Button Widget
}
}
void without_internet(){
//Manual Switch Control
if (digitalRead(SwitchPin1) == LOW){
delay(200);
relayOnOff(1);
// relayOnOff(2);
}
else if (digitalRead(SwitchPin2) == LOW){
delay(200);
relayOnOff(2);
// relayOnOff(1);
}
}
BLYNK_CONNECTED() {
// Request the latest state from the server
Blynk.syncVirtual(VPIN_BUTTON_1);
Blynk.syncVirtual(VPIN_BUTTON_2);
// Blynk.syncVirtual(VPIN_BUTTON_3);
// Blynk.syncVirtual(VPIN_BUTTON_4);
}
// When App button is pushed - switch the state
BLYNK_WRITE(VPIN_BUTTON_1) {
toggleState_1 = param.asInt();
digitalWrite(RelayPin1, toggleState_1);
//digitalWrite(RelayPin2, toggleState_2);
}
BLYNK_WRITE(VPIN_BUTTON_2) {
toggleState_2 = param.asInt();
digitalWrite(RelayPin2, toggleState_2);
//digitalWrite(RelayPin1, toggleState_1);
}
//BLYNK_WRITE(VPIN_BUTTON_3) {
// toggleState_3 = param.asInt();
// digitalWrite(RelayPin3, toggleState_3);
//}
//BLYNK_WRITE(VPIN_BUTTON_4) {
// toggleState_4 = param.asInt();
// digitalWrite(RelayPin4, toggleState_4);
//}
void checkBlynkStatus() { // called every 3 seconds by SimpleTimer
bool isconnected = Blynk.connected();
if (isconnected == false) {
wifiFlag = 1;
// digitalWrite(wifiLed, HIGH); //Turn off WiFi LED
}
if (isconnected == true) {
wifiFlag = 0;
// digitalWrite(wifiLed, LOW); //Turn on WiFi LED
}
}
void setup()
{
Serial.begin(9600);
Blynk.begin(AUTH, WIFI_SSID, WIFI_PASS, IPAddress(192,168,2,12), 8080);
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
// pinMode(RelayPin3, OUTPUT);
// pinMode(RelayPin4, OUTPUT);
//pinMode(wifiLed, OUTPUT);
pinMode(SwitchPin1, INPUT_PULLUP);
pinMode(SwitchPin2, INPUT_PULLUP);
// pinMode(SwitchPin3, INPUT_PULLUP);
// pinMode(SwitchPin4, INPUT_PULLUP);
//During Starting all Relays should TURN OFF
digitalWrite(RelayPin1, toggleState_1);
digitalWrite(RelayPin2, toggleState_2);
// digitalWrite(RelayPin3, toggleState_3);
// digitalWrite(RelayPin4, toggleState_4);
WiFi.begin(WIFI_SSID, WIFI_PASS);
timer.setInterval(3000L, checkBlynkStatus); // check if Blynk server is connected every 3 seconds
Blynk.config(AUTH);
}
void loop()
{
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("WiFi Not Connected");
}
else
{
Serial.println("WiFi Connected");
Blynk.run();
}
timer.run(); // Initiates SimpleTimer
if (wifiFlag == 0)
with_internet();
else
without_internet();//without_internet();
}
NACHTRAG:
IDE:
1.8.13 (weil: Kein Support für bestimmte Boards nach Update)
AMD Athlon II X4 630 2x 2,8 GHz, 12 GB RAM
Win 7 x64 Ultimate SP1
Boards:
1x Original UNO R3
4x Nano
6x Lolin Wemos D1 R2 Mini (ESP8266)
6x NodeMCU 8266
1x Teensy 4.1
Android 11 @SAMSUNG Galaxy A80