Halo teman-teman, ketemu lagi kita di artikel duwiarsana nih. Kali ini, kita akan membuat proyek IoT yang menarik, yaitu pembaca suhu akuarium dengan sensor DS18B20, LCD 16×2, dan Wemos D1 Mini. Proyek ini juga bisa mengirimkan data suhu ke Telegram saat kita kirim pesan “lapor”. Yuk, kita mulai!
Alat dan Bahan yang Dibutuhkan
- Wemos D1 Mini – Mikrokontroler berbasis ESP8266 dengan konektivitas WiFi.
- Sensor Suhu DS18B20 – Sensor suhu digital dengan komunikasi OneWire.
- LCD 16×2 dengan I2C Module – Display LCD yang mudah dihubungkan dengan I2C.
- Breadboard dan Kabel Jumper – Untuk menyambungkan komponen-komponen.
- Resistor 4.7kΩ – Untuk pull-up pada data pin DS18B20.
Skema Koneksi
- DS18B20:
- VCC ke 3.3V
- GND ke GND
- Data ke D4 (GPIO2) dengan resistor pull-up 4.7kΩ ke 3.3V
- LCD 16×2:
- VCC ke 5V
- GND ke GND
- SDA ke D2 (GPIO4)
- SCL ke D1 (GPIO5)
Library yang Dibutuhkan
OneWire
DallasTemperature
LiquidCrystal_I2C
UniversalTelegramBot
NTPClient
WiFiUdp
Pastikan teman-teman sudah menginstal semua library ini melalui Library Manager di Arduino IDE.
Kode Program
Nah, sekarang kita masuk ke bagian coding. Berikut adalah kode lengkap beserta penjelasan dalam bahasa Indonesia:
#include <ESP8266WiFi.h> // Library untuk koneksi WiFi
#include <WiFiClientSecure.h> // Library untuk koneksi aman
#include <UniversalTelegramBot.h> // Library untuk Telegram Bot
#include <LiquidCrystal_I2C.h> // Library untuk LCD I2C
#include <OneWire.h> // Library untuk komunikasi OneWire
#include <DallasTemperature.h> // Library untuk sensor suhu Dallas
#include <NTPClient.h> // Library untuk NTP client
#include <WiFiUdp.h> // Library untuk UDP WiFi
// Ganti dengan kredensial jaringan Anda
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// Inisialisasi Telegram BOT
#define BOTtoken "your_BOTtoken" // Token Bot Anda (Dapatkan dari Botfather)
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
// Inisialisasi NTP client untuk mendapatkan waktu
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000); // 25200 untuk WIB, sesuaikan dengan zona waktu Anda
// Pin untuk sensor DS18B20
#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, 16 kolom dan 2 baris
// Variabel untuk menyimpan data suhu dan waktu
float temperature;
String formattedTime;
String formattedDate;
bool reportedHot = false;
bool reportedCold = false;
void setup() {
// Memulai komunikasi serial untuk debugging
Serial.begin(115200);
// Inisialisasi LCD
lcd.begin();
lcd.backlight(); // Menyalakan backlight LCD
// Menghubungkan ke Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// Inisialisasi NTP client
timeClient.begin();
// Inisialisasi sensor suhu
sensors.begin();
// Menyiapkan Telegram bot
client.setInsecure();
}
void loop() {
// Memperbarui waktu
timeClient.update();
formattedTime = timeClient.getFormattedTime();
formattedDate = String(timeClient.getEpochTime());
// Meminta pembacaan suhu dari DS18B20
sensors.requestTemperatures();
temperature = sensors.getTempCByIndex(0);
// Menampilkan suhu dan waktu di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Time: ");
lcd.print(formattedTime);
// Memeriksa suhu dan menampilkan pesan jika terlalu panas atau dingin
if (temperature > 25) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Suhu terlalu panas");
if (!reportedHot) {
bot.sendMessage("your_chat_id", "Peringatan: Suhu terlalu panas! Suhu saat ini: " + String(temperature) + " C", "");
reportedHot = true;
reportedCold = false; // Reset laporan suhu dingin
}
} else if (temperature < 15) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Suhu terlalu dingin");
if (!reportedCold) {
bot.sendMessage("your_chat_id", "Peringatan: Suhu terlalu dingin! Suhu saat ini: " + String(temperature) + " C", "");
reportedCold = true;
reportedHot = false; // Reset laporan suhu panas
}
} else {
reportedHot = false; // Reset laporan suhu panas
reportedCold = false; // Reset laporan suhu dingin
}
// Memeriksa pesan baru di Telegram
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
delay(1000); // Jeda 1 detik sebelum loop berikutnya
}
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id); // Mendapatkan chat ID dari pesan
String text = bot.messages[i].text; // Mendapatkan teks dari pesan
// Jika pesan adalah "lapor", kirimkan data suhu dan waktu
if (text == "lapor") {
String message = "Suhu: " + String(temperature) + " C\nWaktu: " + formattedTime + "\nTanggal: " + formattedDate;
bot.sendMessage(chat_id, message, ""); // Mengirim pesan balasan ke Telegram
}
}
}
Penjelasan Kode
- Inisialisasi Library dan Variabel:
ESP8266WiFi.h
,WiFiClientSecure.h
,UniversalTelegramBot.h
,LiquidCrystal_I2C.h
,OneWire.h
,DallasTemperature.h
,NTPClient.h
, danWiFiUdp.h
adalah library yang diperlukan untuk mengatur WiFi, Telegram bot, LCD, sensor suhu DS18B20, dan mendapatkan waktu dari server NTP.ssid
danpassword
digunakan untuk menyimpan kredensial WiFi.BOTtoken
adalah token untuk bot Telegram.timeClient
digunakan untuk mengatur NTP client dengan zona waktu yang disesuaikan.oneWire
mengatur komunikasi dengan sensor DS18B20.lcd
mengatur komunikasi dengan LCD melalui I2C.
- Fungsi
setup
:- Memulai komunikasi serial untuk debugging.
- Menginisialisasi LCD dan mengaktifkan backlight.
- Menghubungkan ke jaringan WiFi dan menunggu hingga koneksi berhasil.
- Menginisialisasi NTP client dan sensor suhu.
- Menyiapkan koneksi aman untuk Telegram bot.
- Fungsi
loop
:- Memperbarui waktu dari server NTP.
- Meminta data suhu dari sensor DS18B20.
- Menampilkan suhu dan waktu di LCD.
- Memeriksa pesan baru dari Telegram bot dan memprosesnya jika ada.
- Fungsi
handleNewMessages
:- Memproses pesan baru yang diterima oleh bot Telegram.
- Jika pesan adalah “lapor”, bot akan mengirimkan data suhu dan waktu kembali ke pengirim pesan.
Penutup
Itu dia teman-teman, proyek sederhana kita kali ini. Dengan proyek ini, kalian bisa memonitor suhu akuarium secara real-time dan mendapatkan laporannya langsung ke Telegram. Semoga artikel ini bermanfaat dan jangan lupa untuk terus eksplorasi dunia IoT. Sampai jumpa di artikel selanjutnya!
Eksplorasi konten lain dari Duwi Arsana
Berlangganan untuk dapatkan pos terbaru lewat email.