สวัสดีครับ ผมเป็นมือใหม่หัดเขียน
เบื้องต้น โค๊ดสามารถรันแบบ Manual ได้ครับ
แต่ตอนนี้ ดูเหมือนว่า Auto ไม่สามารถ ทำงานอัตโนมัติได้ครับ
คือเวลา จะให้มันตรวจจับ เราต้องกดสวิตช์เปิดปิดใหม่อีกทีนึง
ถึงจะแสดงสถานะและตรวจจับค่าส่งไปยังรีเลย์
พอจะมีใครช่วยได้บ้างไหมครับ รบกวนหน่อยครับขอบคุณครับ
#define BLYNK_PRINT Serial
#define DHTPIN D2
#define DHTTYPE DHT11
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
int sensorPin = A0;
int sensorValue = 0;
int Relay = D3;
String data = "";
SimpleTimer timer;
DHT dht(DHTPIN, DHTTYPE);
WidgetLCD lcd(V6);
char auth[] = "codeFromYourEmail";
char ssid[] = "SSID";
char pass[] = "Passwords";
BLYNK_CONNECTED() {
Blynk.syncAll();
}
BLYNK_WRITE(V4) {
if (param.asInt() == 1) {
digitalWrite(Relay,HIGH);
lcd.clear();
lcd.print(0,0,"PUMP: ON");
lcd.print(0,1,"STATS: Manual On");
delay(500);
}
if (param.asInt() == 0) {
digitalWrite(Relay,LOW);
lcd.clear();
lcd.print(0,0,"PUMP: OFF");
lcd.print(0,1,"STATS: ManualOff");
delay(500);
}
}
void sendTemp() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
}
void sendSoilValue() {
sensorValue = analogRead(sensorPin);
sensorValue = map(sensorValue, 0, 1023, 0, 100);
data = data + sensorValue;
Blynk.virtualWrite(V5, sensorValue);
}
void setup() {
pinMode(Relay,OUTPUT);
pinMode(sensorPin,OUTPUT);
pinMode(DHTPIN,OUTPUT);
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
dht.begin();
lcd.clear();
lcd.print(4,0,"SMART");
lcd.print(0,1,"Watering System");
delay(2000);
lcd.clear();
lcd.print(0,0,"Please Wait");
delay(1000);
lcd.print(0,0,"Please Wait.");
delay(1000);
lcd.print(0,0,"Please Wait..");
delay(1000);
lcd.print(0,0,"Please Wait...");
delay(1000);
lcd.print(0,0,"Please Wait....");
delay(1000);
lcd.clear();
timer.setInterval(1000L, sendTemp);
timer.setInterval(1000L, sendSoilValue);
}
void loop() {
Blynk.run();
timer.run();
}
BLYNK_WRITE(V3) {
if (param.asInt() == 1) {
if (analogRead(sensorPin)>300 && analogRead(sensorPin) <1000) {
digitalWrite(Relay,HIGH);
lcd.clear();
lcd.print(0,0,"PUMP: ON");
lcd.print(0,1,"STATS: Dry Soil");
delay(500);
}
else if (analogRead(sensorPin)<300) {
digitalWrite(Relay,LOW);
lcd.clear();
lcd.print(0,0,"PUMP: OFF");
lcd.print(0,1,"STATS: Water");
delay(500);
}
else if (analogRead(sensorPin)>1000) {
digitalWrite(Relay,LOW);
lcd.clear();
lcd.print(0,0,"PUMP: OFF");
lcd.print(0,1,"STATS: Air");
delay(500);
}
}
if (param.asInt() == 0) {
digitalWrite(Relay,LOW);
lcd.clear();
lcd.print(0,0,"PUMP: OFF");
lcd.print(0,1,"STATS: AutoOff");
delay(500);
}
}