Pendahuluan — Dari Sketch Tunggal ke Project Profesional

Seri 1 dan Seri 2 sejauh ini memakai Arduino IDE — cocok untuk belajar cepat. Tapi saat proyek bertambah (MQTT #7, gateway LoRa #28, multi-file), kamu butuh struktur folder, dependency terkelola, dan build yang konsisten.

PlatformIO adalah ekosistem development embedded berbasis VS Code (atau IDE lain) yang mengelola board ESP32, library, dan upload lewat file platformio.ini. Artikel Jalur E ini memandu migrasi dari Arduino IDE (#2) ke workflow modern — tanpa mengubah logika sketch yang sudah kamu paham.

Prasyarat: Sudah bisa flash ESP32 di Arduino IDE (#2), paham dasar MQTT (#7), dan pernah buat project multi-sketch seperti gateway LoRa (#28).

Mengapa PlatformIO?

AspekArduino IDEPlatformIO
Struktur projectSatu folder sketchsrc/, lib/, include/
LibraryLibrary Manager globallib_deps per project (versi pinned)
Multi-boardGanti menu Tools manualEnvironment di platformio.ini
CI / timSulit direproduksipio run di terminal identik di mana saja
IntelliSenseTerbatasAutocomplete kuat di VS Code

PlatformIO bukan pengganti pemahaman ESP32 — kamu tetap menulis setup() / loop(). Yang berubah adalah cara mengelola project, terutama sebelum OTA (#15) dan project capstone nanti.

Instalasi — VS Code + PlatformIO

  1. Download Visual Studio Code dari code.visualstudio.com
  2. Buka Extensions (Ctrl+Shift+X) → cari PlatformIO IDE → Install
  3. Restart VS Code — ikon alien PlatformIO muncul di sidebar kiri
  4. Pastikan driver USB CH340/CP2102 sudah terpasang (sama seperti #2)

Di Windows, PlatformIO mengunduh toolchain sendiri — pertama kali build bisa 5–15 menit. Sabar, ini sekali saja per versi board.

Buat Project ESP32 Baru

  1. PlatformIO Home → New Project
  2. Name: kindo-esp32-mqtt
  3. Board: Espressif ESP32 Dev Module
  4. Framework: Arduino
  5. Finish — tunggu scaffold selesai

Struktur default:

kindo-esp32-mqtt/
├── platformio.ini    ← konfigurasi board & library
├── src/
│   └── main.cpp      ← setup() / loop() kamu
├── lib/              ← library lokal (opsional)
└── include/          ← header custom

platformio.ini — Jantung Project

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600

lib_deps =
  knolleary/PubSubClient @ ^2.8
  bblanchon/ArduinoJson @ ^7.0

build_flags =
  -D CORE_DEBUG_LEVEL=1

lib_deps menggantikan Library Manager Arduino — versi library terkunci di project, sehingga sketch MQTT kamu tidak rusak saat library global ter-update.

Migrasi Sketch MQTT dari Arduino IDE

Salin isi sketch MQTT #7 ke src/main.cpp. Pastikan placeholder Seri 2 tetap:

  • SSID: GANTI_NAMA_WIFI
  • Password WiFi: GANTI_PASSWORD_WIFI
  • Broker: 192.168.1.50 · user kindo_esp32
  • MQTT pass: GANTI_PASSWORD_MQTT
  • Topic: kodingindonesia/esp32/dht22/data
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "GANTI_NAMA_WIFI";
const char* password = "GANTI_PASSWORD_WIFI";
// ... sisa sketch MQTT #7

Build: ikon di status bar atau terminal pio run. Upload: pio run --target upload. Serial: pio device monitor.

Pro tip: Tambahkan .gitignore dengan folder .pio/ — jangan commit build cache ke GitHub.

Multi-Environment (Dev vs Produksi)

Pisahkan board di meja kerja vs node lapangan:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = knolleary/PubSubClient @ ^2.8

[env:esp32cam]
platform = espressif32
board = esp32cam
framework = arduino
lib_deps = knolleary/PubSubClient @ ^2.8
build_flags = -DBOARD_HAS_PSRAM

Upload ke environment tertentu: pio run -e esp32cam --target upload — berguna saat kamu punya ESP32-CAM (#27) dan DevKit biasa dalam satu repo monorepo.

Memecah Kode — src vs lib

Project gateway #28 bisa dirapikan:

  • src/main.cpp — setup WiFi + MQTT + loop LoRa
  • lib/lora_packet/packet.h — struct lora_packet_t bersama
  • lib/mqtt_publish/mqtt_publish.cpp — fungsi publish JSON

Pola ini memudahkan unit test dan review kode sebelum modul FreeRTOS (#31).

Serial Monitor & Debug

# Monitor dengan filter timestamp
pio device monitor --filter time

# Build + upload + monitor satu baris
pio run --target upload --target monitor

Untuk debug MQTT, subscribe paralel di broker Mosquitto pribadi (#16):

mosquitto_sub -h 192.168.1.50 -u kindo_esp32 -P GANTI_PASSWORD_MQTT \
  -t kodingindonesia/esp32/dht22/data -v

PlatformIO vs ESPHome / Arduino IDE

ToolCocok untuk
Arduino IDEBelajar pertama, sketch kecil (#3 Blink)
PlatformIOProject besar, tim, CI, multi-board
ESPHome (#22)Smart home YAML tanpa C++

Keamanan & Git

  • Jangan commit GANTI_PASSWORD_* — gunakan build_flags + file lokal secrets.ini (gitignored)
  • Contoh: -DWIFI_SSID=\"\\\"GANTI_NAMA_WIFI\\\"\" atau env var di CI
  • Untuk produksi cloud, lihat MQTT TLS (#17)

Estimasi Biaya

ItemBiaya
VS Code + PlatformIOGratis (open source)
ESP32 DevKit (sudah punya)Rp 0 tambahan
Waktu setup pertama±30–60 menit (download toolchain)

Checklist: Siap Migrasi?

  1. Sketch MQTT #7 sudah jalan di Arduino IDE? → port ke src/main.cpp
  2. Butuh dua board berbeda? → tambah [env:...]
  3. Library bentrok versi? → pin di lib_deps
  4. Gateway LoRa #28 makin besar? → pecah ke lib/
  5. Butuh OTA dari PlatformIO? → plugin espota / artikel #15

Uji Coba

  1. Buat project kindo-esp32-mqtt di PlatformIO
  2. Salin sketch publish DHT22/MQTT — build sukses
  3. Upload — Serial menampilkan IP + connected MQTT
  4. mosquitto_sub menerima payload JSON
  5. Tambah environment kedua — verifikasi pio run -e keduanya compile

Workflow Harian dengan PlatformIO

Setelah migrasi pertama, kebiasaan kerja di VS Code biasanya seperti ini:

  1. Buka folder project — File → Open Folder → pilih root yang berisi platformio.ini
  2. Edit src/main.cpp — sama seperti sketch Arduino, dengan autocomplete header
  3. Build (pio run) — tangkap error compile sebelum upload
  4. Upload — tombol panah atau pio run -t upload
  5. Monitorpio device monitor untuk log Serial
  6. Commit Git — hanya source (src/, lib/, platformio.ini), bukan .pio/

Untuk project yang sudah pakai MQTT (#7), alur debug tetap: Serial untuk status WiFi, mosquitto_sub untuk payload broker. PlatformIO tidak mengubah protokol — hanya mempercepat iterasi saat kamu menambah library atau environment baru.

Integrasi dengan Tooling Seri 2

PlatformIO melengkapi artikel infrastruktur yang sudah kamu baca:

  • Mosquitto (#16) — broker tetap di Raspberry Pi/VPS; ESP32 hanya client MQTT
  • Grafana (#19) — data dari topic kodingindonesia/esp32/dht22/data tidak berubah
  • Gateway LoRa (#28) — refactor ke lib/ agar packet LoRa dan publish MQTT terpisah
  • OTA (#15) — upload awal via USB, update berikutnya bisa lewat WiFi

Saat tim bertambah, platformio.ini menjadi kontrak: semua developer memakai versi board dan library yang sama — mengurangi bug “di laptop saya jalan”.

Contoh platformio.ini Lengkap (MQTT + JSON)

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600

lib_deps =
  knolleary/PubSubClient @ ^2.8
  bblanchon/ArduinoJson @ ^7.0

build_flags =
  -D CORE_DEBUG_LEVEL=1
  -D WIFI_SSID=\"GANTI_NAMA_WIFI\"
  -D WIFI_PASS=\"GANTI_PASSWORD_WIFI\"

; Opsional: monitor filter
monitor_filters = time, esp32_exception_decoder

Dengan build_flags, credential bisa diinjeksi saat compile tanpa menulis literal di main.cpp — praktik yang disarankan sebelum deploy ke lapangan atau sebelum integrasi MQTT TLS (#17).

FAQ Singkat

Bisa pakai PlatformIO tanpa VS Code?
Ya — CLI pio standalone; ekstensi VS Code paling populer untuk pemula.
Sketch Arduino IDE lama masih bisa dibuka?
Ya — copy-paste ke src/main.cpp, tambahkan #include <Arduino.h>.
Harus migrasi semua project?
Tidak — Arduino IDE tetap OK untuk eksperimen cepat; PlatformIO untuk project yang disimpan & di-deploy.

Migrasi Step-by-Step dari Folder Arduino IDE

Anggap kamu punya sketch mqtt_dht22.ino di Arduino IDE yang sudah jalan. Berikut urutan migrasi tanpa mengubah logika:

  1. Di PlatformIO, buat project baru kindo-esp32-mqtt (framework Arduino)
  2. Buka src/main.cpp — hapus template default
  3. Salin seluruh isi .ino ke main.cpp
  4. Tambahkan baris pertama: #include <Arduino.h> (wajib di PlatformIO, tidak di .ino)
  5. Pindahkan library dari Library Manager ke lib_deps di platformio.ini — contoh PubSubClient: knolleary/PubSubClient @ ^2.8
  6. Jalankan pio run — perbaiki error include atau nama fungsi
  7. Upload dan bandingkan output Serial dengan versi Arduino IDE
  8. Subscribe MQTT di broker #16 — pastikan topic dan JSON identik

Jika sketch memakai banyak file tab di Arduino IDE, buat file tambahan di src/ (misalnya wifi_connect.cpp + header di include/) atau pindahkan ke lib/nama_modul/ untuk reuse di project gateway #28.

Folder .pio/libdeps/ dihasilkan otomatis — jangan edit manual; selalu ubah lib_deps lalu pio run ulang.

PlatformIO di CI/CD (Opsional)

Salah satu keunggulan PlatformIO adalah perintah pio run yang deterministik — cocok untuk GitHub Actions atau pipeline internal tim. Pola minimal:

- name: Build ESP32 firmware
  run: |
    pip install platformio
    pio run -e esp32dev

Build di CI tidak menggantikan uji di hardware nyata, tapi menangkap error compile dini — terutama saat lib_deps di-update atau saat menambah environment esp32cam untuk modul kamera. Simpan firmware binary dari .pio/build/ sebagai artefak release jika kamu mendistribusikan OTA ke banyak node lapangan.

Untuk proyek pribadi, cukup build lokal; langkah CI ini opsional sampai kamu punya puluhan device seperti rencana capstone greenhouse (#39).

Tips & Troubleshooting

  • Build gagal lib not found: Cek ejaan lib_deps di Registry PlatformIO
  • Upload timeout: Tahan BOOT seperti di #2; turunkan upload_speed
  • IntelliSense merah tapi build OK: pio run sekali, lalu Reload Window VS Code
  • Port tidak muncul: Driver CH340/CP2102 — ulangi langkah #2

Langkah Selanjutnya (Jalur E)

PlatformIO membawa project ESP32 kamu ke level berikutnya — struktur rapi, dependency aman, siap kolaborasi. Lanjutkan Seri 2 di halaman artikel Koding Indonesia.