#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define LED_PIN 26 // khai báo chân pin cho đèn LED
#define dht_pin 27 //khai bao chân pin của dht
#define pir_sensor 25 // khai báo chân pin của pir
String serverget = "https://postman-echo.com/get"; // khai báo server get
String serverpost = "https://postman-echo.com/post"; // khai báo server post
DHTesp dhtSensor; // khởi tạo biến dhtsensor
LiquidCrystal_I2C lcd(0x27,20,4); // khai báo định dạng của màn hình LED
// thiết lập thông số hệ thống
void setup() {
// khai báo chân pin cho đèn LED và PIR sensor
pinMode(LED_PIN, OUTPUT);
pinMode(pir_sensor, INPUT);
//
Serial.begin(9600);
Serial.print("Khởi tạo kết nối dữ liệu cảm biến !!\n");
// Khởi tạo wifi
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println("Đã kết nối wifi !");
//
lcd.init(); // khới tạo biến LCD
// xuất giá trị lên LCD
lcd.backlight();
lcd.setCursor(1,0); // khởi tạo vị trí con trỏ trên màn hình LCD
lcd.print("ESP lay du lieu !!"); // in dòng chữ bắt đầu từ vị trí con trỏ
delay(1000); // delay 1s
// khai bao dht
dhtSensor.setup(dht_pin, DHTesp::DHT22); // khai báo cảm biến với chân pin đã nêu.
}
void loop() {
// lấy thông tin từ cảm biến DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temp = data.temperature;
float humid = data.humidity;
String stemp = String(temp) + (char)223+ "C"; // chuyển dữ liệu sang dạng string
String shumid = String(humid) + "%"; // chuyển dữ liệu sang dạng string
// hiển thị giá trị ra màn hình LCD
lcd.clear(); // xóa màn hình
lcd.setCursor(0,0); // con trỏ lcd trở về đầu tiên
lcd.print("Temp: "+stemp);
lcd.setCursor(0,1);
lcd.print("Humid: "+ shumid);
// đoạn lệnh xử lý tín hiệu từ sensor
/*
int pir_value = digitalRead(pir_sensor);
if(pir_value == 1){
Serial.println("Phát hiện chuyển động !!");
digitalWrite(LED_PIN, HIGH); // Bật đèn led
delay(100);
}
else{
//Serial.println("Không có chuyển động.");
digitalWrite(LED_PIN, LOW); // tắt đèn led
delay(100);
}
*/
// Thực hiện gửi dữ liệu qua server get
HTTPClient http;
Serial.println("gửi dữ liệu qua server GET URL");
String getdata = serverget + "?temp="+ String(temp) +"&humid="+ String(humid); // đóng gói dữ liệu vào url
http.begin(getdata.c_str());
int httpResponseCode = http.GET(); // gửi get request
if (httpResponseCode > 0)
{
Serial.print("HTTP Response code: "); Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println(payload);
}
else {
Serial.print("Error code: "); Serial.println(httpResponseCode);
}
http.end();
// thực hiện gửi dữ liệu qua server post URL
Serial.println("gửi dữ liệu qua server POST URL");
http.begin(serverpost);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");// khai báo định dạng truyền dẫn post là url
String httpRequestData = "?temp="+ String(temp) +"&humid="+ String(humid); // lập đóng gói dữ liệu vào url
int httppost = http.POST(httpRequestData); // gửi post request.
if (httppost > 0)
{
Serial.print("HTTP Response code: "); Serial.println(httppost);
String payload2 = http.getString();
Serial.println(payload2);
}
else {
Serial.print("Error code: "); Serial.println(httppost);
}
http.end();
// Thực hiện gửi dữ liệu qua post đóng gói dữ liệu trong json
Serial.println("gửi dữ liệu qua server POST Json");
http.begin(serverpost);
http.addHeader("Content-Type", "application/json"); // khai báo định dạng truyền dữ liệu là json.
String jsonpostdata = "{\"temp\": " + String(temp) +",\"humid\": " + String(humid) + "}";// đóng gói dữ liệu vào json
int httpjson = http.POST(jsonpostdata);
if (httpjson > 0)
{
Serial.print("HTTP Response code: "); Serial.println(httpjson);
String payload3 = http.getString();
Serial.println(payload3);
}
else {
Serial.print("Error code: "); Serial.println(httpjson);
}
http.end();
delay(2000); // delay 2s
}