#include <Ethernet.h>
#include <ThingSpeak.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Thông số Ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Địa chỉ MAC
IPAddress ip(192, 168, 1, 177); // Địa chỉ IP tĩnh
// Thông số ThingSpeak
unsigned long channelID = 2161411;
const char* apiKey = "3RS0AX5S71RP0DU1";
int value1;
int value2;
float value3; // Đổi thành float cho chất lượng không khí
const int ANALOG_PIN = A0; // Chân analog của MQ135
const int DHTPIN = 4; // Chân data của DHT22
const int DHTTYPE = DHT22; // Loại cảm biến DHT22
DHT dht(DHTPIN, DHTTYPE); // Khai báo đối tượng cảm biến DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); // Khai báo đối tượng màn hình LCD 20x4 với địa chỉ I2C là 0x27
EthernetClient client;
void setup() {
Serial.begin(115200);
delay(1000);
// Khởi tạo Ethernet
Ethernet.begin(mac, ip);
Serial.println("Connected to Ethernet");
// Khởi tạo ThingSpeak
ThingSpeak.begin(client);
dht.begin(); // Khởi động cảm biến DHT22
lcd.begin(20, 4); // Khởi động màn hình LCD
lcd.backlight(); // Bật đèn nền của màn hình LCD
lcd.clear(); // Xóa màn hình LCD
}
float getAirQuality(void) {
int airQuality = analogRead(ANALOG_PIN);
Serial.print("Air Quality Reading (Analog): ");
Serial.println(airQuality);
if (airQuality <= 0 || airQuality >= 1023) {
Serial.println("Invalid air quality reading");
return 0; // Nếu không có giá trị hợp lệ
}
// Tính điện trở và ppm
float resistance = (1023.0 - airQuality) * 10000.0 / airQuality;
float ppm = 116.6020682 * pow(resistance / 10000, -2.769034857);
Serial.print("Calculated Resistance: ");
Serial.println(resistance);
Serial.print("Calculated PPM: ");
Serial.println(ppm);
return ppm;
}
void loop() {
value1 = dht.readTemperature(); // Nhiệt độ
value2 = dht.readHumidity(); // Độ ẩm
if (isnan(value1) || isnan(value2)) {
Serial.println("Failed to read from DHT sensor!");
return; // Ngừng nếu đọc thất bại
}
value3 = getAirQuality(); // Chất lượng không khí
Serial.print("Nhiệt độ - Độ ẩm - Chất lượng không khí: ");
Serial.print(value1);
Serial.print(' ');
Serial.print(value2);
Serial.print(' ');
Serial.println(value3);
// Hiển thị dữ liệu lên màn hình LCD
lcd.setCursor(0, 0);
lcd.print("NHIET DO: ");
lcd.print(value1);
lcd.print("'C");
lcd.setCursor(0, 1);
lcd.print("DO AM: ");
lcd.print(value2);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("CHAT LUONG KHONG KHI: ");
lcd.setCursor(0, 3);
lcd.print(value3);
lcd.print(" PPM");
// Gửi dữ liệu lên ThingSpeak
ThingSpeak.setField(1, value1);
ThingSpeak.setField(2, value2);
ThingSpeak.setField(3, value3);
int response = ThingSpeak.writeFields(channelID, apiKey);
Serial.print("ThingSpeak response: ");
Serial.println(response);
delay(10000); // Chờ 10 giây để đọc lại dữ liệu từ cảm biến DHT22
}