Pendahuluan — Dua Chip, Satu Ekosistem

Di artikel #1, perbandingan ESP8266 vs ESP32 hanya disebut singkat. Seri ESP32 Koding Indonesia memang berfokus ke ESP32 — WiFi, MQTT, sensor, dan dashboard — tapi di lapangan banyak node murah masih pakai NodeMCU atau Wemos D1 Mini.

Artikel Tier 2 ini menjawab pertanyaan praktis: kapan ESP8266 cukup, kapan wajib upgrade ke ESP32, dan bagaimana pola kode MQTT dari #7 dipindah ke NodeMCU tanpa mengubah arsitektur broker Mosquitto (#16).

Prasyarat: Sudah paham GPIO (#3), WiFi (#4), dan idealnya pernah publish MQTT dari DHT22 (#5). Capstone #10 tetap referensi arsitektur hybrid.

Ringkasan Cepat — Pilih Board dalam 30 Detik

Kebutuhan proyekPilihAlasan
Sensor tunggal + MQTT murahESP8266 / NodeMCUHarga board ~Rp 25–40 rb · cukup untuk DHT + publish
Multi-sensor + ADC + servoESP32GPIO & ADC lebih banyak · ADC (#35) · servo (#33)
Bluetooth ke smartphoneESP32ESP8266 tidak punya BLE — lihat #32
Kamera / streamingESP32-CAMDi luar scope ESP8266 — #27
Peer-to-peer tanpa routerESP32 (ESP-NOW)ESP8266 support terbatas — #25
Multi-task paralelESP32 + FreeRTOSDual-core — #31

Spesifikasi Teknis — ESP8266 vs ESP32

AspekESP8266 (NodeMCU)ESP32 (DevKit)
CPUSingle-core ~160 MHzDual-core ~240 MHz
WiFi802.11 b/g/n 2,4 GHz802.11 b/g/n 2,4 GHz
BluetoothTidak adaBLE Classic + BLE
GPIO usable~11 (tergantung board)~25+ (tergantung modul)
ADC1 pin (A0, 0–1 V atau 0–3,3 V tergantung board)Banyak pin ADC1 12-bit — #35
Flash tipikal4 MB4–16 MB
Deep sleepYa (~20 µA) — #11 pola serupa di ESP32Ya, lebih fleksibel wake source
Harga board (ID)~Rp 25.000 – 40.000~Rp 35.000 – 55.000

NodeMCU v3 — Board Paling Umum

NodeMCU bukan chip — itu development board berbasis ESP-12E/ESP-12F dengan USB-UART CH340, regulator 3,3 V, dan label pin D0D8 plus A0.

  • LED built-in biasanya di GPIO2 (label D4 di NodeMCU)
  • A0 = satu-satunya input analog
  • D3 (GPIO0) & D8 (GPIO15) punya constraint boot — hindari pull saat flash
  • Semua pin logika 3,3 V — jangan hubungkan 5 V langsung ke GPIO

Pro tip: Di NodeMCU, nomor D4 ≠ GPIO4. Selalu cek pinout: D4 = GPIO2 untuk LED onboard.

Wemos D1 Mini — Alternatif Kompak

Wemos D1 Mini (tag wemos) punya footprint lebih kecil dari NodeMCU, cocok untuk node sensor tertutup di kotak kecil. Pinout mirip — tetap ESP8266, satu ADC, pola MQTT sama. Pilih NodeMCU untuk prototyping breadboard; D1 Mini untuk produk kecil.

GPIO & Pin — Perbedaan yang Sering Bikin Bug

FungsiNodeMCU (ESP8266)ESP32 DevKit
LED onboardGPIO2 (D4)GPIO2 (board umum)
DHT22 (#5)GPIO4 (D2) — hindari konflik bootGPIO4
Relay (#8)GPIO5 (D1)GPIO26
Soil moisture analogHanya A0 — pilih soil atau LDRGPIO34 + GPIO35 bersamaan — #35
Servo PWM (#33)Mungkin, tapi timing WiFi + servo rawanGPIO27 + library ESP32Servo

ADC: Satu Pin vs Banyak

ESP8266 hanya punya satu ADC. Untuk greenhouse dengan soil moisture dan LDR sekaligus, ESP32 jauh lebih nyaman. Di ESP8266, solusi workaround: multiplexer analog atau pakai sensor digital (BME280 via I2C di ESP32 — #13).

WiFi & Bluetooth

Keduanya WiFi 2,4 GHz. ESP32 menambah Bluetooth BLE — berguna untuk provisioning atau kirim data ke app tanpa router (#32). ESP8266 tidak bisa menggantikan use case BLE.

Dual-Core vs Single-Core

ESP32 bisa pisahkan task sensor dan WiFi di core berbeda (FreeRTOS #31). ESP8266 single-core — loop() blocking lebih terasa; hindari delay() panjang saat MQTT aktif, sama seperti di ESP32.

Konsumsi Daya & Deep Sleep

Untuk node baterai, ESP8266 dan ESP32 sama-sama bisa deep sleep. Pola wake + publish MQTT di #11 berlaku konseptual — API beda (ESP.deepSleep() vs esp_deep_sleep_start()), tapi arsitektur broker tetap.

Kapan Pilih ESP8266 / NodeMCU

  • Proyek belajar MQTT pertama dengan budget minimal
  • Node sensor tunggal: DHT22 → broker → Grafana/Home Assistant
  • Replika sketch relay #8 dengan biaya board lebih rendah
  • Gateway kecil yang hanya forward JSON ke topic yang sama
  • Stok board lama di rak — manfaatkan sebelum beli ESP32 baru

Kapan Upgrade ke ESP32

  • Butuh 2+ sensor analog atau kombinasi soil + LDR (#35)
  • Servo presisi + WiFi stabil (#33)
  • Timestamp akurat NTP di setiap payload (#34)
  • OTA firmware tanpa kabel (#15)
  • Project PlatformIO (#29) multi-target (esp32 + esp8266 dalam satu repo)
  • Capstone greenhouse (#39) — multi-jalur sensor + aktuator

Setup Arduino IDE — Board Manager ESP8266

Selain ESP32 Board Manager dari #2, tambahkan URL board ESP8266:

  1. File → Preferences → Additional boards manager URLs
  2. Tambah: https://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Tools → Board → Boards Manager → install esp8266 by ESP8266 Community
  4. Pilih board: NodeMCU 1.0 (ESP-12E Module) atau LOLIN(WEMOS) D1 R2 & mini

Blink LED di NodeMCU

Setara Blink #3, tapi pin LED onboard = GPIO2:

#define LED_PIN 2  // GPIO2 = D4 di NodeMCU, active LOW

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, LOW);   // LED nyala (active low)
  delay(500);
  digitalWrite(LED_PIN, HIGH);  // LED mati
  delay(500);
}

Contoh MQTT Publish di ESP8266

Pola sama dengan #7 — beda library include dan board. Topic dipisah namespace esp8266 agar tidak bentrok dengan node ESP32 di broker yang sama:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHT_PIN  4       // D2 di NodeMCU
#define DHT_TYPE DHT22

const char* WIFI_SSID     = "GANTI_NAMA_WIFI";
const char* WIFI_PASSWORD = "GANTI_PASSWORD_WIFI";
const char* MQTT_BROKER   = "192.168.1.50";
const int   MQTT_PORT     = 1883;
const char* MQTT_USER     = "kindo_esp32";
const char* MQTT_PASS     = "GANTI_PASSWORD_MQTT";
const char* TOPIC_DHT     = "kodingindonesia/esp8266/dht22/data";

DHT dht(DHT_PIN, DHT_TYPE);
WiFiClient espClient;
PubSubClient mqtt(espClient);

void connectWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void connectMqtt() {
  while (!mqtt.connected()) {
    if (mqtt.connect("nodemcu-dht22", MQTT_USER, MQTT_PASS)) {
      // connected
    } else {
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  dht.begin();
  delay(2000);
  connectWiFi();
  mqtt.setServer(MQTT_BROKER, MQTT_PORT);
  mqtt.setBufferSize(256);
}

void loop() {
  if (!mqtt.connected()) {
    connectMqtt();
  }
  mqtt.loop();

  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (!isnan(t) && !isnan(h)) {
    char payload[128];
    snprintf(payload, sizeof(payload),
      "{\"device\":\"nodemcu\",\"temp\":%.1f,\"hum\":%.1f}",
      t, h);
    mqtt.publish(TOPIC_DHT, payload);
  }
  delay(10000);
}

Verifikasi di laptop:

mosquitto_sub -h 192.168.1.50 -u kindo_esp32 -P GANTI_PASSWORD_MQTT -t "kodingindonesia/esp8266/#" -v

Migrasi Sketch ESP8266 → ESP32

BagianESP8266ESP32
WiFi include#include <ESP8266WiFi.h>#include <WiFi.h>
MQTT clientPubSubClient + WiFiClientSama
Topickodingindonesia/esp8266/...kodingindonesia/esp32/...
GPIO LEDGPIO2 active LOWGPIO2 (cek board)
Timestamp JSONOpsional manualNTP #34 — contoh unix 1782977400

Broker Mosquitto (#16), subscriber Python (#18), dan dashboard Grafana (#19) tidak perlu diganti — cukup subscribe wildcard kodingindonesia/# atau topic per device.

PlatformIO — Dua Target Satu Repo

Di PlatformIO (#29), tambah environment kedua:

[env:nodemcu]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
    knolleary/PubSubClient@^2.8
    adafruit/DHT sensor library@^1.4

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
    knolleary/PubSubClient@^2.8
    adafruit/DHT sensor library@^1.4

Node-RED & Home Assistant

Node Node-RED (#23) dan Home Assistant (#21) tidak peduli chip asal topic MQTT konsisten. Pisahkan prefix esp8266 vs esp32 di flow agar entitas tidak bentrok.

Memori Flash & Library

ESP8266 modul umum punya 4 MB flash — cukup untuk firmware Arduino + OTA kecil. ESP32 sering 4–16 MB dan lebih nyaman jika kamu menambah banyak library (Grafana stack di sisi server, bukan di chip). Untuk sketch MQTT + DHT22, keduanya longgar; perbedaan terasa saat project PlatformIO (#29) menarik puluhan dependency.

Library PubSubClient dan DHT sensor library sama di kedua platform — yang berubah hanya header WiFi dan nomor pin. Itu memudahkan maintain dua versi node (murah di ruang tamu, ESP32 di greenhouse) tanpa mengubah topic schema di broker.

OTA & Maintenance di Lapangan

ESP32 punya tutorial OTA (#15) yang matang — upload firmware baru tanpa USB. ESP8266 juga support OTA, tapi ekosistem dan dokumentasi di komunitas Indonesia lebih condong ke ESP32 untuk produk jangka panjang. Jika node ESP8266 terpasang di langit-langit dan sulit dijangkau USB, rencanakan OTA sejak awal atau pilih ESP32.

Untuk prototipe di meja kerja, flash ulang NodeMCU via USB sama mudahnya dengan ESP32 — bottleneck biasanya driver CH340, bukan chip.

Contoh Arsitektur Hybrid di Rumah

Pola yang sering bekerja di proyek nyata:

  • 3× NodeMCU — DHT22 di kamar, relay lampu koridor, tombol virtual MQTT (biaya rendah)
  • 1× ESP32 — gateway utama: web server lokal + subscribe semua topic + tampilkan di OLED #14
  • Broker Mosquitto di Raspberry Pi (#16) — satu titik kebenaran data
  • Subscriber Python → MySQL (#18) — histori tanpa peduli chip pengirim

Subscriber tidak memeriksa apakah payload datang dari esp8266 atau esp32 — cukup parse JSON field device untuk label di Grafana (#19).

Subscriber Python — Node Campuran

Jika kamu sudah menjalankan subscriber dari #18, tidak perlu script baru untuk ESP8266. Subscribe wildcard:

mosquitto_sub -h 192.168.1.50 -u kindo_esp32 -P GANTI_PASSWORD_MQTT -t "kodingindonesia/#" -v

Di callback Python, cabang berdasarkan prefix topic atau field device di JSON. Pola ini mempersiapkan capstone greenhouse (#39) di mana node murah dan node kaya coexist.

Keamanan & Produksi

  • Jangan commit password WiFi/MQTT — pakai placeholder GANTI_*
  • Produksi: TLS di broker — MQTT TLS (#17)
  • Firmware ESP8266 tidak update OTA semudah ESP32 — pertimbangkan akses fisik untuk flash ulang
  • GPIO boot (GPIO0/GPIO15) — pastikan relay tidak tarik pin saat reset

Estimasi Biaya (Indonesia)

KomponenESP8266ESP32
Board dev25.000 – 40.00035.000 – 55.000
DHT2235.000 – 55.00035.000 – 55.000
Modul relay12.000 – 20.00012.000 – 20.000
Total node minimal~72.000 – 115.000~82.000 – 130.000

Selisih board kecil — hemat ESP8266 terasa saat deploy puluhan node identik.

Checklist Sebelum Demo

  • ☐ Board Manager ESP8266 terinstall · port COM benar
  • ☐ Blink GPIO2 (LED onboard) berkedip
  • ☐ WiFi connect · Serial tampilkan IP
  • ☐ MQTT publish ke kodingindonesia/esp8266/dht22/data
  • mosquitto_sub terima JSON valid
  • ☐ Topic tidak bentrok dengan node ESP32 di broker yang sama

FAQ Singkat

NodeMCU sama dengan ESP8266?
NodeMCU adalah board development; chip di dalamnya ESP8266 (biasanya ESP-12E).
Bisa ikut tutorial ESP32 pakai NodeMCU?
MQTT, DHT, relay — ya, dengan penyesuaian include WiFi dan GPIO. ADC multi-pin, BLE, servo presisi — tidak.
ESP8266 support ESP-NOW?
Ada dukungan terbatas — untuk mesh peer-to-peer serius pakai ESP32 (#25).
FreeRTOS di ESP8266?
ESP8266 SDK punya tasking terbatas; untuk pola multi-task penuh gunakan ESP32 (#31).
Wemos vs NodeMCU?
Chip sama — beda ukuran board dan pinout label. Pilih sesuai enclosure proyek.

Tips & Troubleshooting

  • Upload gagal "timed out": Tahan FLASH/BOOT saat upload · ganti kabel USB data · turunkan upload speed
  • LED blink terbalik: NodeMCU LED active LOW — LOW = nyala
  • MQTT rc=-4: Buffer kecil — mqtt.setBufferSize(256)
  • DHT NaN: Pull-up 10kΩ · delay(2000) setelah dht.begin() — sama seperti #5
  • WiFi connect lambat: Cek 2,4 GHz — ESP8266 tidak support 5 GHz
  • Reset loop saat relay aktif: Relay tarik GPIO0/GPIO15 — pindah pin atau isolasi dengan optocoupler

Langkah Selanjutnya — Tier 2 Seri 2

Setelah paham kapan pakai ESP8266 vs ESP32, lanjut pelengkap Tier 2:

Pilih board yang tepat, jangan over-engineer — lanjutkan di halaman artikel Koding Indonesia.