{"id":43,"date":"2026-02-09T13:13:48","date_gmt":"2026-02-09T06:13:48","guid":{"rendered":"https:\/\/blog.webie.my.id\/?p=43"},"modified":"2026-02-10T09:01:09","modified_gmt":"2026-02-10T02:01:09","slug":"proyek-robotik-9-pesan-via-bluetooth","status":"publish","type":"post","link":"https:\/\/blog.webie.my.id\/?p=43","title":{"rendered":"Proyek Robotik #9: Pesan Via Bluetooth"},"content":{"rendered":"\n<p>Proyek ini merupakan sistem tampilan pesan nirkabel menggunakan ESP32 dan LCD 16&#215;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.<\/p>\n\n\n\n<p>Proyek ini cocok untuk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Display pesan notifikasi nirkabel.<\/li>\n\n\n\n<li>Belajar komunikasi Bluetooth dan tampilan teks dinamis di LCD.<\/li>\n\n\n\n<li>Proyek IoT berbasis antarmuka sederhana.<\/li>\n<\/ul>\n\n\n\n<p><strong>Cara Kerja:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>ESP32 memulai koneksi Bluetooth dengan nama &#8220;NAMA_BLUETOOTH&#8221;.<\/li>\n\n\n\n<li>LCD I2C menampilkan tulisan awal: &#8220;Bluetooth siap&#8221; dan &#8220;Tunggu&#8230;&#8221;.<\/li>\n\n\n\n<li>Saat pengguna mengirim pesan via aplikasi Bluetooth (contoh: Serial Bluetooth Terminal), ESP32 akan:\n<ul class=\"wp-block-list\">\n<li>Membaca pesan tersebut.<\/li>\n\n\n\n<li>Menampilkannya di LCD pada baris kedua.<\/li>\n\n\n\n<li>Jika panjang pesan lebih dari 16 karakter, teks akan bergulir otomatis setiap 500 ms.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>Komponen yang Digunakan:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 \u00d7 ESP32<\/li>\n\n\n\n<li>1 x LED<\/li>\n\n\n\n<li>1 x LCD 16&#215;2 dengan modul I2C<\/li>\n\n\n\n<li>Kabel jumper<\/li>\n\n\n\n<li>1 x Breadboard<\/li>\n\n\n\n<li>1 x Kabel USB (untuk upload dan power)<\/li>\n<\/ul>\n\n\n\n<p><strong>Skema:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>LCD Pin<\/strong><\/td><td><strong>Fungsi<\/strong><\/td><td><strong>ESP32 Pin<\/strong><\/td><\/tr><\/thead><tbody><tr><td>VCC<\/td><td>Power<\/td><td>3.3V<\/td><\/tr><tr><td>GND<\/td><td>Ground<\/td><td>GND<\/td><\/tr><tr><td>SDA<\/td><td>Data<\/td><td>GPIO 21<\/td><\/tr><tr><td>SCL<\/td><td>Clock<\/td><td>GPIO 22<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Kode:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"BluetoothSerial.h\"       \/\/ Library untuk Bluetooth\n#include &lt;Wire.h>                 \/\/ Library untuk komunikasi I2C\n#include &lt;LiquidCrystal_I2C.h>    \/\/ Library untuk LCD I2C\n\nBluetoothSerial SerialBT;               \/\/ Objek untuk Bluetooth Serial\nLiquidCrystal_I2C lcd(0x27, 16, 2);     \/\/ Alamat I2C LCD (0x27 atau 0x3F)\n\nString incomingData = \"\";               \/\/ Variabel untuk menyimpan data Bluetooth\nint scrollIndex = 0;                    \/\/ Indeks untuk scrolling teks\nunsigned long previousMillis = 0;       \/\/ Waktu sebelumnya untuk scrolling\nconst long interval = 500;              \/\/ Interval waktu scrolling (500 ms)\n\nvoid setup() {\n  SerialBT.begin(\"NAMA_BLUETOOTH\");     \/\/ Inisialisasi Bluetooth dengan nama perangkat\n  Serial.begin(115200);                 \/\/ Inisialisasi Serial Monitor\n  lcd.init();                           \/\/ Inisialisasi LCD\n  lcd.backlight();                      \/\/ Nyalakan lampu latar LCD\n\n  lcd.setCursor(0, 0);\n  lcd.print(\"Bluetooth siap\");\n  lcd.setCursor(0, 1);\n  lcd.print(\"Tunggu...\");\n  Serial.println(\"Bluetooth siap, sambungkan ke 'NAMA_BLUETOOTH'\");\n}\n\nvoid loop() {\n  \/\/ Cek apakah ada data masuk dari Bluetooth\n  if (SerialBT.available()) { \n    incomingData = SerialBT.readStringUntil('\\n');  \/\/ Baca data hingga newline\n    incomingData.trim();                            \/\/ Hapus karakter whitespace\n    scrollIndex = 0;                                \/\/ Reset indeks scrolling\n    Serial.print(\"Data diterima: \");\n    Serial.println(incomingData);\n  }\n\n  \/\/ Scroll teks di LCD\n  unsigned long currentMillis = millis();\n  if (currentMillis - previousMillis >= interval) {\n    previousMillis = currentMillis;\n\n    lcd.clear();                                     \/\/ Hapus layar LCD\n    lcd.setCursor(0, 0);\n    lcd.print(\"Pesan:\");\n    lcd.setCursor(0, 1);\n\n    \/\/ Tampilkan bagian teks sesuai indeks scrolling\n    int textLength = incomingData.length();\n    if (textLength &lt;= 16) {\n      lcd.print(incomingData);               \/\/ Jika teks pendek, tampilkan langsung\n    } else {\n      String scrollingText = incomingData.substring(scrollIndex, scrollIndex + 16);\n      lcd.print(scrollingText);              \/\/ Tampilkan potongan teks\n      scrollIndex++;                         \/\/ Pindahkan indeks scrolling\n      if (scrollIndex > textLength - 16) {\n        scrollIndex = 0;                     \/\/ Ulangi dari awal teks\n      }\n    }\n  }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Proyek ini merupakan sistem tampilan pesan nirkabel menggunakan ESP32 dan LCD 16&#215;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: Cara Kerja: Komponen yang Digunakan:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[5,3],"tags":[],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-esp32","category-robotik"],"_links":{"self":[{"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=43"}],"version-history":[{"count":1,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":44,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=\/wp\/v2\/posts\/43\/revisions\/44"}],"wp:attachment":[{"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.webie.my.id\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}