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”.
Alat dan Bahan yang Digunakan :
- 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
OneWireDallasTemperatureLiquidCrystal_I2CUniversalTelegramBotNTPClientWiFiUdp
Pastikan sudah menginstal semua library ini melalui Library Manager di Arduino IDE.
Kode Program
.Berikut adalah kode lengkap beserta penjelasannya:
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
#define BOTtoken "your_BOTtoken"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 25200, 60000);
#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float temperature;
String formattedTime;
String formattedDate;
bool reportedHot = false;
bool reportedCold = false;
void setup() {
Serial.begin(115200);
lcd.begin();
lcd.backlight();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
timeClient.begin();
sensors.begin();
client.setInsecure();
}
void loop() {
timeClient.update();
formattedTime = timeClient.getFormattedTime();
formattedDate = String(timeClient.getEpochTime());
sensors.requestTemperatures();
temperature = sensors.getTempCByIndex(0);
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);
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;
}
} 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;
}
} else {
reportedHot = false;
reportedCold = false;
}
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
delay(1000);
}
void handleNewMessages(int numNewMessages) {
for (int i = 0; i < numNewMessages; i++) {
String chat_id = String(bot.messages[i].chat_id);
String text = bot.messages[i].text;
if (text == "lapor") {
String message = "Suhu: " + String(temperature) + " C\nWaktu: " + formattedTime + "\nTanggal: " + formattedDate;
bot.sendMessage(chat_id, message, "");
}
}
}
Penjelasan
- Inisialisasi Library dan Variabel:
ESP8266WiFi.h, WiFiClientSecure.h, UniversalTelegramBot.h, LiquidCrystal_I2C.h, OneWire.h, DallasTemperature.h, NTPClient.h, dan WiFiUdp.h adalah library yang diperlukan untuk mengatur WiFi, Telegram bot, LCD, sensor suhu DS18B20, dan mendapatkan waktu dari server NTP.ssid dan password 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.