แสดงว่า blynk หลักเขาฟิกค่า TimeZone ไว้
ล่าสุด กับโปรเจ็คนี้ แต่มีปัญหาอีกแล้ว คือ
1.notification ไม่แจ้งเตือน พอกลับไปใช้ server เดิม กลับใช้งาน notification ได้ (เวลาก็ยังไม่ตรงอยู่ดี)
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Ethernet.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <WidgetRTC.h>
#include <TimeLib.h>
#include <DHT.h>
#define DHTPIN D1
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define wifiLed LED_BUILTIN
int wifiFlag = 0;
int sensor = 0;
int sensorValue = 0;
int sensorState = 0;
int lastState = 0;
int sensorPin = D0;
int led1 = D2;
int led2 = D3;
int relay = D4;
int button1 = D5;
int button2 = D6;
bool auto_on = false;
WidgetRTC rtc;
WidgetLED ledBlynk_1(V12); // status auto mode
WidgetLED ledBlynk_2(V13); // status manual mode
WidgetLED ledBlynk_3(V14); // status working
WidgetLED ledBlynk_4(V15); // status timer
///mode auto///
void auto_on_mode()
{ digitalWrite(relay, 1);
digitalWrite(led1, 1);
digitalWrite(led2, 0);
ledBlynk_1.on();
ledBlynk_2.off();
ledBlynk_3.on();
}
void auto_off_mode()
{ digitalWrite(relay, 0);
digitalWrite(led1, 1);
digitalWrite(led2, 0);
ledBlynk_1.on();
ledBlynk_2.off();
ledBlynk_3.off();
}
///mode manual///
void manual_on_mode()
{ digitalWrite(relay, 1);
digitalWrite(led1, 0);
digitalWrite(led2, 1);
ledBlynk_1.off();
ledBlynk_2.on();
ledBlynk_3.on();
}
void manual_off_mode()
{ digitalWrite(relay, 0);
digitalWrite(led1, 0);
digitalWrite(led2, 1);
ledBlynk_1.off();
ledBlynk_2.on();
ledBlynk_3.off();
ledBlynk_4.off();
}
int SetAutoprogram;
//set Auto soil Moisture sensor slider in app on pin V10
BLYNK_WRITE(V10) {
SetAutoprogram = param.asInt();
}
char auth[] = "xx";
char ssid[] = "xx";
char pass[] = "xx";
SimpleTimer timer;
// Digital clock display of the time
void clockDisplay()
{
// You can call hour(), minute(), ... at any time
// Please see Time library examples for details
String currentTime = String(hour()) + ":" + minute() + ":" + second();
String currentDate = String(day()) + " " + month() + " " + year();
Serial.print("Current time: ");
Serial.print(currentTime);
Serial.print(" ");
Serial.print(currentDate);
Serial.println();
// Send time to the App
Blynk.virtualWrite(V6, currentTime);
// Send date to the App
Blynk.virtualWrite(V11, currentDate);
}
BLYNK_CONNECTED() {
Blynk.syncAll();
rtc.begin(); // Synchronize time on connection
}
//blynk button auto
BLYNK_WRITE(V3) {
if (param.asInt() == 1) {
auto_on = true;
autoprogram();
Blynk.virtualWrite(V4, 0);
}
if (param.asInt() == 0) {
auto_on = false;
manual_off_mode();
}
}
//blynk button manual
BLYNK_WRITE(V4) {
if (param.asInt() == 1) {
auto_on = false;
manual_on_mode();
Blynk.virtualWrite(V3, 0);
}
if (param.asInt() == 0) {
auto_on = false;
manual_off_mode();
}
}
bool buttonStatus = 0;
bool buttonTemp = 0;
//mode auto button1
void checkStatusButton1() {
buttonStatus = digitalRead(button1);
if (buttonStatus != buttonTemp)
{
if (buttonStatus == 1) {
auto_on = true;
autoprogram();
Blynk.virtualWrite(V3, 1);
Blynk.virtualWrite(V4, 0);
}
else {
auto_on = false;
manual_off_mode();
Blynk.virtualWrite(V3, 0);
}
buttonTemp = buttonStatus;
}
}
//mode manual button2
void checkStatusButton2() {
buttonStatus = digitalRead(button2);
if (buttonStatus != buttonTemp)
{
if (buttonStatus == 1) {
auto_on = false;
manual_on_mode();
Blynk.virtualWrite(V4, 1);
Blynk.virtualWrite(V3, 0);
}
else {
auto_on = false;
manual_off_mode();
Blynk.virtualWrite(V4, 0);
}
buttonTemp = buttonStatus;
}
}
//timer 1
BLYNK_WRITE(V7) {
if (param.asInt() == 1) {
digitalWrite(relay, 1);
ledBlynk_3.on();
ledBlynk_4.on();
}
else {
manual_off_mode();
}
}
//timer 2
BLYNK_WRITE(V8) {
if (param.asInt() == 1) {
digitalWrite(relay, 1);
ledBlynk_3.on();
ledBlynk_4.on();
}
else {
manual_off_mode();
}
}
//timer 3
BLYNK_WRITE(V9) {
if (param.asInt() == 1) {
digitalWrite(relay, 1);
ledBlynk_3.on();
ledBlynk_4.on();
}
else {
manual_off_mode();
}
}
void sendTemp() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
return;
}
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
}
void sendSoilValue() {
sensorValue = analogRead(A0);
sensorValue = map(sensorValue, 0, 1023, 100, 0);
Blynk.virtualWrite(V5, sensorValue);
}
// called every 3 seconds by SimpleTimer
void checkBlynkStatus() {
bool isconnected = Blynk.connected();
if (isconnected == false) {
wifiFlag = 1;
digitalWrite(wifiLed, 1); //Turn off WiFi LED
}
if (isconnected == true) {
wifiFlag = 0;
digitalWrite(wifiLed, 0); //Turn on WiFi LED
}
}
void autoprogram() {
//auto pump with soil moisture sensor
if (auto_on == true) {
if (sensorValue <= SetAutoprogram) {
auto_on_mode();
}
else if (sensorValue > SetAutoprogram) {
auto_off_mode();
}
}
}
void setup() {
pinMode(sensorPin, INPUT);
pinMode(DHTPIN, INPUT);
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(button1, 0);
digitalWrite(button2, 0);
digitalWrite(led1, 0);
digitalWrite(led2, 1);
digitalWrite(relay, 0);
Serial.begin(9600);
Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
dht.begin();
timer.setInterval(1000L, sendTemp);
timer.setInterval(1000L, sendSoilValue);
timer.setInterval(1000L, clockDisplay);
timer.setInterval(1000L, autoprogram);
timer.setInterval(500L, checkStatusButton1);
timer.setInterval(500L, checkStatusButton2);
}
void loop() {
Blynk.run();
timer.run();
//send notification
sensorState = digitalRead(sensorPin);
Serial.println(sensorState);
if (sensorState == 1 && lastState == 0) {
Blynk.notify("Water your plants");
lastState = 1;
delay(1000);
}
//do nothing, has not been watered yet
else if (sensorState == 1 && lastState == 1) {
delay(1000);
}
//st
else {
lastState = 0;
delay(1000);
}
}
เอาจอ lcd ออก แล้วเปลี่ยนเป็นไฟสถานะ led แทน
ส่วนเรื่องปุ่มกดหน้าตู้ คิดว่าน่าจะใช้งานได้แล้ว
ฝากโค๊ดและตัวโคลนไว้ เผื่อเพื่อนๆ สนใจ สามารถเอาไปปรับใช้ได้ ^^
(ยังไม่สมบูรณ์เต็มร้อย แต่ก็ถือว่าเกิน 80))) ////
ตรงนี้ถ้าเป็น blynk หลัก จะมีการแจ้งเตือนครับ ถ้าไปใช้ Blynk แจกจะไม่มี
เยี่ยมมากครับ มีไอเดียร์ หรือติดปัญหาอะไรเอามาแชร์กันนะครับ