|

Proyek Robotik #9: Pesan Via Bluetooth

Proyek ini merupakan sistem tampilan pesan nirkabel menggunakan ESP32 dan LCD 16×2 I2C. Pesan teks dikirim dari perangkat (seperti smartphone) melalui koneksi Bluetooth, lalu ditampilkan di LCD. Jika pesan lebih panjang dari 16 karakter, maka teks akan bergeser otomatis (scroll) untuk memastikan seluruh pesan dapat terbaca.

Proyek ini cocok untuk:

  • Display pesan notifikasi nirkabel.
  • Belajar komunikasi Bluetooth dan tampilan teks dinamis di LCD.
  • Proyek IoT berbasis antarmuka sederhana.

Cara Kerja:

  1. ESP32 memulai koneksi Bluetooth dengan nama “NAMA_BLUETOOTH”.
  2. LCD I2C menampilkan tulisan awal: “Bluetooth siap” dan “Tunggu…”.
  3. Saat pengguna mengirim pesan via aplikasi Bluetooth (contoh: Serial Bluetooth Terminal), ESP32 akan:
    • Membaca pesan tersebut.
    • Menampilkannya di LCD pada baris kedua.
    • Jika panjang pesan lebih dari 16 karakter, teks akan bergulir otomatis setiap 500 ms.

Komponen yang Digunakan:

  • 1 × ESP32
  • 1 x LED
  • 1 x LCD 16×2 dengan modul I2C
  • Kabel jumper
  • 1 x Breadboard
  • 1 x Kabel USB (untuk upload dan power)

Skema:

LCD PinFungsiESP32 Pin
VCCPower3.3V
GNDGroundGND
SDADataGPIO 21
SCLClockGPIO 22

Kode:

#include "BluetoothSerial.h"       // Library untuk Bluetooth
#include <Wire.h>                 // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h>    // Library untuk LCD I2C

BluetoothSerial SerialBT;               // Objek untuk Bluetooth Serial
LiquidCrystal_I2C lcd(0x27, 16, 2);     // Alamat I2C LCD (0x27 atau 0x3F)

String incomingData = "";               // Variabel untuk menyimpan data Bluetooth
int scrollIndex = 0;                    // Indeks untuk scrolling teks
unsigned long previousMillis = 0;       // Waktu sebelumnya untuk scrolling
const long interval = 500;              // Interval waktu scrolling (500 ms)

void setup() {
  SerialBT.begin("NAMA_BLUETOOTH");     // Inisialisasi Bluetooth dengan nama perangkat
  Serial.begin(115200);                 // Inisialisasi Serial Monitor
  lcd.init();                           // Inisialisasi LCD
  lcd.backlight();                      // Nyalakan lampu latar LCD

  lcd.setCursor(0, 0);
  lcd.print("Bluetooth siap");
  lcd.setCursor(0, 1);
  lcd.print("Tunggu...");
  Serial.println("Bluetooth siap, sambungkan ke 'NAMA_BLUETOOTH'");
}

void loop() {
  // Cek apakah ada data masuk dari Bluetooth
  if (SerialBT.available()) { 
    incomingData = SerialBT.readStringUntil('\n');  // Baca data hingga newline
    incomingData.trim();                            // Hapus karakter whitespace
    scrollIndex = 0;                                // Reset indeks scrolling
    Serial.print("Data diterima: ");
    Serial.println(incomingData);
  }

  // Scroll teks di LCD
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;

    lcd.clear();                                     // Hapus layar LCD
    lcd.setCursor(0, 0);
    lcd.print("Pesan:");
    lcd.setCursor(0, 1);

    // Tampilkan bagian teks sesuai indeks scrolling
    int textLength = incomingData.length();
    if (textLength <= 16) {
      lcd.print(incomingData);               // Jika teks pendek, tampilkan langsung
    } else {
      String scrollingText = incomingData.substring(scrollIndex, scrollIndex + 16);
      lcd.print(scrollingText);              // Tampilkan potongan teks
      scrollIndex++;                         // Pindahkan indeks scrolling
      if (scrollIndex > textLength - 16) {
        scrollIndex = 0;                     // Ulangi dari awal teks
      }
    }
  }
}

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *