Gudang Ilmu: Membuat IoT Pembaca Suhu Akuarium dengan DS18B20, LCD 16×2, Telegram dan Wemos D1 Mini

Saturday, 29 June 2024

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


 

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 :

  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  sudah menginstal semua library ini melalui Library Manager di Arduino IDE.

Kode Program

.Berikut adalah kode lengkap beserta penjelasannya:


#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 

  1. Inisialisasi Library dan Variabel:
    • ESP8266WiFi.hWiFiClientSecure.hUniversalTelegramBot.hLiquidCrystal_I2C.hOneWire.hDallasTemperature.hNTPClient.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.

Sumber : duwiarsana

No comments:

Post a Comment

terimakasih telah mengunjungi blog saya.