// **
// *
// Nama : Dimyati
// No. regis : 1958408840-83
// Penjelasan Tugas :
// Tugas ini merupakan implementasi penerapan proyek IoT dimana digunakan untuk memonitoring
// suhu dan kelembapan pada kandang lalat BSF. Dimana terdapat nyala lampu otomatis ketika
// suhu > 29 menghasilkan nyala lampu merah dan suhu < 21 menghasilkan nyala lampu biru. Hasil
// dari proyek ini dapat dilihat pada Thingsboard.
// Link Thingsboard : https://thingsboard.cloud/dashboard/6b61b291-3862-11ef-8286-cf8f93908d20?publicId=435ef050-3871-11ef-bc99-d1c9c963b35b
// **
// *
#include <Wire.h> // Library untuk komunikasi I2C (Inter-Integrated Circuit)
#include <LiquidCrystal_I2C.h> // Library untuk mengontrol LCD karakter menggunakan modul I2C
#include <WiFi.h> // Library untuk menghubungkan mikrokontroler ke jaringan WiFi
#include <HTTPClient.h> // Library untuk mengirim permintaan HTTP dari mikrokontroler
#include <PubSubClient.h> // Library untuk mengimplementasikan protokol MQTT pada mikrokontroler
#include <DHT.h> // Library untuk sensor suhu dan kelembaban DHT
// Definisikan kredensial WiFi dan server ThingsBoard
#define ssid "Wokwi-GUEST" // Nama SSID WiFi
#define password "" // Kata sandi WiFi
#define Thingsboard_Server "thingsboard.cloud" // Alamat server ThingsBoard
#define Thingsboard_Token "Temp_Hum_Lalat_Dim" // Token autentikasi ThingsBoard
// Pin untuk sensor dan perangkat keras
#define DHT22_PIN 15 // Pin untuk sensor DHT22
#define LED1_PIN 32 // Pin untuk LED 1
#define LED2_PIN 33 // Pin untuk LED 2
// Inisialisasi objek untuk sensor dan perangkat keras
DHT dht(DHT22_PIN, DHT22); // Objek sensor DHT22
const int numReadings = 10; // Jumlah pembacaan sensor untuk rata-rata
int readings[numReadings]; // Array untuk menyimpan pembacaan sensor
int readingIndex = 0; // Indeks untuk array pembacaan
int total = 0; // Total pembacaan untuk perhitungan rata-rata
// Inisialisasi objek LCD
LiquidCrystal_I2C oled(0x27, 16, 2); // Objek untuk LCD dengan alamat 0x27
void setup() {
Serial.begin(115200); // Mulai serial monitor dengan baud rate 115200
// Setup pin dan sensor pada awal program
dht.begin(); // Mulai sensor DHT22
pinMode(LED1_PIN, OUTPUT); // Konfigurasi pin LED1 sebagai output
pinMode(LED2_PIN, OUTPUT); // Konfigurasi pin LED2 sebagai output
oled.init(); // Inisialisasi LCD
oled.backlight(); // Nyalakan backlight LCD
oled.setCursor(0,0); // Set kursor LCD di baris 1, kolom 1
oled.print("Starting Program"); // Tampilkan pesan awal
delay(2000); // Tunda selama 2 detik
oled.clear(); // Bersihkan layar LCD
oled.setCursor(0,0); // Set kursor LCD di baris 1, kolom 1
oled.print("Temperature &"); // Tampilkan pesan "Temperature &"
oled.setCursor(8,1); // Set kursor LCD di baris 2, kolom 9
oled.print("Humidity"); // Tampilkan pesan "Humidity"
delay(2000); // Tunda selama 2 detik
oled.clear(); // Bersihkan layar LCD
oled.setCursor(0,0); // Set kursor LCD di baris 1, kolom 1
oled.print("Initializing . . ."); // Tampilkan pesan "Initializing . . ."
delay(2000); // Tunda selama 2 detik
oled.clear(); // Bersihkan layar LCD
// Inisialisasi array pembacaan untuk sensor suhu
for (int i = 0; i < numReadings; i++) {
readings[i] = 0; // Set nilai awal array pembacaan menjadi 0
}
// Menghubungkan ke jaringan WiFi
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); // Tampilkan nama SSID yang dihubungkan
WiFi.begin(ssid, password); // Mulai koneksi WiFi dengan nama SSID dan kata sandi yang telah ditentukan
while (WiFi.status() != WL_CONNECTED) { // Tunggu hingga terhubung ke WiFi
delay(100);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected"); // Tampilkan pesan WiFi terhubung
Serial.println(" Starting!"); // Tampilkan pesan " Starting!"
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // Tampilkan alamat IP lokal
delay(100); // Tunda selama detik
}
void loop() {
// Membaca nilai dari sensor suhu LM35
// (Tidak ada kode pengambilan nilai LM35 dalam kode ini)
// Membaca nilai suhu dan kelembaban dari sensor DHT22
float humidity = dht.readHumidity(); // Baca nilai kelembaban dari sensor DHT22
float temp = dht.readTemperature(); // Baca nilai suhu dari sensor DHT22
// Output data ke Serial Monitor
if (temp > 29) {
digitalWrite(LED1_PIN, HIGH); // Nyalakan LED1 jika suhu lebih dari 29°C
digitalWrite(LED2_PIN, LOW); // Matikan LED2
} else if (temp >= 21 && temp <= 29) {
digitalWrite(LED1_PIN, LOW); // Matikan LED1
digitalWrite(LED2_PIN, LOW); // Matikan LED2
} else {
digitalWrite(LED1_PIN, LOW); // Matikan LED1
digitalWrite(LED2_PIN, HIGH); // Nyalakan LED2 jika suhu kurang dari 21°C
}
// Menampilkan data pada LCD
oled.setCursor(0,0); // Set kursor LCD di baris 1, kolom 1
oled.println ("Temp: " + String(temp) + " C "); // Tampilkan suhu
oled.setCursor(0,1); // Set kursor LCD di baris 2, kolom 1
oled.println ("Hum: " + String(humidity) + " % "); // Tampilkan kelembaban
// Mengirim data ke ThingsBoard
sendDataToThingsBoard(temp, humidity); // Panggil fungsi untuk mengirim data ke ThingsBoard
}
// Fungsi untuk mengirim data ke ThingsBoard
void sendDataToThingsBoard(float temp, float humidity) {
WiFiClient client; // Inisialisasi objek WiFiClient
HTTPClient http; // Inisialisasi objek HTTPClient
// URL untuk mengirim data ke ThingsBoard
String url = "http://" + String(Thingsboard_Server) + "/api/v1/" + String(Thingsboard_Token) + "/telemetry";
// Payload data dalam format JSON
String payload = "{";
payload += "\"Temperature\":";
payload += String(temp);
payload += ",\"Humidity\":";
payload += String(humidity);
payload += "}";
// Kirim data ke ThingsBoard menggunakan HTTP POST request
http.begin(client, url); // Memulai koneksi HTTP ke URL yang ditentukan
http.addHeader("Content-Type", "application/json"); // Tambahkan header Content-Type untuk JSON
int httpResponseCode = http.POST(payload); // Kirim payload sebagai POST request
// Memeriksa respon dari server ThingsBoard
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode); // Tampilkan kode respon HTTP
} else {
Serial.print("Error sending data to ThingsBoard. HTTP Response code: ");
Serial.println(httpResponseCode); // Tampilkan pesan kesalahan jika gagal mengirim data
}
http.end(); // Selesai dengan koneksi HTTP
}