This Is My First Project And I'm Having A Hard Time, Someone Help Me

/* Định nghĩa các thông số điều khiển tự động */ #define DRY_SOIL 66 #define WET_SOIL 85 #define COLD_TEMP 12 #define HOT_TEMP 22 #define TIME_PUMP_ON 15 #define TIME_LAMP_ON 15

/* Hẹn giờ */ #define READ_BUTTONS_TM 1L // definitions in seconds #define READ_SOIL_TEMP_TM 2L #define READ_SOIL_HUM_TM 10L #define READ_AIR_DATA_TM 2L #define SEND_UP_DATA_TM 10L #define AUTO_CTRL_TM 60L

/* Định nghĩa cảm biế nhiệt độ dô ẩm DHT22*/ #define DHTPIN D3 #define DHTTYPE DHT22 float airHum = 0; float airTemp = 0;

/* Định nghĩa và gán chân cảm biến độ ẩm đất Soil Moister */ #define soilMoisterPin A0 // chân data output của cảm biến #define soilMoisterVcc D8 // điều khiển vcc cấp nguồn cho cảm biến int soilMoister = 0;

/* Định nghĩa và gán chân cảm biến nhiệt độ đất DS18B20 Temperature Sensor */ #define ONE_WIRE_BUS 14 // DS18B20 trên chân NodeMCU D5 tương ứng với GPIO 014 trên Arduino float soilTemp;

/* Định nghĩa và gán chân Relays */ #define PUMP_PIN D6 //bơm (Red LED) #define LAMP_PIN D7 //LAMP (Green LED) boolean pumpStatus = 0; boolean lampStatus = 0;

/* ESP & Blynk */ #define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> WidgetLED PUMPs(V0); // tín hiệu đến Tab cảm biến tại Ứng dụng Blynk WidgetLED PUMPa(V5); // tín hiệu đến Tab Bộ truyền động tại Ứng dụng Blynk WidgetLED LAMPs(V1); // tín hiệu đến Tab cảm biến tại Ứng dụng Blynk WidgetLED LAMPa(V6); // tín hiệu đến Tab Bộ truyền động tại Ứng dụng Blynk

char auth[] = “I2lkEwBazFAJOhTS9dMxvEiFqb6FjJI0”; // Blynk project: “IoT Auto Plant Care” char ssid[] = “120/43/10 THD”; char pass[] = “hoil@mgi”;

/* TIMER */ #include <SimpleTimer.h> SimpleTimer timer;

/Khai báo thư viện DHT22/ #include “DHT.h” DHT dht(DHTPIN, DHTTYPE);

/* Khai báo thư viện DS18B20 Temperature Sensor */ #include <OneWire.h> #include <DallasTemperature.h>

OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire);

void setup() { Serial.begin(115200); delay(10); pinMode(PUMP_PIN, OUTPUT); pinMode(LAMP_PIN, OUTPUT); pinMode(soilMoisterVcc, OUTPUT);

Blynk.begin(auth, ssid, pass, [URL of un-approved server deleted by moderator], 8080); dht. DS18B20.begin();begin();

PUMPs.off(); LAMPs.off(); PUMPa.off(); LAMPa.off(); digitalWrite(PUMP_PIN, HIGH); // Được sử dụng với mô-đun Relay (thường là CAO) digitalWrite(LAMP_PIN, HIGH); // Được sử dụng với mô-đun Relay (thường là CAO) digitalWrite (soilMoisterVcc, LOW);

startTimers(); }

void loop() { timer.run(); //Khởi tạo SimpleTimer Blynk.run(); }

/****************************************************************

  • Đọc lệnh từ xa ****************************************************************/ BLYNK_WRITE(3) // điều khiển máy bơm { int i=param.asInt(); if (i==1) { pumpStatus = !pumpStatus; aplyCmd(); } }

BLYNK_WRITE(4) // diều khiền đèn { int i=param.asInt(); if (i==1) { lampStatus = !lampStatus; aplyCmd(); } }

  • Receive Commands and act on RELAYs - Logic LOW ****************************************************/ void aplyCmd() { if (pumpStatus == 1) { Blynk.notify(“IoT Auto Plant Care: Warning ==>> Pump ON”); digitalWrite(PUMP_PIN, LOW); // To be used with Relay module (inverted logic: activate with LOW) if (!turnOffOLED) displayData(); PUMPs.on(); PUMPa.on(); } else { digitalWrite(PUMP_PIN, HIGH); // To be used with Relay module (inverted logic: normally HIGH) if (!turnOffOLED) displayData(); PUMPs.off(); PUMPa.off(); } if (lampStatus == 1) { Blynk.notify(“IoT Auto Plant Care: Warning ==>> Lamp ON”); digitalWrite(LAMP_PIN, LOW); // To be used with Relay module (inverted logic: activate with LOW) if (!turnOffOLED) displayData(); LAMPs.on(); LAMPa.on(); } else { digitalWrite(LAMP_PIN, HIGH); // To be used with Relay module (inverted logic: normally HIGH) if (!turnOffOLED) displayData(); LAMPs.off(); LAMPa.off(); } }

/***************************************************

  • Tự động điều khiển đồn điền dựa trên cảm biến đọc ****************************************************/ void autoControlPlantation(void) { if (soilMoister < DRY_SOIL) { turnPumpOn(); }

    if (airTemp < COLD_TEMP) { turnLampOn(); } }

/*************************************************** *Bật Bơm trong một khoảng thời gian nhất định ***************************************************/ void turnPumpOn() { pumpStatus = 1; aplyCmd(); delay (TIME_PUMP_ON1000); pumpStatus = 0; aplyCmd(); }

/***************************************************

  • Bật đèn trong một khoảng thời gian nhất định ***************************************************/ void turnLampOn() { lampStatus = 1; aplyCmd(); delay (TIME_LAMP_ON1000); lampStatus = 0; aplyCmd(); }

/***************************************************

  • Gửi data đến Blynk **************************************************/ void sendUptime() { Blynk.virtualWrite(10, airTemp); //virtual pin V10 Blynk.virtualWrite(11, airHum); // virtual pin V11 Blynk.virtualWrite(12, soilMoister); // virtual pin V12 Blynk.virtualWrite(13, soilTemp); //virtual pin V13 }

/***************************************************

  • Bộ hẹn giờ khởi động *********************************************/ void startTimers(void) { timer.setInterval(READ_BUTTONS_TM1000, readLocalCmd); timer.setInterval(READ_SOIL_TEMP_TM1000, getSoilTempData); timer.setInterval(READ_AIR_DATA_TM1000, getDhtData); timer.setInterval(READ_SOIL_HUM_TM1000, getSoilMoisterData); timer.setInterval(SEND_UP_DATA_TM1000, sendUptime); timer.setInterval(AUTO_CTRL_TM1000, autoControlPlantation); //timer.setInterval(DISPLAY_DATA_TM1000, displayData); }

/***************************************************

  • Get DHT data **************************************************/ void getDhtData(void) { float tempIni = airTemp; float humIni = airHum; airTemp = dht.readTemperature(); airHum = dht.readHumidity(); if (isnan(airHum) || isnan(airTemp)) // Check if any reads failed and exit early (to try again). { Serial.println(“Failed to read from DHT sensor!”); airTemp = tempIni; airHum = humIni; return; } }

/***************************************************

  • Get Soil Moister Sensor data **************************************************/ void getSoilMoisterData(void) { soilMoister = 0; digitalWrite (soilMoisterVcc, HIGH); delay (500); int N = 3; for(int i = 0; i < N; i++) // read sensor “N” times and get the average { soilMoister += analogRead(soilMoisterPin); delay(150); } digitalWrite (soilMoisterVcc, LOW); soilMoister = soilMoister/N; soilMoister = map(soilMoister, 600, 0, 0, 100); //LM393 on 5V (+Vin) }

/***************************************************

  • Get SoilTemp sensor data **************************************************/ void getSoilTempData() { DS18B20.requestTemperatures(); soilTemp = DS18B20.getTempCByIndex(0);

int newData = ((soilTemp + 0.05) * 10); //fix soilTemp value to 1 decimal place. soilTemp = (newData / 10.0); }Untitled Untitled1920×1080 141 KB Untitled2 Untitled21920×1080 190 KB

Từ khóa » Thư Viện Blynksimpleesp8266.h