Minggu, 12 Juli 2026

Membuat ogo ogo Sembayat Barat RT 3

Ogoh-Ogoh Sembayat Barat RT 3 - ESP8266 Remote Control

๐Ÿ‘️ OGOH-OGOH REMOTE CONTROL

SEMBAYAT BARAT RT 3
ESP8266 • WiFi Control • 2 Servo • Relay Blink • Record & Playback
๐Ÿ“… Juli 2024 | ๐Ÿ•’ Update Terakhir: 13 Juli 2024

๐Ÿ“– 1. PENDAHULUAN

Proyek ini dibuat untuk mengontrol mata Ogoh-Ogoh Sembayat Barat RT 3 secara wireless menggunakan smartphone. Sistem menggunakan ESP8266 sebagai otak, 2 servo MG996R untuk gerakan mata (kiri-kanan & atas-bawah), dan relay untuk efek kedip mata natural.

๐Ÿ†• Fitur Unggulan: Playback tetap berjalan meskipun layar HP mati! Data rekaman disimpan dan dijalankan langsung di ESP8266.

Spesifikasi:

  • Microcontroller: ESP8266 NodeMCU
  • Komunikasi: WiFi 2.4GHz (Access Point / Hotspot)
  • Servo: 2x MG996R (Metal Gear, High Torque)
  • Range Gerak: Customizable (default ±45° horizontal, ±40° vertikal)
  • Blink System: Relay dengan timing natural (tutup 80ms, buka 300ms)
  • Record & Playback: Disimpan di ESP8266 (maks 500 frame)
  • Loop Mode: Pengulangan otomatis
  • Power: 6V/5A eksternal untuk servo

๐Ÿ›’ 2. DAFTAR KOMPONEN

NoKomponenJumlahEstimasi HargaKeterangan
1ESP8266 NodeMCU1Rp 25.000Board utama
2Servo MG996R2Rp 60.000Metal gear, high torque
3Relay 1 Channel 5V1Rp 12.000Untuk kedip mata
4Power Supply 6V/5A1Rp 45.000Eksternal untuk servo
5Powerbank 5V1Rp 50.000Untuk ESP8266
6Kabel Jumper10Rp 10.000Male to Female
7Kapasitor 1000ยตF/16V1Rp 3.000Anti noise servo
TOTAL ESTIMASIRp 205.000
⚠️ PENTING: Servo MG996R TIDAK BOLEH langsung ke 5V ESP8266! Arus peak 2.5A bisa merusak board. Gunakan power supply eksternal 6V/5A!

๐Ÿ”Œ 3. WIRING DIAGRAM

3.1 Skema Lengkap

╔═══════════════════════════════════════════════════╗ ║ WIRING OGOH-OGOH ║ ╠═══════════════════════════════════════════════════╣ ║ ║ ║ POWER 6V/5A (EKSTERNAL) ║ ║ ┌──────────────────┐ ║ ║ │ (+) 6V ──┬── SERVO 1 MERAH ║ ║ │ └── SERVO 2 MERAH ║ ║ │ (-) GND ──┬── SERVO 1 COKLAT ║ ║ │ ├── SERVO 2 COKLAT ║ ║ │ └── ESP8266 GND ║ ║ └──────────────────┘ ║ ║ ║ ║ POWERBANK 5V (USB) ║ ║ └── ESP8266 USB ║ ║ ║ ║ ESP8266 ║ ║ ┌──────────────────┐ ║ ║ │ D5 (GPIO14) ──── SERVO 1 ORANYE ║ ║ │ D6 (GPIO12) ──── SERVO 2 ORANYE ║ ║ │ D7 (GPIO13) ──── RELAY IN ║ ║ │ GND ──────────── RELAY GND ║ ║ │ VIN ──────────── RELAY VCC (5V) ║ ║ └──────────────────┘ ║ ║ ║ ║ RELAY ║ ║ ┌──────────────────┐ ║ ║ │ COM ─── LAMPU/LED (+) ║ ║ │ NO ─── POWER LAMPU (+) ║ ║ └──────────────────┘ ║ ║ ║ ╚═══════════════════════════════════════════════════╝

3.2 Tabel Pin

KomponenKabelESP8266
Servo 1 (Kiri-Kanan)Coklat, Merah, OranyeGND, 6V Ext, D5
Servo 2 (Atas-Bawah)Coklat, Merah, OranyeGND, 6V Ext, D6
Relay (Kedip)GND, VCC, INGND, VIN(5V), D7

⚡ 4. SKEMA TEGANGAN

4.1 Perhitungan Power

KomponenTeganganArusDaya
ESP82665V~80mA0.4W
Servo MG996R (2x)6V~2.5A peak15W
Relay5V~75mA0.4W
TOTAL~16W
✅ REKOMENDASI: Power supply 6V/5A (30W) memberikan headroom yang aman.

4.2 Opsi Power Supply

OpsiKomponenCocok Untuk
1Adaptor 6V/5AIndoor / Permanen
2Baterai Lipo 2S 7.4V + UBEC 6VOutdoor / Portable
3Powerbank 5V + Boost Converter 6VDarurat

๐Ÿ’ป 5. KODE PROGRAM ESP8266

๐Ÿ“ Catatan: Kode di bawah adalah versi final dengan semua fitur: Record, Playback di ESP8266, Loop, Blink Natural, dan Konfigurasi Derajat.

5.1 Kode Arduino (ESP8266)

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Servo.h>

const char* ssid = "shereen";
const char* password = "87654321";
ESP8266WebServer server(80);

Servo servo1;
Servo servo2;

const int servoPin1 = 14;  // D5 - Mata Kiri-Kanan
const int servoPin2 = 12;  // D6 - Mata Atas-Bawah
const int relayPin  = 13;  // D7 - Relay Kedip

int angle1Max = 45;  // Max derajat horizontal
int angle2Max = 40;  // Max derajat vertikal

// Record & Playback
#define MAX_FRAMES 500
int record1[MAX_FRAMES];
int record2[MAX_FRAMES];
int recordCount = 0;
bool isPlayingESP = false;
int playIndexESP = 0;
unsigned long lastPlayTime = 0;
int playSpeed = 50;
bool loopModeESP = false;

// Blink
bool blinkMode = false;
unsigned long lastBlink = 0;
int blinkPhase = 0;

void setup() {
    Serial.begin(115200);
    servo1.attach(servoPin1);
    servo2.attach(servoPin2);
    pinMode(relayPin, OUTPUT);
    digitalWrite(relayPin, LOW);
    servo1.write(90);
    servo2.write(90);
    
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) delay(500);
    Serial.println(WiFi.localIP());
    
    // Web server code (HTML/CSS/JS di sini)
    // ... (lengkap di kode full)
    
    server.begin();
}

void loop() {
    server.handleClient();
    
    // Playback di ESP8266 (tetap jalan meski HP mati)
    if (isPlayingESP && recordCount > 0) {
        if (millis() - lastPlayTime >= playSpeed) {
            lastPlayTime = millis();
            servo1.write(constrain(record1[playIndexESP], 90-angle1Max, 90+angle1Max));
            servo2.write(constrain(record2[playIndexESP], 90-angle2Max, 90+angle2Max));
            playIndexESP++;
            if (playIndexESP >= recordCount) {
                if (loopModeESP) playIndexESP = 0;
                else { isPlayingESP = false; playIndexESP = 0; }
            }
        }
    }
    
    // Blink natural (tutup 80ms, buka 300ms)
    if (blinkPhase == 1) { digitalWrite(relayPin, HIGH); if (millis()-lastBlink>80) { blinkPhase=2; lastBlink=millis(); } }
    if (blinkPhase == 2) { digitalWrite(relayPin, LOW); if (millis()-lastBlink>300) { blinkPhase=0; lastBlink=millis(); } }
    
    delay(2);
}
๐Ÿ’ก Download kode lengkap: GitHub Gist - ogoh-ogoh-esp8266.ino (coming soon)

๐ŸŽฎ 6. FITUR LENGKAP

FiturDeskripsiRange
๐ŸŽฏ Joystick HorizontalMata kiri-kananCustom (±45° default)
๐ŸŽฏ Joystick VertikalMata atas-bawahCustom (±40° default)
⚙️ Konfigurasi DerajatInput max derajat custom5° - 90°
๐Ÿ”ด RecordRekam gerakanMaks 500 frame
▶ PlayPutar rekaman (di ESP8266)Tetap jalan saat HP mati
๐Ÿ” LoopUlangi playback terusON/OFF
๐Ÿ˜‰ Blink NaturalKedip mata realistikTutup 80ms, Buka 300ms
๐Ÿ”„ Auto BlinkKedip otomatisInterval 1-10 detik
๐Ÿ‘️ Single BlinkKedip sekaliManual
๐Ÿ“ฑ Responsive UITampilan mobile-friendlyDark theme + glow effect

๐Ÿ“ฑ 7. CARA PENGGUNAAN

7.1 Setup Awal

  1. Upload kode ke ESP8266 menggunakan Arduino IDE / Arduino CLI
  2. Pasang wiring sesuai diagram
  3. Nyalakan hotspot HP dengan SSID shereen password 87654321
  4. Nyalakan ESP8266 (colok powerbank)
  5. Buka Serial Monitor (115200 baud) untuk melihat IP Address
  6. Buka IP tersebut di browser HP

7.2 Record & Playback

  1. Tekan ๐Ÿ”ด REC → Gerakin joystick → Tekan ๐Ÿ”ด REC lagi
  2. Tekan ▶ PLAY → Gerakan diulang otomatis
  3. Aktifkan ๐Ÿ” Loop untuk pengulangan terus menerus
  4. Layar HP boleh dimatikan → Playback tetap jalan!

7.3 Konfigurasi Derajat

  1. Input max derajat di kolom Max
  2. Klik ๐Ÿ’พ untuk menyimpan
  3. Range otomatis simetris (kiri & kanan sama)

๐Ÿ”ง 8. TROUBLESHOOTING

8.1 Servo Tidak Bergerak

PenyebabSolusi
Power tidak cukupGunakan power supply 6V/5A eksternal. Jangan langsung ke 5V ESP8266!
Kabel longgarCek semua koneksi: Coklat=GND, Merah=6V, Oranye=Signal
Pin salahPastikan D5 (GPIO14) untuk servo 1, D6 (GPIO12) untuk servo 2
Servo rusakCoba servo satu per satu dengan kode test sederhana
GND tidak tersambungGND power servo WAJIB tersambung ke GND ESP8266!

8.2 Tidak Bisa Konek WiFi

PenyebabSolusi
SSID/Password salahCek ulang: SSID="shereen", Pass="87654321"
Hotspot belum nyalaNyalakan hotspot HP dulu, baru ESP8266
Jarak terlalu jauhDekatkan ESP8266 ke HP (max 5 meter)
WiFi 5GHzESP8266 hanya support 2.4GHz!

8.3 Playback Berhenti Saat Layar Mati

PenyebabSolusi
Browser menghentikan JavaScript✅ SUDAH DIATASI! Playback berjalan di ESP8266, bukan di HP
Data tidak terkirimPastikan klik PLAY setelah REC, data akan disimpan di ESP8266

8.4 Kedip Mata Tidak Natural

PenyebabSolusi
Timing tidak pasDefault: Tutup 80ms, Buka 300ms (rasio 1:3.75 seperti manusia)
Relay tidak meresponCek kabel relay: GND→GND, VCC→VIN, IN→D7
Lampu/LED tidak sesuaiGunakan lampu 12V dengan relay COM-NO

8.5 Arduino IDE Error Upload

ErrorSolusi
ledcSetup not declaredGunakan ledcAttach(pin, freq, res) untuk ESP8266
esptool not foundInstall esptool: pip3 install esptool==4.5.1
port busyTutup Serial Monitor & Arduino IDE, lalu upload ulang
Board unknownInstall board: arduino-cli core install esp8266:esp8266

❓ 9. FAQ

Q: Bisa pakai ESP32?
A: Bisa! Ganti pin dan library. ESP32 lebih powerful tapi lebih mahal.

Q: Berapa jarak maksimal WiFi?
A: ±30 meter (terbuka), ±10 meter (dalam ruangan).

Q: Bisa kontrol lewat internet?
A: Bisa dengan port forwarding atau Ngrok, tapi tidak direkomendasikan untuk latency.

Q: Servo cepat panas?
A: Beri jeda setiap 10 menit. Tambah heatsink kecil. Jangan paksa gerak mentok.

Q: Bisa ganti nama WiFi?
A: Edit ssid dan password di kode, lalu upload ulang.

Q: Bisa tambah servo ketiga?
A: Bisa! Tambah servo di pin kosong (D0, D1, D2, dll) dan duplikat logika kontrol.

๐Ÿ’ก 10. TIPS & TRIK

๐Ÿ”– Bookmark IP

Simpan IP ESP8266 di bookmark HP untuk akses cepat tanpa cek Serial Monitor.

๐Ÿ”‹ Power Management

Gunakan powerbank 20000mAh untuk pemakaian seharian outdoor. Baterai Lipo 2S lebih ringan.

๐Ÿ“ฆ Housing

Masukkan ESP8266 ke kotak plastik waterproof. Bungkus servo dengan plastik untuk outdoor.

๐ŸŽจ Kustomisasi CSS

Edit bagian <style> di kode HTML untuk ganti warna, font, atau layout.

๐Ÿ”„ Auto Connect

ESP8266 akan auto-connect ke WiFi yang sudah disimpan saat dinyalakan.

๐Ÿ“Š Monitoring

Buka Serial Monitor (115200 baud) untuk debug real-time dan lihat IP address.

Minggu, 05 Juli 2026

cara buat chat offline dengan ESP 8266

๐Ÿ’ฌ Membuat Chat WhatsApp-like dengan 2 ESP8266

Tutorial Lengkap: Chat Offline via WiFi Menggunakan NodeMCU ESP8266 + Arduino CLI

๐ŸŽฏ Hasil Akhir: Dua smartphone terhubung ke ESP8266 berbeda, bisa chatting real-time seperti WhatsApp tanpa koneksi internet!

๐Ÿ›  1. Alat dan Bahan

No Komponen Jumlah Fungsi
1 NodeMCU ESP8266 2 buah ESP A (Server) & ESP B (Client)
2 Kabel USB Micro 2 buah Upload kode dan power
3 Powerbank/Charger HP 2 buah Sumber daya setelah upload
4 Smartphone 2 buah Untuk chatting via browser
5 WiFi Router/AP 1 buah Jaringan lokal (SSID: shereen)
⚠️ Catatan Penting: Tidak membutuhkan komponen tambahan apapun! Hanya colok USB, upload kode, dan langsung bisa dipakai.

๐Ÿง  2. Konsep Kerja Sistem

┌─────────────────┐           WiFi            ┌─────────────────┐
│    ESP A        │◄─────────────────────────►│    ESP B        │
│  (Server)       │                            │  (Client)       │
│  192.168.2.235  │                            │  192.168.2.246  │
└────────┬────────┘                            └────────┬────────┘
         │ Web Server                                   │ Web Server
         │                                              │
    ┌────▼────┐                                    ┌────▼────┐
    │  HP 1   │                                    │  HP 2   │
    │ Browser │                                    │ Browser │
    └─────────┘                                    └─────────┘

Alur Kerja:

  1. Kedua ESP8266 terhubung ke WiFi yang sama (SSID: shereen)
  2. Masing-masing ESP menjalankan WebServer di port 80
  3. Smartphone membuka alamat IP ESP via browser (Chrome/Safari)
  4. Saat HP 1 mengirim pesan → ESP A menyimpan dan mengirim ke ESP B via HTTP Request
  5. ESP B fetch data dari ESP A setiap 1 detik untuk mendapatkan pesan terbaru
  6. HP 2 melihat pesan yang di-fetch oleh ESP B
  7. Begitu juga sebaliknya, chat dua arah real-time!

๐Ÿ“ฑ 3. Kode ESP A (Server Utama)

File: esp_a.ino (simpan di folder esp_a/)

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);
String chat = "";

void handleRoot() {
  String h = "<!DOCTYPE html><html><head>";
  h += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  h += "<style>";
  h += "body{font-family:Arial;margin:10px;background:#e5ddd5;}";
  h += ".chat-box{background:white;padding:15px;height:400px;overflow-y:scroll;border-radius:10px;}";
  h += ".msg{margin:5px 0;padding:10px;border-radius:8px;max-width:80%;clear:both;}";
  h += ".sent{background:#dcf8c6;float:right;}";
  h += ".received{background:white;float:left;border:1px solid #ddd;}";
  h += "input{width:70%;padding:12px;border:none;border-radius:20px;}";
  h += "button{padding:12px 20px;background:#128c7e;color:white;border:none;border-radius:20px;}";
  h += "</style></head><body>";
  h += "<h2>๐Ÿ“ฑ ESP A (Aku)</h2>";
  h += "<div class='chat-box' id='c'>" + chat + "</div>";
  h += "<input id='m' placeholder='Ketik pesan...'>";
  h += "<button onclick='s()'>Kirim</button>";
  h += "<script>";
  h += "function s(){";
  h += "  var m=document.getElementById('m').value;";
  h += "  if(m=='')return;";
  h += "  fetch('/send?msg='+encodeURIComponent(m));";
  h += "  document.getElementById('m').value='';";
  h += "  setTimeout(l,300);";
  h += "}";
  h += "function l(){";
  h += "  fetch('/get').then(r=>r.text()).then(d=>{";
  h += "    document.getElementById('c').innerHTML=d;";
  h += "  });";
  h += "}";
  h += "setInterval(l,1000);";
  h += "</script></body></html>";
  server.send(200, "text/html", h);
}

void handleSend() {
  String m = server.arg("msg");
  m.replace("+", " ");
  chat += "<div class='msg sent'>" + m + "</div>";
  server.send(200, "text/plain", "OK");
}

void handleGet() {
  server.send(200, "text/plain", chat);
}

void handleReceive() {
  String m = server.arg("msg");
  m.replace("+", " ");
  chat += "<div class='msg received'>" + m + "</div>";
  server.send(200, "text/plain", "OK");
}

void setup() {
  WiFi.begin("shereen", "87654321");
  while(WiFi.status() != WL_CONNECTED) delay(500);
  
  server.on("/", handleRoot);
  server.on("/send", handleSend);
  server.on("/get", handleGet);
  server.on("/receive", handleReceive);
  server.begin();
  
  Serial.begin(115200);
  Serial.println();
  Serial.print("ESP A IP: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  server.handleClient();
  delay(1);
}
✅ Fungsi ESP A:
  • Web Server utama penyimpan chat
  • Menerima pesan dari HP 1 dan ESP B
  • Menyediakan endpoint /get untuk di-fetch ESP B
  • Tampilan UI WhatsApp-like

๐Ÿ“ฑ 4. Kode ESP B (Client dengan Fetch)

File: esp_b.ino (simpan di folder esp_b/)

⚠️ PENTING: Ganti String ipA = "192.168.2.235"; dengan IP ESP A kamu!

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>

ESP8266WebServer server(80);
String chat = "";
String ipA = "192.168.2.235"; // ⚠️ GANTI DENGAN IP ESP A!
String lastFetch = "";

void handleRoot() {
  String h = "<!DOCTYPE html><html><head>";
  h += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  h += "<style>";
  h += "body{font-family:Arial;margin:10px;background:#e5ddd5;}";
  h += ".chat-box{background:white;padding:15px;height:400px;overflow-y:scroll;border-radius:10px;}";
  h += ".msg{margin:5px 0;padding:10px;border-radius:8px;max-width:80%;clear:both;}";
  h += ".sent{background:#dcf8c6;float:right;}";
  h += ".received{background:white;float:left;border:1px solid #ddd;}";
  h += "input{width:70%;padding:12px;border:none;border-radius:20px;}";
  h += "button{padding:12px 20px;background:#128c7e;color:white;border:none;border-radius:20px;}";
  h += "</style></head><body>";
  h += "<h2>๐Ÿ“ฑ ESP B (Aku)</h2>";
  h += "<div class='chat-box' id='c'>" + chat + "</div>";
  h += "<input id='m' placeholder='Ketik pesan...'>";
  h += "<button onclick='s()'>Kirim</button>";
  h += "<script>";
  h += "function s(){";
  h += "  var m=document.getElementById('m').value;";
  h += "  if(m=='')return;";
  h += "  fetch('/send?msg='+encodeURIComponent(m));";
  h += "  document.getElementById('m').value='';";
  h += "  setTimeout(l,300);";
  h += "}";
  h += "function l(){";
  h += "  fetch('/get').then(r=>r.text()).then(d=>{";
  h += "    document.getElementById('c').innerHTML=d;";
  h += "  });";
  h += "}";
  h += "setInterval(l,1000);";
  h += "</script></body></html>";
  server.send(200, "text/html", h);
}

void handleSend() {
  String m = server.arg("msg");
  m.replace("+", " ");
  chat += "<div class='msg sent'>" + m + "</div>";
  
  // Kirim pesan ke ESP A
  WiFiClient c;
  HTTPClient http;
  http.begin(c, "http://" + ipA + "/receive?msg=" + m);
  http.GET();
  http.end();
  
  server.send(200, "text/plain", "OK");
}

void handleGet() {
  // AMBIL DATA DARI ESP A (FETCH)
  WiFiClient c;
  HTTPClient http;
  http.begin(c, "http://" + ipA + "/get");
  int code = http.GET();
  if(code == 200) {
    String newChat = http.getString();
    if(newChat != lastFetch) {
      chat = newChat;
      lastFetch = newChat;
    }
  }
  http.end();
  server.send(200, "text/plain", chat);
}

void handleReceive() {
  String m = server.arg("msg");
  m.replace("+", " ");
  chat += "<div class='msg received'>" + m + "</div>";
  server.send(200, "text/plain", "OK");
}

void setup() {
  WiFi.begin("shereen", "87654321");
  while(WiFi.status() != WL_CONNECTED) delay(500);
  
  server.on("/", handleRoot);
  server.on("/send", handleSend);
  server.on("/get", handleGet);
  server.on("/receive", handleReceive);
  server.begin();
  
  Serial.begin(115200);
  Serial.println();
  Serial.print("ESP B IP: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  server.handleClient();
  delay(1);
}
✅ Fungsi ESP B:
  • Web Server untuk HP 2
  • Mengirim pesan ke ESP A via /receive
  • Fetch chat dari ESP A setiap kali HP 2 membuka halaman /get
  • Tidak menyimpan chat permanen (mengandalkan ESP A sebagai server utama)
๐Ÿ”‘ Kunci Keberhasilan: ESP B tidak menerima pesan langsung dari ESP A. Sebagai gantinya, ESP B mengambil (fetch) seluruh history chat dari ESP A setiap 1 detik melalui endpoint /get. Ini solusi untuk ESP yang sering restart!

๐Ÿ’ป 5. Cara Upload dengan Arduino CLI

5.1 Install Arduino CLI

curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh

5.2 Install Board ESP8266

arduino-cli core update-index
arduino-cli core install esp8266:esp8266

5.3 Buat Folder dan Simpan Kode

# Buat folder (NAMA FOLDER HARUS SAMA DENGAN NAMA FILE!)
mkdir -p ~/esp_a
mkdir -p ~/esp_b

# Simpan kode ESP A ke ~/esp_a/esp_a.ino
# Simpan kode ESP B ke ~/esp_b/esp_b.ino
⚠️ PENTING! Arduino CLI mengharuskan nama folder = nama file!
✅ BENAR: ~/esp_a/esp_a.ino
❌ SALAH: ~/chat/esp_a.ino

5.4 Upload ESP A

cd ~/esp_a
arduino-cli compile --fqbn esp8266:esp8266:nodemcuv2 esp_a.ino
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp8266:esp8266:nodemcuv2 esp_a.ino
arduino-cli monitor -p /dev/ttyUSB0 -c baudrate=115200

๐Ÿ“ Catat IP ESP A! (misal: 192.168.2.235), lalu tekan Ctrl+C

5.5 Upload ESP B

cd ~/esp_b

# ⚠️ EDIT esp_b.ino dulu! Ganti ipA dengan IP ESP A
nano esp_b.ino

arduino-cli compile --fqbn esp8266:esp8266:nodemcuv2 esp_b.ino
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp8266:esp8266:nodemcuv2 esp_b.ino
arduino-cli monitor -p /dev/ttyUSB0 -c baudrate=115200

๐Ÿ“ Catat IP ESP B! (misal: 192.168.2.246), lalu tekan Ctrl+C

๐Ÿ“ฑ 6. Cara Menggunakan

๐ŸŽ‰ Langkah Mudah:
  1. Colok ESP A ke powerbank/charger HP
  2. Colok ESP B ke powerbank/charger HP
  3. HP 1: Buka Chrome/Safari, ketik http://192.168.2.235
  4. HP 2: Buka Chrome/Safari, ketik http://192.168.2.246
  5. Mulai chat! Ketik pesan, tekan Kirim ๐ŸŽŠ

Tampilan Interface:

┌──────────────────────────────────┐
│       ๐Ÿ“ฑ ESP A (Aku)             │
├──────────────────────────────────┤
│ ┌──────────────────────────────┐ │
│ │ Halo!              │         │ │
│ │              │ Hai juga!     │ │
│ │ Gimana kabar?     │         │ │
│ │              │ Baik, kamu?   │ │
│ └──────────────────────────────┘ │
│ ┌──────────────────────┐ ┌─────┐ │
│ │ Ketik pesan...       │ │Kirim│ │
│ └──────────────────────┘ └─────┘ │
└──────────────────────────────────┘

๐Ÿ”ง 7. Tips dan Troubleshooting

❌ "Serial port busy"

sudo fuser -k /dev/ttyUSB0

❌ "main file missing from sketch"

Pastikan nama folder = nama file .ino! Contoh: esp_a/esp_a.ino

❌ ESP restart terus (IP muncul berkali-kali)

Solusi:

  • Gunakan powerbank/charger HP, jangan USB laptop
  • Ganti kabel USB yang lebih bagus
  • Tambahkan kapasitor 100ยตF antara Vin dan GND (opsional)

❌ ESP B tidak menerima pesan dari ESP A

Solusi: ESP B sudah didesain untuk fetch langsung dari ESP A! Cukup refresh halaman atau tunggu 1 detik, pesan akan muncul.

❌ Tampilan rusak/tanda tanya di HP

  • Refresh browser (F5 atau pull down di HP)
  • Clear cache browser
  • Pastikan WiFi HP terhubung ke jaringan yang sama

๐Ÿ’ก Tips Tambahan:

  • Beri label "A" dan "B" pada ESP agar tidak tertukar
  • Gunakan kabel USB berkualitas untuk performa stabil
  • Simpan kode di cloud (GitHub/GDrive) sebagai backup
  • IP ESP bisa berubah jika router restart, cek ulang via Serial Monitor

๐ŸŽŠ Penutup

Selamat! Kamu telah berhasil membuat sistem chat offline menggunakan 2 ESP8266. Sistem ini bisa dikembangkan lebih lanjut:

  • ✅ Enkripsi pesan dengan AES
  • ✅ Simpan history ke SPIFFS (flash memory ESP)
  • ✅ Notifikasi suara saat pesan masuk
  • ✅ Kirim emoji & gambar
  • ✅ Grup chat dengan 3+ ESP8266
  • ✅ Integrasi Telegram Bot
๐Ÿ”ง Spesifikasi Sistem:
WiFi SSID: shereen | Password: 87654321
ESP A IP: 192.168.2.235 | ESP B IP: 192.168.2.246
Protokol: HTTP | Library: ESP8266WiFi, ESP8266WebServer
๐Ÿ“… Tutorial by: Arif
Project: Chat WhatsApp-like ESP8266
© 2026 - Happy Making! ๐Ÿš€