จากโค้ด คือ สามารถสลับการทำงานระหว่าง Auto กับ Manual ได้แล้วครับ โดยสลับผ่าน Blynk เมื่อกดปุ่มจะเช็คสถานะจาก (switchstatus) 1 เป็น Auto 0 Manual ทีนี้ ผมต้องการให้ปุ่มภายนอกสามารถสลับโหมดการทำงานได้เช่นกันครับ แต่ผมไม่ทราบจะต้องใช้โค้ดในการ รับ - ส่ง ข้อมูลจากปุ่ม ไปสู่การเปลี่ยนโหมดการทำงานได้ยังไงครับ
ช่วยทีครับ เหลือแค่จุดนี้จุดเดียวก็สมบูรณ์แล้วครับ ดูคลิปจากหลายที่และลองพยายามทำตามแล้วครับ ยังไม่ได้เลย
#define BLYNK_PRINT Serial
#define DHTPIN 15
#define DHTTYPE DHT11
#define PUMP 16
#define relayone 17
#define relaytwo 18
#define PUSHBUTTON1 19 //D4
#define PUSHBUTTON2 21 //D5
#define PUSHBUTTON3 22 //D7
#define PUSHBUTTON4 23 //TX
const int moisture1 = 32;
const int moisture2 = 33;
const int moisture3 = 34;
const int moisture4 = 35;
int moisture_value1 = 0;
int moisture_value2 = 0;
int moisture_value3 = 0;
int moisture_value4 = 0;
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
DHT dht(DHTPIN, DHTTYPE);
char auth[] = "T5CWX3dmqVkm1_52sQOWmdhbgczLRzMT";
char ssid[] = "OIL2G";
char pass[] = "0649461953";
char server[] = "oasiskit.com";
int port = 8080;
bool switchStatus = 0; // 0 = manual,1=auto
int soilMoistureLimit = 0;
bool manualSwitch = 0;
bool solenoid1 = 0;
bool solenoid2 = 0;
BlynkTimer timer;
// sync all status
BLYNK_CONNECTED() {
Blynk.syncAll();
}
// update switchStatus
BLYNK_WRITE(V0)
{
switchStatus = param.asInt(); // Get value as integer
}
// update soilMosture setting
BLYNK_WRITE(V1)
{
soilMoistureLimit = param.asInt(); // Get value as integer
}
// update manualSwitch
BLYNK_WRITE(V2)
{
manualSwitch = param.asInt();
}
BLYNK_WRITE(V3)
{
solenoid1 = param.asInt();
}
BLYNK_WRITE(V4)
{
solenoid2 = param.asInt();
}
void manualAutoAction()
{
moisture_value1 = analogRead(moisture1);
moisture_value2 = analogRead(moisture2);
moisture_value3 = analogRead(moisture3);
moisture_value4 = analogRead(moisture4);
Serial.print("Moisture1 = ");
Serial.println(moisture_value1);
delay(500);
Serial.print("Moisture2 = ");
Serial.println(moisture_value2);
delay(500);
Serial.print("Moisture3 = ");
Serial.println(moisture_value3);
delay(500);
Serial.print("Moisture4 = ");
Serial.println(moisture_value4);
delay(500);
if(switchStatus)
{
// auto
if(moisture_value1 < soilMoistureLimit||(moisture_value2 < soilMoistureLimit))
{
digitalWrite(PUMP,HIGH);
digitalWrite(relayone,HIGH);
}
else
{
digitalWrite(PUMP,LOW);
digitalWrite(relayone,LOW);
}
{
if(moisture_value3 < soilMoistureLimit||(moisture_value4 < soilMoistureLimit))
{
digitalWrite(PUMP,HIGH);
digitalWrite(relaytwo,HIGH);
}
else
{
digitalWrite(PUMP,LOW);
digitalWrite(relaytwo,LOW);
}
}
}
//manual
else
{
if(manualSwitch)
{
digitalWrite(PUMP,HIGH);
}
else
{
digitalWrite(PUMP,LOW);
}
if(solenoid1)
{
digitalWrite(relayone,HIGH);
}
else
{
digitalWrite(relayone,LOW);
}
if(solenoid2)
{
digitalWrite(relaytwo,HIGH);
}
else
{
digitalWrite(relaytwo,LOW);
}
// manaul
}
}
void checkTemp()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h); //V5 is for Humidity
Blynk.virtualWrite(V6, t); //V6 is for Temperature
}
void setup()
{
// Debug console
Serial.begin(115200);
pinMode(PUMP,OUTPUT);
digitalWrite(PUMP,HIGH);
digitalWrite(PUMP,LOW);
pinMode(relayone,OUTPUT);
digitalWrite(relayone,HIGH);
digitalWrite(relayone,LOW);
pinMode(relaytwo,OUTPUT);
digitalWrite(relaytwo,HIGH);
digitalWrite(relaytwo,LOW);
pinMode(PUSHBUTTON1, INPUT_PULLUP);
pinMode(PUSHBUTTON2, INPUT_PULLUP);
pinMode(PUSHBUTTON3, INPUT_PULLUP);
pinMode(PUSHBUTTON4, INPUT_PULLUP);
dht.begin();
WiFi.begin(ssid, pass);
Blynk.config(auth, server, port);
Blynk.connect();
// key
timer.setInterval(1000L, manualAutoAction);
timer.setInterval(10000L, checkTemp);
}
void loop()
{
Blynk.run();
timer.run();
}