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_ON
1000);
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_ON
    1000);
    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_TM
    1000, readLocalCmd);
    timer.setInterval(READ_SOIL_TEMP_TM
    1000, getSoilTempData);
    timer.setInterval(READ_AIR_DATA_TM
    1000, getDhtData);
    timer.setInterval(READ_SOIL_HUM_TM
    1000, getSoilMoisterData);
    timer.setInterval(SEND_UP_DATA_TM
    1000, sendUptime);
    timer.setInterval(AUTO_CTRL_TM
    1000, autoControlPlantation);
    //timer.setInterval(DISPLAY_DATA_TM
    1000, 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);
}

@khacvan Please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

Copy and paste these if you can’t find the correct symbol on your keyboard.

Pete.

@khacvan I’ve just noticed that you are using a Blynk legacy cloud server service that is provided by a 3rd party.
This type of server is not approved by Blynk, and is not supported in this forum, so I’ve closed this topic.

Please upgrade to Blynk IoT in order to receive support from this forum.

Pete.