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 proyek | Pilih | Alasan |
|---|---|---|
| Sensor tunggal + MQTT murah | ESP8266 / NodeMCU | Harga board ~Rp 25–40 rb · cukup untuk DHT + publish |
| Multi-sensor + ADC + servo | ESP32 | GPIO & ADC lebih banyak · ADC (#35) · servo (#33) |
| Bluetooth ke smartphone | ESP32 | ESP8266 tidak punya BLE — lihat #32 |
| Kamera / streaming | ESP32-CAM | Di luar scope ESP8266 — #27 |
| Peer-to-peer tanpa router | ESP32 (ESP-NOW) | ESP8266 support terbatas — #25 |
| Multi-task paralel | ESP32 + FreeRTOS | Dual-core — #31 |
Spesifikasi Teknis — ESP8266 vs ESP32
| Aspek | ESP8266 (NodeMCU) | ESP32 (DevKit) |
|---|---|---|
| CPU | Single-core ~160 MHz | Dual-core ~240 MHz |
| WiFi | 802.11 b/g/n 2,4 GHz | 802.11 b/g/n 2,4 GHz |
| Bluetooth | Tidak ada | BLE Classic + BLE |
| GPIO usable | ~11 (tergantung board) | ~25+ (tergantung modul) |
| ADC | 1 pin (A0, 0–1 V atau 0–3,3 V tergantung board) | Banyak pin ADC1 12-bit — #35 |
| Flash tipikal | 4 MB | 4–16 MB |
| Deep sleep | Ya (~20 µA) — #11 pola serupa di ESP32 | Ya, 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 D0–D8 plus A0.
- LED built-in biasanya di GPIO2 (label
D4di 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
| Fungsi | NodeMCU (ESP8266) | ESP32 DevKit |
|---|---|---|
| LED onboard | GPIO2 (D4) | GPIO2 (board umum) |
| DHT22 (#5) | GPIO4 (D2) — hindari konflik boot | GPIO4 |
| Relay (#8) | GPIO5 (D1) | GPIO26 |
| Soil moisture analog | Hanya A0 — pilih soil atau LDR | GPIO34 + GPIO35 bersamaan — #35 |
| Servo PWM (#33) | Mungkin, tapi timing WiFi + servo rawan | GPIO27 + 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:
- File → Preferences → Additional boards manager URLs
- Tambah:
https://arduino.esp8266.com/stable/package_esp8266com_index.json - Tools → Board → Boards Manager → install esp8266 by ESP8266 Community
- 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
| Bagian | ESP8266 | ESP32 |
|---|---|---|
| WiFi include | #include <ESP8266WiFi.h> | #include <WiFi.h> |
| MQTT client | PubSubClient + WiFiClient | Sama |
| Topic | kodingindonesia/esp8266/... | kodingindonesia/esp32/... |
| GPIO LED | GPIO2 active LOW | GPIO2 (cek board) |
| Timestamp JSON | Opsional manual | NTP #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)
| Komponen | ESP8266 | ESP32 |
|---|---|---|
| Board dev | 25.000 – 40.000 | 35.000 – 55.000 |
| DHT22 | 35.000 – 55.000 | 35.000 – 55.000 |
| Modul relay | 12.000 – 20.000 | 12.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_subterima 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)setelahdht.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:
- SD Card & SPI logging offline (#37) — backup data sensor di lapangan tanpa WiFi
- ADC (#35) — alasan upgrade ke ESP32 untuk multi-sensor analog
- NTP (#34) — timestamp ISO
2026-07-02T14:30:00di payload ESP32 - Keamanan HTTPS (#38) — sertifikat untuk HTTP client ESP32
- Capstone greenhouse (#39) — gabung multi-sensor + aktuator + dashboard
Pilih board yang tepat, jangan over-engineer — lanjutkan di halaman artikel Koding Indonesia.