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! ๐Ÿš€

Minggu, 17 Mei 2026

PEWARARAN WAJAH DAN KULIT

Jadwal Perawatan Wajah Pria - Glowing & Tampan

Jadwal Perawatan Wajah Pria

✨ 30 Hari Menuju Wajah Glowing, Bersih & Tampan Alami ✨

๐ŸŒ™☀️ Rutinitas Wajib Setiap Hari

๐ŸŒ… PAGI (setelah bangun)

  • ๐Ÿ’ง Cuci muka dengan air dingin + sabun wajah ringan
  • ๐Ÿงด Pelembab ringan (aloe vera / hyaluronic acid)
  • ☀️ SUNSCREEN SPF 30+ (WAJIB, bahkan di dalam ruangan)

๐ŸŒ™ MALAM (sebelum tidur)

  • ๐Ÿงผ Cuci muka dengan sabun wajah (pijat lembut 30 detik)
  • ๐Ÿ’ค Pelembab malam / minyak zaitun murni (sedikit)
  • ✨ Jangan lupa eksfoliasi & masker sesuai jadwal (lihat tabel)
⚡ Catatan pria keren: Jangan sentuh wajah dengan tangan kotor! Ganti sarung bantal 2x seminggu.

๐Ÿ“… Jadwal Perawatan Khusus

HariPerawatanCara / Durasi
Senin๐Ÿงฝ Eksfoliasi (Scrub)Gula halus + madu, pijat 2 menit, bilas air hangat
Selasa๐Ÿฅš Masker alamiPutih telur + 2 tetes jeruk nipis, diamkan 10 menit
Rabu๐Ÿ’† IstirahatCukup cuci muka + pelembab (kulit napas)
Kamis๐ŸงŠ Kompres es batuEs batu dibungkus kain, usap wajah 3 menit (kecilkan pori)
Jumat๐Ÿฅฃ Masker oatmealOatmeal + air hangat jadi pasta, diamkan 10 menit
Sabtu๐Ÿงฝ Eksfoliasi (lagi)Sama seperti senin: gula + madu / scrub lembut
Minggu๐Ÿ’†‍♂️ Pijat wajahMinyak kelapa / zaitun, pijat dari dagu ke telinga (5 menit)
๐Ÿ“Œ Tips ekstra: Lakukan eksfoliasi maksimal 2x seminggu, jangan berlebihan agar kulit tidak iritasi.

๐Ÿ›’ Produk & Bahan Rekomendasi

JenisProduk / Bahan (ekonomis)Harga estimasi
๐Ÿงผ Sabun wajahWardah Acne Care / Garnier Men / Nivea Men20-40rb
๐Ÿ’ง PelembabSimple Kind to Skin / Habbatus Sauda / Vaseline Aloe15-35rb
☀️ SunscreenAzarine / Skintific / Biore UV / Nivea Sun35-70rb
๐ŸŒฟ Minyak alamiMinyak zaitun dapur / minyak kelapa murni10-20rb (dapur)
๐Ÿฏ Bahan maskerMadu, oatmeal, putih telur, jeruk nipisHanya belanja dapur
๐ŸŒŸ Budget super hemat: Cukup sabun bayi + minyak zaitun + es batu + sunscreen murah, kulit sudah sehat!

๐Ÿšซ 4 Hal YANG HARUS DIHINDARI

  • ❌ Begadang & kurang tidur (rusak kolagen)
  • ❌ Jarang cuci muka (minimal 2x sehari)
  • ❌ Pegang wajah dengan tangan kotor
  • ❌ Makanan manis & junk food (picu jerawat)
๐Ÿ’ก Ingat program diet perut? Perut rata + wajah glowing = paket komplit tampan sehat!

⚡ 3 Rahasia Cepet Ganteng

  • ✨ 1. Raut alis – cabut bulu alis yang nyambung ke tengah, kesan tegas
  • ๐Ÿ˜ 2. Senyum percaya diri – magnet alami ketampanan
  • ๐Ÿ’ง 3. Minum air putih 3L/hari (dari program diet perut) – kulit kenyal glowing
๐Ÿง”๐Ÿป‍♂️ Hasil maksimal bila konsisten 30 hari!

๐Ÿ“Œ Contoh Paduan Jadwal Sehari (Diet Perut + Rawat Wajah)

๐ŸŒ… 06.00 bangun, minum air putih
๐Ÿงด 06.15 cuci muka + sunscreen
๐Ÿณ 06.30 sarapan (2 telur + roti gandum)
๐Ÿ‹️ 17.00 olahraga perut (plank, leg raise)
๐Ÿฅ— 19.00 makan malam (protein + sayur)
๐Ÿง– 21.00 masker / eksfoliasi (sesuai hari) + cuci muka
๐Ÿ˜ด 22.00 tidur cukup
๐ŸŒฑ “Perawatan wajah bukan untuk pamer, tapi bentuk respek pada diri sendiri.” — DeepSeek
✨ Update rutin, pakai bahan alami, konsisten, dan lihat perubahan dalam 2 minggu!

Sabtu, 16 Mei 2026

kunyit dan lada hitam dan Piperin di dalam lada hitam mampu meningkatkan penyerapan kurkumin (zat aktif kunyit) hingga 2000 kali lipat di dalam tubuh

Mind Map: Sinergi Kunyit & Lada Hitam

Kunyit & Lada Hitam

๐ŸŒฟ Sinergi emas: kurkumin + piperin ➜ bioavailabilitas meningkat hingga 2000%

Peta Konsep Sinergi

KUNYIT + LADA HITAM

Bioenhancer Alami

Manfaat Utama

  • Anti-peradangan kuat & pereda nyeri
  • Menjaga kesehatan jantung & pembuluh darah
  • Mengontrol gula darah & nafsu makan
  • Mendukung fungsi kognitif (neuroprotektif)
  • Antioksidan tinggi, menangkal radikal bebas
+2000% penyerapan kurkumin

Mekanisme Sinergi

  • Piperin (lada hitam) menghambat glukuronidasi di hati & usus
  • Mencegah pemecahan cepat kurkumin dalam tubuh
  • Meningkatkan konsentrasi plasma kurkumin hingga 20x lipat
  • Memperlama waktu tinggal kurkumin di sel target
Bukti studi: 20-2000% peningkatan bioavailabilitas

Cara Konsumsi & Dosis

  • Kuliner: 1 sdt kunyit + ¼ sdt lada hitam (Golden milk, kari)
  • Suplemen: 500–2000 mg kurkumin + piperin (5-20mg)
  • Tips: konsumsi bersama lemak sehat (santan/minyak) tingkatkan absorpsi
  • Waktu terbaik: saat makan untuk mengurangi iritasi lambung
Resep sederhana: rebusan kunyit + lada + madu

Efek Samping & Kontraindikasi

  • Dosis tinggi: mual, diare, sakit perut
  • Interaksi dengan obat pengencer darah (warfarin, aspirin)
  • Risiko cedera hati jarang, terutama suplemen berlebih
  • Hindari pada batu empedu tanpa konsultasi dokter
  • Ibu hamil/menyusui konsultasi dulu
Konsultasi dokter jika rutin minum obat
Infografis Sinergi
Kunyit dan lada hitam - ilustrasi herbal
Bubuk kunyit Lada hitam
Kunyit + Lada Hitam | Sinergi penyerapan maksimal
↑ 2000%

Peningkatan bioavailabilitas kurkumin oleh piperin


Penelitian: Shoba et al. (1998) & meta-analisis terbaru
Kurkumin saja: hampir tak terdeteksi | +Piperin: kadar tinggi terukur

Tips praktis:

✅ Tambahkan lada hitam pada masakan berkunyit
✅ Pilih suplemen dengan label "BioPerine®" atau piperin
✅ Jangan merebus terlalu lama agar kurkumin tidak rusak

Kamis, 07 Mei 2026

DISIPLIN PROFIT DENGAN LIMIT ORDER

Trader Disiplin: Stop Market Order Impulsif di XAUUSD
๐Ÿ”ฅ XAUUSD · EMAS · EDISI KHUSUS ๐Ÿ”ฅ

Hentikan Kebiasaan Market Order
& Kuasai Limit Order + Stop Loss

Anda sering tergoda & rugi besar karena impulsif? Ini panduan konkret membangun disiplin sejati trader emas.
๐Ÿง  Mengapa Market Order Menjerat?

Di XAUUSD, pergerakan cepat sering memicu FOMO (Fear Of Missing Out). Market order tanpa konfirmasi = memasuki zona bahaya karena:

  • Harga bisa slippage 20-50 pips dalam 1 detik
  • Tidak ada level entry yang direncanakan → stop loss terlalu longgar atau lupa dipasang
  • Emosi mengambil alih, profit dari limit order sebelumnya lenap dalam 1 kesalahan
๐Ÿ’€ Anda mengakui: "Limit order profit terus, tapi karena market order saya loss besar & meremehkan stoploss."
➡️ Itu berarti ANALISIS ANDA BAIK, hanya eksekusi yang rusak oleh impulsif.
๐ŸŽฏ Solusi Fundamental: 3 Pilar Disiplin
  • 1. Ubah mindset: Market order = izin kehilangan 50 pips tanpa alasan teknis.
  • 2. Limit order WAJIB + STOP LOSS KETAT: Entry hanya berdasarkan level yang sudah dianalisa.
  • 3. Meremehkan Stop Loss adalah bunuh diri trading: Tanpa SL, satu gerakan emas bisa hapus akun.
๐Ÿ“‰ RULE OF THUMB XAUUSD :
- Swing/day trade : SL 15-25 USD (150-250 pips) sesuai timeframe
- Scalping terencana : SL 8-12 USD, tetap pakai limit order
⚙️ Langkah 1: Ubah Konfigurasi Platform Trading

๐Ÿ“Œ MetaTrader 4/5

One Click TradingTools → Options → Trade → Uncheck "One click trading"
Konfirmasi orderAktifkan "Confirm market orders" & "Confirm limit orders"
Template defaultSetiap chart baru otomatis tampilkan garis support/resistance

๐Ÿ–ฅ️ TradingView + Broker

Order dialogPengaturan → Trading → "Require order confirmation" = ON
Hotkey market orderNonaktifkan shortcut langsung (disable buy/sell market hotkey)
๐ŸŽฏ Tips Pro: Gunakan pending order (limit/stop limit) dari level support resistance utama.
๐Ÿ“‹ Checklist Wajib Sebelum Entry
〰️ CETAK & TEMPEL DI DEPAN MONITOR 〰️
  • Apakah ini LIMIT ORDER (bukan market) ?
  • Apakah STOP LOSS sudah terpasang dengan rasio risk/reward minimal 1:1.5 ?
  • Apakah saya menunggu retest / konfirmasi, bukan karena harga sudah bergerak liar ?
  • Apakah lot size aman (risiko max 1-2% ekuitas) ?

❌ Jika SATU saja jawab "TIDAK" → Jangan klik order!

⏸️ Teknik "Pause 60 Detik" Anti FOMO

Saat tangan gatal klik MARKET ORDER karena harga XAUUSD melesat:

  1. Lepaskan tangan dari mouse / trackpad.
  2. Buka notepad atau tulis di fisik kertas: “Saya akan market order karena … (isi alasan)”
  3. Baca ulang kalimat itu → biasanya hanya rasa takut ketinggalan.
  4. Setelah 60 detik, jika masih yakin → gunakan LIMIT ORDER di level yang lebih baik (bukan kejar harga).
๐Ÿ’ก Latihan: Setiap kali gagal pause, transfer denda Rp50.000 ke rekening terpisah (bukan buat trading).
๐Ÿ“… Rencana Transisi Bertahap (Demo → Real)

Minggu 1-2

๐Ÿ”น Akun DEMO
100% Limit order
Larang market order
Pasang SL wajib

Minggu 3-4

๐Ÿ”น Real (lot 0.01)
Limit + SL kaku
Jika tergoda market order stop trading 1 hari

Minggu 5-8

๐Ÿ”น Market order hanya diijinkan jika sinyal sangat kuat & pasang SL SEBELUM entry

Kebiasaan permanen

๐Ÿ† Stoploss = sahabat
Tanpa SL = tidak trade

๐ŸŽฏ Challenge 21 hari (bisa dicetak): Setiap hari tanpa market order impulsif, beri tanda ✔️. Jika dalam 3 hari berturut-turut melanggar, ulangi dari awal di demo.

Hari 1 ✔️ Hari 2 ✔️ Hari 3 ...
๐Ÿ›‘ Stop Loss: Tameng Terakhir Anda

Meremehkan stop loss = memberi diri sendiri izin bangkrut. Di XAUUSD, lonjakan 50-100 pips bisa terjadi dalam 1 menit karena berita atau likuidasi. Solusi:

  • Selalu pasang SL otomatis bersamaan dengan entry limit (jangan manual setelah entry).
  • Gunakan rasio risk 1:2 → contoh: target profit 40 USD, SL maksimal 20 USD.
  • Jangan memindahkan SL lebih lebar karena emosi (averaging / hope trading).
✍️ Jurnal Trading Psikologi

Buat catatan setiap kali Anda hampir melakukan market order atau gagal disiplin. Contoh format:

Tanggal: ___
Simbol: XAUUSD
Keinginan market order karena: (harga breakout / grafik cepat)
Tindakan yang diambil: (pause / tetap masuk market)
Hasil akhir: (loss / profit / skip)
Pelajaran: _________________________________
๐Ÿ† Mindset Ultimate: Limit order = Profit, Market order = Kerugian Terencana

Ingat: Anda sudah tahu cara profit (limit order) dan penyebab loss besar (market order tanpa stop loss). Sekarang hanya butuh konsistensi. Trader profesional di XAUUSD menggunakan pending order & stop loss di setiap posisi. Emas bukan saham, volatilitasnya ganas — tapi dengan disiplin, Anda bisa memanfaatkannya.

๐Ÿ“Œ Mulai dari langkah termudah: besok pagi, matikan one click trading. Lalu dalam 1 minggu hanya gunakan limit order di demo. Anda akan lihat perbedaan hasilnya secara drastis.

— Untuk konsistensi tanpa FOMO, bukan untuk menjadi sempurna dalam sehari.
Materi khusus untuk trader XAUUSD yang ingin berhenti dari jebakan market order impulsif. Latih minimal 2 minggu di akun demo sebelum eksekusi real. Selamat membangun disiplin!

perbedaan obsesif dan disipline di dalam trading

Disiplin vs Obsesi | Materi Motivasi Sehat

⚖️ Disiplin vs Obsesi

Dua Wajah Motivasi: Mana yang Menuntunmu ke versi terbaik?

๐Ÿ“˜ Materi Singkat : Motivasi disiplin dan obsesi seringkali tertukar. Disiplin adalah fondasi sehat yang bertahan lama, sementara obsesi berpotensi menjadi bumerang meski terasa "kuat" di awal. Memahami keduanya membuat kita bisa memilih cara mencapai tujuan tanpa mengorbankan keseimbangan hidup.

๐Ÿง˜‍♂️ Disiplin Sehat

๐Ÿ’ก Konsisten & Fleksibel

Motivasi yang tumbuh dari komitmen dan kebiasaan sadar. Disiplin tidak bergantung pada mood sesaat, tetapi pada sistem dan tanggung jawab.

  • Bertahan meski tidak bersemangat — karena tahu "mengapa".
  • Memberi ruang istirahat & fleksibilitas (tidak kaku).
  • Memprioritaskan kesehatan mental dan fisik.
  • Berdasarkan nilai dan tujuan jangka panjang.
๐Ÿ“Œ Contoh disiplin: “Saya tetap belajar 2 jam setiap malam, namun jika sedang sangat lelah, saya cukup 45 menit dan istirahat. Saya konsisten tanpa menyiksa diri.”

๐Ÿ”ฅ๐ŸŒ€ Obsesi Tidak Sehat

⚠️ Berlebihan & Kompulsif

Dorongan tak terkendali yang mengarah pada perfeksionisme patologis. Obsesi kerap disalahartikan sebagai 'gairah tinggi', padahal bisa merusak.

  • Tidak bisa berhenti memikirkan satu tujuan hingga mengabaikan aspek lain.
  • Merasa cemas atau panik jika tidak mencapai target harian.
  • Mengorbankan tidur, hubungan sosial, dan kesehatan.
  • Seringkali didorong oleh rasa takut gagal atau pengakuan eksternal.
๐Ÿ“Œ Contoh obsesi: “Saya tidak bisa tidur sebelum belajar 10 jam, saya berhenti makan siang, menjauhi teman, dan jika nilai turun sedikit saya merasa hancur.”
Aspek Perbandingan✅ Disiplin (Sehat)⚠️ Obsesi (Patologis)
Landasan PsikologisKomitmen, nilai diri, kebiasaan sadarKecemasan, perfeksionisme kompulsif
FleksibilitasTinggi (bisa menyesuaikan jadwal tanpa rasa bersalah)Sangat kaku (melenceng sedikit → stres berat)
Dampak KesehatanMenjaga kesehatan, ada keseimbangan kerja-istirahatBurnout, gangguan tidur, risiko OCD / anxiety
Energi EmosionalStabil, tangguh, tetap termotivasi dari dalamNaik-turun ekstrem, tergantung pencapaian
Hasil Jangka PanjangBerkelanjutan, peningkatan bertahap, kepuasan diriSering berujung kehilangan minat atau gangguan mental

⭐ Wawasan Kunci: Dari Dorongan Awal Menuju Disiplin Sehat

Obsesi BISA menjadi pemicu awal semangat luar biasa, misalnya ketika seseorang sangat ingin berubah. Namun tanpa pengelolaan, obsesi mudah berubah menjadi bumerang. Sebaliknya, disiplin tidak harus terasa heroik setiap hari, justru kekuatannya pada keberlanjutan.

๐Ÿ’Ž Bagaimana mengubah obsesi menjadi disiplin sehat?
→ 1. Tetapkan batasan waktu dan prioritas hidup (keluarga, istirahat, sosial).
→ 2. Ubah pola pikir “semua atau tidak sama sekali” menjadi “kemajuan kecil konsisten”.
→ 3. Identifikasi apakah dorongan Anda disertai rasa takut atau justru cinta pada proses.
→ 4. Terima bahwa istirahat dan relaksasi adalah bagian dari produktivitas jangka panjang.

✨ “Disiplin adalah jembatan antara tujuan dan pencapaian, sementara obsesi yang tak terkendali hanya membakar jembatan itu terlalu cepat.”

๐Ÿง  Refleksi Diri: Disiplin Atau Obsesi?

Cek kecenderungan Anda dengan dua pertanyaan sederhana:

  • Apakah saya tetap bisa menikmati hari libur tanpa rasa bersalah berlebihan? (Disiplin: ya ✅ | Obsesi: tidak ❌)
  • Ketika gagal mencapai target harian, apakah saya tetap bisa menerima diri dan berusaha lagi besok? (Disiplin: ya ✅ | Obsesi: krisis identitas ❌)

๐ŸŽฏ Kesimpulan materi: Motivasi berbasis disiplin memberi kebebasan dan ketahanan mental. Obsesi yang tidak dikelola justru mencuri kebahagiaan. Maka, latih disiplin dengan welas asih pada diri sendiri — itu kunci sukses sejati.