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

  1. Wemos D1 Mini – Mikrokontroler berbasis ESP8266 dengan konektivitas WiFi.
  2. Sensor Suhu DS18B20 – Sensor suhu digital dengan komunikasi OneWire.
  3. LCD 16×2 dengan I2C Module – Display LCD yang mudah dihubungkan dengan I2C.
  4. Breadboard dan Kabel Jumper – Untuk menyambungkan komponen-komponen.
  5. Resistor 4.7kΩ – Untuk pull-up pada data pin DS18B20.

Skema Koneksi

  1. DS18B20:
    • VCC ke 3.3V
    • GND ke GND
    • Data ke D4 (GPIO2) dengan resistor pull-up 4.7kΩ ke 3.3V
  2. LCD 16×2:
    • VCC ke 5V
    • GND ke GND
    • SDA ke D2 (GPIO4)
    • SCL ke D1 (GPIO5)

Library yang Dibutuhkan

  1. OneWire
  2. DallasTemperature
  3. LiquidCrystal_I2C
  4. UniversalTelegramBot
  5. NTPClient
  6. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
Baca juga  Project IoT Suhu dan Kelembaban

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!

Loading

Project IoT Pembaca Suhu Akuarium dengan DS18B20, LCD 16×2, Wemos D1 Mini, dan Telegram

Komentar anda

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.