/* Kelompok 3
Project IoT dengan tema Smart City mengenai Suhu dan Polusi udara
pengambilan topik berdasarkan kasus kabut asap yang pernah terjadi di Indonesia
Menggunakan NodeMCU dan Sensor DHT
Dengan LCD matriks I2C sebagai output*/
#include "DHTesp.h" //membaca data suhu dan polusi
#include <Wire.h>//menghubungkan NodeMCU dengan perangkat lain
#include <LiquidCrystal_I2C.h>//menampilkan data pada LCD
const int DHT_PIN = 15;// digunakan untuk menentukan nomor pin yang digunakan untuk membaca data dari sensor DHT
const int sensorPin = A0; // pin sensor terhubung ke pin analog A0
float voltage;
float ppm;
DHTesp dhtSensor;//sebuah deklarasi objek dhtSensor dari kelas DHTesp. Objek ini digunakan untuk membaca data suhu dan kelembaban dari sensor DHT11 atau DHT22.
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C dan ukuran layar LCD
void setup() {
Serial.begin(115200);//membuka komunikasi serial dengan kecepatan baudrate 115200 bps.
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);//melakukan konfigurasi pada objek dhtSensor yang telah dideklarasikan sebelumnya.
lcd.init(); // inisialisasi LCD
lcd.backlight(); // aktifkan backlight LCD
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();//baca suhu dan polusi kemudian simpan dalam variabel data
voltage = analogRead(sensorPin) * (5.0 / 1023.0); // membaca tegangan dari sensor
ppm = (0.35 * voltage - 0.1) * 1000; // menghitung ppm berdasarkan tegangan
lcd.setCursor(0,0); // set kursor pada baris 1 kolom 1
lcd.print("Suhu:");
lcd.print(data.temperature, 2); // tampilkan suhu dengan 2 angka di belakang koma
lcd.print(" C");
lcd.setCursor(0,1); // set kursor pada baris 1 kolom 1
lcd.print("Polusi:");
lcd.print(ppm, 1); // tampilkan tingkat polusi udara
lcd.print("ppm");
delay(2000); // menunda pembacaan selama 2 detik
}