#define BLYNK_TEMPLATE_ID "TMPLUbrZ3fyl"
#define BLYNK_TEMPLATE_NAME "ChawinTemplate"
#define BLYNK_AUTH_TOKEN "WCX2B2C1pR0xdw1mRFAJdiexvYH1vfG0"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define LED_V0 5
#define BLYNK_PRINT Serial
/* include Library ที่เกี่ยวข้องมาใช้งาน */
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
#define DHTPIN 2 // กำหนดขา I/O ให้เซ็นเซอร์ DHT
#define DHTTYPE DHT22 // กำหนดชนิดของเซ็นเซอร์ DHT คือ DHT22 (AM2302), AM2321
#define NTP_SERVER "1.th.pool.ntp.org"
#define UTC_OFFSET 25200
#define UTC_OFFSET_DST 0
DHT dht(DHTPIN, DHTTYPE); //สร้าง Opject dht และกำหนดพารามิเตอร์ 2 ค่า
//char auth[] = "WCX2B2C1pR0xdw1mRFAJdiexvYH1vfG0"; // สร้าตัวแปรอาเรย์ auth[] เก็บ่คาจากตัวแปร BLYNK_AUTH_TOKEN
char auth[] = BLYNK_AUTH_TOKEN; // สร้าตัวแปรอาเรย์ auth[] เก็บ่คาจากตัวแปร BLYNK_AUTH_TOKEN
char ssid[] = "Wokwi-GUEST"; // สร้าตัวแปรอาเรย์ ssid[] กำหนดชื่อ ssid
char pass[] = ""; // สร้าตัวแปรอาเรย์ pass[] กำหนดรหัสผ่านของ ssid
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(15, 1);
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
LCD.setCursor(8, 0);
LCD.println(&timeinfo, "%H:%M:%S");
LCD.setCursor(0, 1);
LCD.println(&timeinfo, "%d/%m/%Y %Z");
}
BlynkTimer timer; // เรียกฟังก์ชั่นเวลา หรือ timer
BLYNK_WRITE(V1)
{
digitalWrite(21, param.asInt()); //รับค่าจะ blynk ผ่านตัวแปร param.asInt() แล้วนำมากำหนดค่าให้ขา 12
}
void setup()
{
Serial.begin(115200); // สร้างการเชื่อต่อการแสดงผลข้อมูลผ่านทาง Serial Monitor
Serial.println(F("DHT22 example!")); // สั่งพิมพ์ข้อความบันทึกใน Flash Memory
pinMode(LED_V0, OUTPUT);
Blynk.begin(auth, ssid, pass); // คำสั่งเชื่อมต่อ WiFi และเริ่มต้นการทำงานของ Blynk
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void loop()
{
Blynk.run(); // สั่งรัน Blynk
timer.run(); // สั่งรัน timer
humtemValue(); // เรียกฟังก์ชั่น humtemValue ให้ทำงาน
printLocalTime();
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
Blynk.virtualWrite(V2, asctime (timeinfo));
delay(1000); // หน่วงเวลาการทำงาน 1 วินาที
}
/* function จัดการข้อมูลจากเซ็นเซอร์*/
void humtemValue() { // สร้างฟังก์ชั่น
float h = dht.readHumidity(); // สร้างตังแปร h ให้อ่านค่า Humidity จากเซ็นเซอร์
float t = dht.readTemperature(); // สร้างตังแปร h ให้อ่านค่า Temperature จากเซ็นเซอร์
if (isnan(h) || isnan(t)) { // ใช้ if เช็คการทำงานของเซ็นเซอร์
Serial.println("Failed to read from DHT sensor!"); // ถ้าไม่ทำงานให้พืมพ์ข้อความ
return; // คืนค่าที่ได้จากเซ็นเซอร์
}
Serial.print(" Humidity :: "); // พิมพ์ข้อความ
Serial.println(h); // ให้พิมพ์ค่า Humidity ที่ได้จากเซ็นเซอร์
Serial.print(" Temperature :: "); // // พิมพ์ข้อความ
Serial.println(t); // ให้พิมพ์ค่า Temperature ที่ได้จากเซ็นเซอร์
Blynk.virtualWrite(V5, t); // กำหนด Virtual Pin 5 ส่งค่า Temperature ไปที่ Blynk app
Blynk.virtualWrite(V6, h); // กำหนด Virtual Pin 6 ส่งค่า Humidity ไปที่ Blynk app
if (t >= 40) {
digitalWrite(LED_V0, HIGH);
Blynk.virtualWrite(V0, HIGH);
// Blynk.virtualWrite(V2, "ON");
} else {
digitalWrite(LED_V0, LOW);
Blynk.virtualWrite(V0, LOW);
// Blynk.virtualWrite(V2, "Off");
}
}