Pendahuluan
Perkembangan Internet of Things (IoT) telah membawa perubahan besar dalam dunia monitoring dan otomasi. Berbagai perangkat dapat saling terhubung melalui internet sehingga proses pemantauan maupun pengendalian dapat dilakukan secara real-time dari mana saja.
Pada proyek ini saya membangun sebuah sistem monitoring suhu dan kelembapan berbasis IoT menggunakan ESP-01 (ESP8266) sebagai mikrokontroler, sensor DHT11 sebagai pembaca suhu dan kelembapan, serta web hosting berbasis PHP dan MySQL sebagai pusat penyimpanan data. Selain itu, sistem juga dilengkapi dengan kontrol relay yang dapat dioperasikan melalui dashboard website.
Proyek ini dirancang sebagai media pembelajaran sekaligus contoh implementasi IoT sederhana yang mudah dikembangkan untuk berbagai kebutuhan seperti monitoring ruang server, laboratorium, gudang, ruang kelas, greenhouse, maupun smart home.
| Tampilan sebenarnya di OLED |
Tujuan
Tujuan pembuatan proyek ini adalah:
⦁ Menampilkan data suhu dan kelembapan secara real-time.
⦁ Menyimpan data historis ke database MySQL.
⦁ Mengendalikan relay dari website.
⦁ Membuat dashboard monitoring yang responsif dan mudah digunakan.
⦁ Menjadi media pembelajaran IoT menggunakan ESP8266.
Hardware yang Digunakan
⦁ PHP 8
⦁ MySQL
⦁ Bootstrap 5
⦁ Chart.js
⦁ Visual Studio Code
⦁ XAMPP (untuk pengujian lokal)
⦁ Web Hosting (untuk implementasi online)
Arsitektur Sistem
Cara Kerja Sistem
Sistem bekerja dengan alur sebagai berikut:
⦁ ESP-01 memproses hasil pembacaan sensor.
⦁ ESP-01 menghubungkan diri ke jaringan WiFi.
⦁ Data dikirim ke server menggunakan protokol HTTPS.
⦁ File api.php menerima data dari ESP-01.
⦁ Data disimpan ke database MySQL.
⦁ Dashboard mengambil data terbaru menggunakan AJAX.
⦁ Grafik dan tabel riwayat diperbarui secara otomatis.
⦁ Status relay dapat diubah dari dashboard dan dibaca kembali oleh ESP-01.
Wiring Hardware
Struktur Database
Sistem menggunakan dua tabel utama.
Tabel suhu
- id
- suhu
- kelembapan
- waktu
Tabel relay
- id
- status
Status relay hanya memiliki dua nilai:
- ON
- OFF
- Monitoring suhu secara real-time.
- Monitoring kelembapan.
- Grafik suhu.
- Grafik kelembapan.
- Riwayat data.
- Kontrol relay.
- Auto refresh.
- Export data.
- Responsive design
Program ESP-01
Program dikembangkan menggunakan Arduino IDE.
Fungsi utama program meliputi:
- Menghubungkan ESP-01 ke jaringan WiFi.
- Membaca data sensor DHT11.
- Mengirim data ke server menggunakan HTTPS.
- Membaca status relay dari server.
- Mengaktifkan atau menonaktifkan relay.
- Menampilkan informasi melalui Serial Monitor.
- Monitoring dapat dilakukan dari mana saja.
- Data tersimpan otomatis di database.
- Dashboard memiliki tampilan modern.
- Mendukung grafik real-time.
- Dapat dikembangkan menjadi sistem Smart Home.
- Menggunakan komponen yang relatif murah.
- Mudah diprogram menggunakan Arduino IDE.
- Kendala yang Ditemui
- Konfigurasi HTTPS pada ESP8266.
- Sinkronisasi kontrol relay dengan dashboard.
- Pengaturan auto refresh grafik.
- Penyesuaian skala grafik Chart.js.
- Pemilihan catu daya 3.3V yang stabil untuk ESP-01.
- Keterbatasan jumlah pin I/O pada ESP-01.
- Mengganti sensor DHT11 dengan DHT22 atau DS18B20 untuk meningkatkan akurasi.
- Menambahkan notifikasi Telegram atau WhatsApp saat suhu melewati batas tertentu.
- Mengimplementasikan autentikasi API yang lebih kuat.
- Menambahkan fitur ekspor data ke Excel dan PDF.
- Menampilkan grafik harian, mingguan, dan bulanan.
- Menambahkan dukungan beberapa sensor dalam satu dashboard.
- Mengintegrasikan sistem dengan platform cloud IoT.
/*****************************************************
* IoT Monitoring Suhu
* Board : ESP32 Lolin
* Sensor : DHT11
* Relay : GPIO5
* Server : HTTPS PHP + MySQL
*****************************************************/
#include
#include
#include
#include
#include
#include
#include
//======================
// Konfigurasi Pin
//======================
#define DHTPIN 4 // GPIO4
#define DHTTYPE DHT11
#define RELAY_PIN 5 // GPIO5
DHT dht(DHTPIN, DHTTYPE);
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//======================
// WiFi
//======================
const char* ssid = "SSID";
const char* password = "password";
//======================
// HTTPS API
//======================
const char* server = "https://domain.com/suhu_api.php";
// Interval kirim data
unsigned long lastSend = 0;
const unsigned long interval = 10000; //10 detik
//====================================================
void connectWiFi()
{
Serial.print("Menghubungkan WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("========================");
Serial.println("WiFi Connected");
Serial.print("IP Address : ");
Serial.println(WiFi.localIP());
Serial.println("========================");
}
//====================================================
void setup()
{
Serial.begin(115200);
Wire.begin(21,22);
if(!display.begin(SSD1306_SWITCHCAPVCC,0x3C))
{
Serial.println("OLED tidak ditemukan");
while(true);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(15,20);
display.println("START");
display.display();
delay(2000);
pinMode(RELAY_PIN, OUTPUT);
// Relay OFF
digitalWrite(RELAY_PIN, LOW);
dht.begin();
connectWiFi();
}
//====================================================
void loop()
{
if (WiFi.status() != WL_CONNECTED)
{
connectWiFi();
}
if (millis() - lastSend >= interval)
{
lastSend = millis();
kirimData();
}
}
//====================================================
void kirimData()
{
float suhu = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(suhu) || isnan(hum))
{
Serial.println("Gagal membaca DHT11");
return;
}
Serial.println("-----------------------------");
Serial.print("Suhu : ");
Serial.print(suhu);
Serial.println(" °C");
Serial.print("Kelembapan : ");
Serial.print(hum);
Serial.println(" %");
WiFiClientSecure client;
// Abaikan sertifikat SSL
client.setInsecure();
HTTPClient http;
http.begin(client, server);
http.addHeader("Content-Type",
"application/x-www-form-urlencoded");
String postData =
"suhu=" + String(suhu, 1) +
"&hum=" + String(hum, 1);
int httpCode = http.POST(postData);
Serial.print("HTTP Code : ");
Serial.println(httpCode);
if (httpCode > 0)
{
String response = http.getString();
response.trim();
tampilOLED(suhu, hum, response);
Serial.print("Relay Server : ");
Serial.println(response);
if (response == "ON")
{
digitalWrite(RELAY_PIN, LOW); // Relay Aktif LOW
}
else
{
digitalWrite(RELAY_PIN, HIGH);
}
}
else
{
Serial.println("Gagal mengirim data");
}
http.end();
Serial.println("-----------------------------");
}
void tampilOLED(float suhu,float hum,String relayStatus)
{
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.println("IoT Monitoring");
display.drawLine(0,10,128,10,SSD1306_WHITE);
display.setCursor(0,18);
display.print("WiFi : ");
if(WiFi.status()==WL_CONNECTED)
display.println("Connected");
else
display.println("Disconnected");
display.setCursor(0,30);
display.print("Temp : ");
display.print(suhu,1);
display.println(" C");
display.setCursor(0,42);
display.print("Hum : ");
display.print(hum,1);
display.println(" %");
display.setCursor(0,54);
display.print("Relay: ");
display.println(relayStatus);
display.display();
}

0 Response to "Membangun Sistem Monitoring Suhu Berbasis IoT Menggunakan ESP-01, DHT11, PHP, dan MySQL"
Posting Komentar