Menghubungkan firmware ke jaringan: peran TCP/IP stack (lwIP) di MCU, protokol MQTT dengan publish/subscribe dan QoS, koneksi aman dengan TLS dan mTLS, batasan sumber daya jaringan di embedded, serta praktik firmware MQTT over TLS pertama di ESP32.

Setelah di episode 11 firmware kita belajar berhemat daya, pada episode ini ia belajar berbicara dengan dunia luar. Sebuah perangkat tanpa konektivitas adalah pulau; dengan jaringan, ia jadi bagian dari sistem — mengirim telemetry, menerima perintah, dan diperbarui dari jauh (fondasi episode 13).
Mengapa networking penting di 2026? Karena hampir semua produk baru — smart home, sensor industri, wearables — butuh koneksi. Dan di firmware, networking berbeda dari server: sumber daya terbatas, koneksi harus tahan putus-putus, dan keamanan (TLS) bukan lagi opsional. Episode ini membangun fondasi yang akan kita lengkapi dengan keamanan di episode 18–19.
MCU tidak menjalankan Linux — ia butuh TCP/IP stack ringan yang berjalan di atas RTOS. Yang paling umum: lwIP (lightweight IP), dipakai oleh ESP-IDF, STM32, dan Zephyr.
Yang perlu kalian pahami di embedded TCP/IP:
socket/connect/send/recv mirip BSD, berjalan async lewat RTOS task.MQTT (episode 12 dari series IoT, tapi mari rekap intinya) adalah protokol publish/subscribe di atas TCP — ringan, berorientasi data, ideal untuk telemetry dan command:
Publisher (sensor) --publish--> Broker <--subscribe-- Subscriber (dashboard)
Topic: perangkat_01/suhu QoS: 0, 1, atau 2Fitur yang sering dipakai firmware:
| Fitur | Fungsi |
|---|---|
| QoS 0/1/2 | Jaminan pengiriman vs overhead |
| Retained message | Broker menyimpan nilai terakhir untuk subscriber baru |
| LWT (Last Will) | Broker memberi tahu saat perangkat mati mendadak |
Wildcard +, # | Subscribe kelompok topik |
Data dari sensor bisa jadi sensitif — dan perintah yang diubah attacker bisa berbahaya (misal perintah ke smart lock). Maka TLS (Transport Layer Security) wajib:
✓ Verifikasi sertifikat server - jangan pernah "verify off"
✓ Pakai MQTT over TLS (port 8883), bukan plain 1883
✓ Private key disimpan terenkripsi / secure element
✓ Rotasi sertifikat dengan masa berlaku; rencanakan update
✓ Jangan hardcode credential di source (baca dari NVS/secure storage)Warning
Aturan tanpa kompromi: jangan pernah men-disable verifikasi sertifikat ("verify off") hanya agar cepat jalan. Itu sama saja mengirim kunci rumah lewat pos tanpa amplop. Kalau handshake gagal karena CA tidak dikenali, tambahkan root CA yang benar — bukan mematikan verifikasi.
Gunakan ESP-IDF/PlatformIO + ESP32. Ini inti firmware-nya:
#include "mqtt_client.h"
#include "esp_tls.h"
static esp_mqtt_client_handle_t mqtt;
static void mqtt_event(void *arg, esp_event_base_t base,
int32_t id, void *data) {
// handle MQTT_EVENT_CONNECTED, MQTT_EVENT_DATA, dsb.
}
void network_init(void) {
esp_mqtt_client_config_t cfg = {};
cfg.broker.address.uri = "mqtts://broker.example.com:8883";
cfg.broker.verification.certificate = (const char *)root_ca_pem;
cfg.credentials.client_id = "dev-001";
mqtt = esp_mqtt_client_init(&cfg);
esp_mqtt_client_register_event(mqtt, ESP_EVENT_ANY_ID, mqtt_event, NULL);
esp_mqtt_client_start(mqtt);
}
// publish telemetry
void publish_temp(int temp_x10) {
char payload[16];
snprintf(payload, sizeof(payload), "{\"t\":%d}", temp_x10);
esp_mqtt_client_publish(mqtt, "dev-001/suhu", payload, 0, 1, 0);
}Struktur koneksi yang profesional selalu punya: reconnect dengan backoff, queue offline (data disimpan saat koneksi mati, dikirim saat kembali), dan LWT agar sisi lain tahu perangkat offline.
Tip
Desain pesan dengan skema versioned sejak awal: {"v":1,"t":255} — saat protokol berevolusi, perangkat lama bisa memutuskan apakah harus upgrade. Mengubah format tanpa versi = perangkat di lapangan jadi "bisu" tanpa alasan jelas.
Inti yang harus dibawa pulang:
Di episode 13 selanjutnya kita membangun sistem update: Bootloader & OTA — desain bootloader dua tahap, pengalihan vector table, partition table, dan alur Over-The-Air update dengan integritas dan rollback. Perangkat kalian siap diperbarui dari jauh!