Как переопределить автоматическое управление в приложении Blynk?
Я новичок в Blynk и успешно построил простой проект контроля температуры воды. Он состоит из ESP32, подключаемого водонагревателя и платы реле переменного тока. ESP32 управляет релейной платой, в то время как водонагреватель подключен к релейной плате.
Код, который у меня есть, включит реле, как только температура воды опустится ниже 16 градусов. В приложении Blynk я хочу добавить кнопку, которая позволяет пользователю вручную управлять работой реле. Но я не знаю, как его закодировать. Так как я запрограммировал ESP, чтобы выключить реле, как только температура выше 16C, если я попытаюсь включить его вручную при 20C, например, реле не будет оставаться включенным, потому что ЕСЛИ оператор потерпит неудачу.
Как я могу закодировать это так, чтобы иметь возможность ручного управления? Таким образом, как только пользователь включит кнопку внутри приложения Blynk, ESP позволит ручное управление цифровым выводом (триггер задержки) и вернется в автоматический режим контроля температуры только после того, как кнопка будет выключена?
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 14 //провод передачи данных, подключенный к контакту 14
#define RELAY_PIN 23 //IoT-реле, подключенное к контакту 23
OneWire oneWire(ONE_WIRE_BUS); //экземпляр для связи с любым устройством OneWire
DallasTemperature sensor(&oneWire); //pass reference to Dallas Temperature object
BlynkTimer timer; //создание объекта Blynk timer для временных интервалов
float waterTemp; //температура от DS18B20 в C
char auth[] = "xxxxxxx";
char ssid[] = "xxxxxxx";
char pass[] = "xxxxxxx";
void setup() {
Serial.begin(9600);
sensor.begin();
Blynk.begin(auth, ssid, pass);
sensor.setResolution(9); //по умолчанию 9 бит
timer.setInterval(1000L, sendTemp);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
}
void sendTemp() {
sensor.requestTemperatures(); //сначала должен запросить чтение
waterTemp = sensor.getTempCByIndex(0);
if (waterTemp != DEVICE_DISCONNECTED_C) {
Serial.print("Temp = ");
Serial.println(waterTemp);
Blynk.virtualWrite(V1, waterTemp);
if (waterTemp < 16) {
digitalWrite(RELAY_PIN, HIGH); //включить IoT-реле
} else {
digitalWrite(RELAY_PIN, LOW); //выключить IoT-реле
}
} else {
Serial.println("Ошибка: Не удалось прочитать данные о температуре");
Blynk.notify("Ошибка: Не удалось прочитать данные о температуре");
digitalWrite(RELAY_PIN, LOW);
}
}
void loop(void) {
Blynk.run();
timer.run();
}
@user3211857, 👍1
Обсуждение1 ответ
Примерно так:
Сделайте глобальную переменную int mode
;
Считайте 3-позиционный переключатель приложения Blynk в цикле()
;
Установите режим
на 1, 2 или 3, полученный из приложения Blynk (для включения/выключения/АВТОМАТИЧЕСКОГО);
Замените этот фрагмент кода:
if (waterTemp < 16) {
digitalWrite(RELAY_PIN, HIGH); //включить реле интернета вещей (IoT)
} else {
digitalWrite(RELAY_PIN, LOW); //отключить реле интернета вещей (IoT)
}
с
if (mode == 1) {
digitalWrite(RELAY_PIN, HIGH);
} else if (mode = 2) {
digitalWrite(RELAY_PIN, LOW);
} else {
if (waterTemp < 16) {
digitalWrite(RELAY_PIN, HIGH); //включить реле IoT
} else {
digitalWrite(RELAY_PIN, LOW); //выключить реле IoT
}
}
Вам все равно придется решить, что произойдет, когда DEVICE_DISCONNECTED_C == TRUE
и т. Д., Но в этом суть.
- Настройки ESP32. Одна ошибка возвращается, все остальные работают.
- NodeMCU не подключается к Blynk
- Esp32 не подключается к Wi-Fi
- Объяснение кода, найденного в интернете
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
используйте переменную состояния, @Juraj
if(is_manual){ do new stuff}else{ run old code}
Кроме того, это звучит как опасность пожара. Я бы еще кое-что сделал, чтобы убить все, если станет слишком жарко, не только экстрасенс, но и те, кто может запереться. Термический предохранитель был бы хорош., @dandavis