Trong Arduino, bạn tạo file code mới và copy paste đoạn code sau:
/* Comment this out to disable prints and save space */ #define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #define RELAY_PIN 14 // digital 0 #define BUTTON_PIN 12 // digital 1 #define LED_PIN 15 // đèn led báo hiệu trạng thái bật tắt của máy bơm, dùng led onboard char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxx"; char ssid[] = "YourWifiName"; char pass[] = "YourWifiPassword"; // Khai báo tần suất cập nhật dữ liệu là 10 phút 1 lần const int UPDATE_INTERVAL = 600000; //10p * 60s * 1000ms; unsigned long lastSentToServer = 0; // Khai báo thời gian bật relay tưới nước const int WATER_INTERVAL = 60000; // thời gian tưới là 60s unsigned long wateringStartTime = 0; // lưu thời gian bắt đầu tưới để còn tắt boolean relayStatus = false; // lưu trạng thái bật tắt cảu relay void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); pinMode(LED_PIN, OUTPUT); Blynk.begin(auth, ssid, pass, "blynk.getblocky.com", 80); } // Hàm này sẽ được gọi mỗi khi widget nút nhấn trên phần mềm Blynk được nhấn // và gửi lệnh bật tắt vào Virtual Pin V3 BLYNK_WRITE(V3) { int pinValue = param.asInt(); // Tùy vào lệnh nhận được ta thay đổi trạng thái bật tắt của ổ cắm if (pinValue == 1) relayStatus = true; else relayStatus = false; } void loop() { Blynk.run(); float moisture = 0; // Đọc độ ẩm đất hiện tại từ cảm biến đọc 10 lần và // lấy trung bình cộng để đảm bảo kết quả là ổn định for (int i=0; i<10; i++) { moisture = moisture + analogRead(A0); delay(100); } moisture = moisture/10; //Serial.print("Trang thai cua đất hien tai: "); Serial.print(moisture); if (moisture < 500) { // Đất quá khô, bật máy bơm relayStatus = true; // cập nhật lên phần mềm Blynk Blynk.virtualWrite(V3, relayStatus); } // Kiểm tra xem đến lúc gửi dữ liệu từ sensor về Blynk app hay chưa unsigned long currentMillis = millis(); if (lastSentToServer == 0 || currentMillis - lastSentToServer >= UPDATE_INTERVAL) { Blynk.virtualWrite(V4, moisture); lastSentToServer = currentMillis; } // Nếu relay đang bật, kiểm tra xem đến lúc tắt chưa if (relayStatus) { unsigned long currentMillis = millis(); if (currentMillis - wateringStartTime >= WATER_INTERVAL) { relayStatus = false; // cập nhật lên phần mềm Blynk Blynk.virtualWrite(V3, relayStatus); } } // Kiểm tra xem nút nhấn có được nhấn hay không int buttonState = digitalRead(BUTTON_PIN); if (buttonState == HIGH) { // Nếu nút được nhấn thì bật tưới nước relayStatus = !relayStatus; // cập nhật lên phần mềm Blynk Blynk.virtualWrite(V3, relayStatus); delay(150); } // Bật tắt máy bơm tùy vào trạng thái của biến pumpState if (relayStatus) { digitalWrite(RELAY_PIN, HIGH); digitalWrite(LED_PIN, HIGH); } else { digitalWrite(RELAY_PIN, LOW); digitalWrite(LED_PIN, LOW); } delay(50); }
Bạn thay đổi tên wifi và auth key của Blynk ở các dòng sau và upload code
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxx"; char ssid[] = "YourWifiName"; char pass[] = "YourWifiPassword";
Trên Blynk app, bạn tạo thêm 2 widget là Button bật tắt máy bơm (dùng virtual pin V3) và Label value (dùng virtual pin V4) để hiển thị độ ẩm hiện tại.
Như vậy là bạn đã có thể theo dõi và bật tắt tưới nước cho khu vườn nhà mình ở bất kỳ đâu rồi, không còn nỗi lo cây bị héo khô nữa nhé.