#define BLYNK_TEMPLATE_ID "[email protected]"
#define BLYNK_TEMPLATE_NAME "ESP32 by joranin"
#define BLYNK_AUTH_TOKEN "-AgK8xrgV491fWcnFySBnh35Bs-GXVPx" // แทนที่ด้วย Blynk Auth Token ของคุณ
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define DHTPIN 23 // DHT22 Data pin connected to GPIO 23 on ESP32
#define DHTTYPE DHT22 // DHT22 sensor
#define LED_PIN 12 // LED connected to GPIO 12
#define BUTTON_PIN 14 // Button connected to GPIO 14
// Blynk authorization token
char auth[] = "-AgK8xrgV491fWcnFySBnh35Bs-GXVPx"; // Replace with your Blynk auth token
char ssid[] = "TONG2.0"; // Your WiFi SSID
char pass[] = "14122546"; // Your WiFi Password
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address to 0x27 for a 16x2 display
void setup() {
Serial.begin(115200);
Serial.println(F("DHT22 with ESP32!"));
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the LCD backlight
lcd.setCursor(0, 0);
lcd.print("Temp: "); // Fixed label for temperature
lcd.setCursor(0, 1);
lcd.print("Humi: "); // Fixed label for humidity
dht.begin(); // Initialize the DHT22 sensor
pinMode(LED_PIN, OUTPUT); // Set the LED pin as output
pinMode(BUTTON_PIN, INPUT_PULLUP); // Set the button pin with an internal pull-up resistor
// Connect to WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println(F("Connected to WiFi"));
// Start Blynk
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run(); // Run Blynk
// Read temperature and humidity from DHT22 sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// If reading fails, display an error
if (isnan(temperature) || isnan(humidity)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Display temperature and humidity on LCD
lcd.setCursor(6, 0); // Move cursor to the temperature display area
lcd.print(" "); // Clear previous temperature value
lcd.setCursor(6, 0); // Move cursor back
lcd.print(temperature, 1); // Print temperature with 1 decimal place
lcd.print(" C"); // Append " C"
lcd.setCursor(6, 1); // Move cursor to humidity display area
lcd.print(" "); // Clear previous humidity value
lcd.setCursor(6, 1); // Move cursor back to the correct position
lcd.print(humidity, 1); // Print humidity with 1 decimal place
lcd.print(" %"); // Append " %"
// Print to Serial Monitor (optional for debugging)
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C"));
// Send data to Blynk
Blynk.virtualWrite(V0, temperature); // Send temperature to virtual pin V0
Blynk.virtualWrite(V1, humidity); // Send humidity to virtual pin V1
// LED control based on button state
if (digitalRead(BUTTON_PIN) == LOW) { // Button pressed
digitalWrite(LED_PIN, HIGH); // Turn LED ON
Blynk.virtualWrite(V2, 1); // Send LED ON state to Blynk (V2)
} else { // Button released
digitalWrite(LED_PIN, LOW); // Turn LED OFF
Blynk.virtualWrite(V2, 0); // Send LED OFF state to Blynk (V2)
}
delay(2000); // Wait 2 seconds before reading sensor again
}