Sabtu, 11 April 2026

PESAN DARI CLOUD Papan Pesan Digital IoT dengan NodeMCU ESP8266 & OLED

Membaca Pesan dari Database ke OLED dengan ESP8266

🖥️ Menampilkan Pesan dari Database MySQL ke Layar OLED (ESP8266)

Tanggal: April 2026  |  Oleh: Penulis Blog

Beberapa waktu lalu saya ingin membuat papan informasi kecil yang bisa saya update dari jarak jauh tanpa harus memprogram ulang perangkat. Akhirnya saya membuat proyek sederhana ini: ESP8266 membaca pesan dari database MySQL melalui API, lalu menampilkannya ke layar OLED 0.96 inci. Artikel ini adalah catatan perjalanan saya, bukan template massal. Saya harap bisa menginspirasi Anda yang sedang belajar IoT.

📌 Catatan: Proyek ini saya buat untuk keperluan belajar dan penggunaan pribadi. Tidak ada afiliasi dengan merek atau hosting tertentu.

🛠️ Komponen yang Saya Gunakan

  • NodeMCU ESP8266 (versi CH340)
  • Layar OLED 0.96" I2C (SSD1306)
  • Kabel jumper Female to Female (4 buah)
  • Kabel micro USB untuk power dan upload
  • Hosting + domain pribadi (bisa juga menggunakan free hosting seperti 000webhost untuk uji coba)

🔌 Skema Koneksi (Hasil Eksperimen Saya)

Setelah beberapa kali gagal karena salah pin, akhirnya skema yang berhasil adalah:

  • OLED VCC → NodeMCU 3.3V (jangan ke 5V!)
  • OLED GND → NodeMCU GND
  • OLED SCL → NodeMCU D1 (GPIO5)
  • OLED SDA → NodeMCU D2 (GPIO4)
⚠️ Peringatan dari pengalaman pahit: Saya pernah merusak 2 buah OLED karena menyambung ke pin 5V. Pastikan tegangan 3.3V!

🗄️ Persiapan Database dan API

Saya membuat database MySQL dengan satu tabel sederhana bernama tbl_pesan. Berikut struktur yang saya gunakan:

CREATE TABLE tbl_pesan (
    id INT AUTO_INCREMENT PRIMARY KEY,
    isi_pesan TEXT NOT NULL,
    pengirim VARCHAR(50),
    waktu_dibuat TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Kemudian saya buat file PHP bernama ambil_pesan.php di hosting. Isinya kurang lebih seperti ini (sederhana, tanpa embel-embel berlebihan):

<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");

$koneksi = new mysqli("localhost", "username_anda", "password_anda", "nama_database");

if ($koneksi->connect_error) {
    echo json_encode(["sukses" => false, "error" => "Koneksi gagal"]);
    exit;
}

$hasil = $koneksi->query("SELECT isi_pesan, pengirim FROM tbl_pesan ORDER BY id DESC LIMIT 1");

if ($hasil->num_rows > 0) {
    $data = $hasil->fetch_assoc();
    echo json_encode(["sukses" => true, "pesan" => $data["isi_pesan"], "dari" => $data["pengirim"]]);
} else {
    echo json_encode(["sukses" => false, "pesan" => "Belum ada pesan"]);
}
?>

📡 Kode Program untuk ESP8266

Setelah API siap, saya menulis kode Arduino IDE berikut. Saya menggunakan library Adafruit SSD1306, Adafruit GFX, ArduinoJson, dan ESP8266WiFi.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const char* ssid = "WIFI_ANDA";
const char* password = "PASSWORD_WIFI";
const char* apiURL = "http://domainanda.com/ambil_pesan.php";

String pesanSaatIni = "Menunggu pesan...";
String pengirim = "Sistem";

void ambilPesan() {
  if (WiFi.status() != WL_CONNECTED) return;
  
  HTTPClient http;
  WiFiClient client;
  http.begin(client, apiURL);
  int kodeHTTP = http.GET();
  
  if (kodeHTTP == 200) {
    String response = http.getString();
    DynamicJsonDocument doc(512);
    deserializeJson(doc, response);
    
    if (doc["sukses"]) {
      pesanSaatIni = doc["pesan"].as<String>();
      pengirim = doc["dari"].as<String>();
    }
  }
  http.end();
}

void tampilkanKeOLED() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println("Pesan Masuk:");
  display.drawLine(0, 9, 128, 9, WHITE);
  
  display.setCursor(0, 12);
  display.print("Dari: ");
  display.println(pengirim);
  
  display.setCursor(0, 24);
  // Membatasi panjang pesan agar tidak keluar layar
  String teks = pesanSaatIni;
  if (teks.length() > 48) teks = teks.substring(0, 45) + "...";
  display.println(teks);
  
  display.display();
}

void setup() {
  Serial.begin(115200);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("Gagal init OLED");
    for(;;);
  }
  display.clearDisplay();
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Terhubung ke WiFi");
  
  ambilPesan();
  tampilkanKeOLED();
}

void loop() {
  static unsigned long waktuTerakhir = 0;
  if (millis() - waktuTerakhir > 30000) { // Update tiap 30 detik
    ambilPesan();
    tampilkanKeOLED();
    waktuTerakhir = millis();
  }
  delay(100);
}

🐞 Kendala yang Saya Alami (dan Solusinya)

Selama membuat proyek ini, saya beberapa kali hampir menyerah. Berikut catatan masalah yang saya temui:

  • OLED tidak menyala: Ternyata alamat I2C saya bukan 0x3C tetapi 0x3D. Cek menggunakan scanner I2C.
  • ESP8266 tidak bisa konek WiFi: Sinyal router terlalu lemah, saya pindahkan perangkat lebih dekat.
  • JSON parsing error: File PHP saya mengeluarkan warning (spasi kosong). Saya bersihkan semua whitespace di luar tag PHP.
  • Port COM tidak terdeteksi: Driver CH340 belum terinstal di Windows.

✨ Pengembangan yang Saya Lakukan Setelahnya

Setelah proyek dasar berhasil, saya menambahkan beberapa fitur sesuai kebutuhan:

  • Menampilkan semua pesan bergantian (rolling) dengan interval 7 detik.
  • Menambahkan indikator koneksi WiFi di pojok OLED.
  • Membuat form web sederhana untuk mengirim pesan tanpa harus masuk phpMyAdmin.

📚 Penutup

Proyek ini mengajarkan saya banyak hal: dari koneksi hardware, pemrograman ESP8266, hingga membuat API dengan PHP. Jika Anda ingin mencoba, saya sarankan untuk memahami setiap baris kode dan menyesuaikan dengan kebutuhan Anda sendiri, bukan sekadar copy-paste. Selamat bereksperimen!

Artikel ini adalah dokumentasi pribadi. Silakan bagikan jika bermanfaat, tapi jangan dijadikan konten massal atau spam.

Tidak ada komentar:

Posting Komentar

Panduan Lengkap NodeMCU ESP8266 dan OLED 0.96" untuk Pemula

NodeMCU ESP8266 dan OLED 0.96" - Panduan Lengkap untuk Pemula 📟 NODEMCU ESP8266 DAN OLED 0.96" Panduan Lengkap untuk...