Вітаю друзі.
Допоможіть будь ласка. Вже не знаю що робити. Все працює як слід, але коли пропадає інтернет- не працює фізична кнопка. Без інтернету не можу увімкнути чи вимкнути реле. Хоч, наприклад, на подібному пристрої з дисплеєм, з таким же кодом, данні про температуру на дисплей надходять і без інтернету. Але кнопка реле все одно не працює без інтернету.
Я не можу зрозуміти в чому причина і що робити.
Greetings friends
Help please. I do not know what to do. Everything works as it should, but when the Internet disappears, the physical button does not work. Without the internet, I can not turn on or off the relay. Though, for example, on such a device with a display with the same code, data about the temperature on the display are also received without the Internet. But the relay button still does not work without the internet.
I can not understand what the reason is and what to do.
physical button - BUTTON_USER
relay - RELAY
void setup()
{
// Конфігуруємо підключення до blynk server
Blynk.config(settings.blynkToken, settings.blynkServer, atoi(settings.blynkPort));
if (Blynk.connect())
{
//TODO
}
else
{
//TODO
}
// Setup a function to be called every second
timer.setInterval(INTERVAL_SEND_DATA, timerSendServer);
timer.setInterval(INTERVAL_READ_KEY, timerReadKey);
}
// the loop function runs over and over again until power down or reset
void loop()
{
Blynk.run(); // Initiates Blynk Server
timer.run(); // Initiates BlynkTimer
httpServer.handleClient(); // Initiates OTA WebUpdater
if (!Blynk.connected() && !triggerBlynkConnect)
{
triggerBlynkConnect = true;
ticker.attach(2, tick);
}
else if (Blynk.connected() && triggerBlynkConnect)
{
triggerBlynkConnect = false;
}
}
BLYNK_CONNECTED()
{
untick();
char str[30];
sprintf(str, "%s Online!", host);
Blynk.notify(str);
switch (settings.stateRelay)
{
case 0:
Blynk.virtualWrite(BUTTON_RELAY, LOW);
break;
case 1:
Blynk.virtualWrite(BUTTON_RELAY, HIGH);
break;
case 2:
Blynk.syncVirtual(BUTTON_RELAY);
break;
default:
break;
}
Blynk.syncAll();
lcd.clear();
lcd.print(0, 0, host);
lcd.print(0, 1, WiFi.localIP().toString());
}
BLYNK_WRITE(BUTTON_RELAY)
{
digitalWrite(RELAY, param.asInt());
}
BLYNK_WRITE(MENU_MODE_POWER)
{
if (settings.stateRelay != param.asInt() - 1)
{
settings.stateRelay = param.asInt() - 1;
// Записуємо введені данні до EEPROM
EEPROM.begin(512);
EEPROM.put(0, settings);
EEPROM.end();
}
}
void timerReadKey()
{
if (!digitalRead(BUTTON_USER) && !btnState)
{
btnState = true;
startPressBtn = millis();
}
else if (digitalRead(BUTTON_USER) && btnState)
{
btnState = false;
int pressTime = millis() - startPressBtn;
if (pressTime > INTERVAL_PRESSED_LONG)
{
WMSettings defaults;
settings = defaults;
// Записуємо данні за замовчуванням до EEPROM
EEPROM.begin(512);
EEPROM.put(0, settings);
EEPROM.end();
WiFi.disconnect();
delay(1000);
ESP.restart();
delay(1000);
}
else if (pressTime < INTERVAL_PRESSED_LONG && pressTime > INTERVAL_PRESSED_SHORT)
{
//TODO тут вставити те що буде виконуватись при натисканні кнопки УВІМ/ВИМК
digitalWrite(RELAY, !digitalRead(RELAY));
Blynk.virtualWrite(BUTTON_RELAY, digitalRead(RELAY));
}
else if (pressTime < INTERVAL_PRESSED_SHORT)
{
// Хибне спрацювання для відладки
char str[30];
sprintf(str, "Fixed false triggering %ims", pressTime);
Serial.println(str);
terminal.println(str);
}
}
}
void timerSendServer()
{
if (Blynk.connected())
{
//TODO
}
else
{
//TODO
}
}
void tick()
{
//toggle state
int state = digitalRead(LED_GREEN); // get the current state of GPIO pin
digitalWrite(LED_GREEN, !state); // set pin to the opposite state
}
void untick()
{
ticker.detach();
digitalWrite(LED_GREEN, HIGH); //keep LED off
}