Mengenal IoT platform cloud: AWS IoT Core, Azure IoT Hub, dan GCP, konsep device registry, device shadow dan twin, kebijakan kredensial perangkat, serta praktik mendaftarkan dan menghubungkan ESP32 ke cloud pertama kali.

Sejauh ini perangkat kalian hanya berbicara ke broker MQTT di jaringan lokal. Pada episode ini, data itu kita kirim ke cloud — tempat perangkat terdaftar, data diterima dalam skala besar, dan aplikasi mengambilnya dari mana saja.
Mengapa cloud penting? Karena broker lokal tidak bisa: menerima jutaan perangkat, menyimpan riwayat data, mengatur identitas perangkat, atau menyalurkan data ke analitik. IoT platform cloud menangani semua itu sebagai layanan terkelola — kalian fokus pada perangkat dan aplikasi, bukan membangun infrastruktur sendiri.
| Platform | Layanan | Free Tier | Bahasa Pengembangan |
|---|---|---|---|
| AWS IoT Core | Device registry, MQTT, shadows, rules | 250K pesan/bulan | AWS CLI, SDK, Terraform |
| Azure IoT Hub | Device registry, twins, device-to-cloud | 8.000 pesan/hari (F1) | Azure CLI, SDK, Terraform |
| Google Cloud IoT Core | Dihentikan; alternatif partner & Vertex AI | – | – |
Posisi Google unik: IoT Core dihentikan dan pengguna diarahkan ke partner + layanan lain (mis. Cloud Pub/Sub atau solusi dari vendor). Karena itu series ini fokus pada AWS IoT Core sebagai platform utama — plus konsep yang identik di Azure.
Note
Konsep IoT platform sangat portabel: kalian belajar satu platform, yang lain tinggal beda istilah. "Thing" di AWS ≈ "device" di Azure, "Device Shadow" di AWS ≈ "Device Twin" di Azure. Fokus pada konsep, bukan hafalan nama layanan.
Semua perangkat yang boleh terhubung harus terdaftar di registry — daftar identitas perangkat beserta sertifikat/kredensialnya. Registry berfungsi seperti daftar tamu gedung: hanya yang namanya tercatat yang boleh masuk.
aws iot create-thing --thing-name sensor-ruang-01
aws iot create-keys-and-certificate --set-as-active \
--certificate-pem-outfile device.pem.crt \
--public-key-outfile device.public.key \
--private-key-outfile device.private.key
aws iot attach-thing-principal --thing-name sensor-ruang-01 \
--principal arn:aws:iot:ap-southeast-1:ACCOUNT:cert/...CERTPerintah ini membuat perangkat sensor-ruang-01, lalu membuat sertifikat X.509 sebagai identitasnya. device.private.key adalah kunci rahasia yang hanya boleh ada di perangkat — jangan pernah commit ke repository.
Device shadow adalah copy terakhir dari state perangkat di cloud — bayangkan cermin digital. Saat perangkat offline, aplikasi tetap bisa membaca/menulis state; saat perangkat online kembali, shadow disinkronkan. Ini memisahkan aplikasi dari ketersediaan fisik perangkat.
{
"state": {
"reported": { "temp": 26.5, "relay": "OFF" },
"desired": { "relay": "ON" }
},
"version": 42
}Aplikasi menulis desired (yang diinginkan), perangkat membaca dan melaporkan hasilnya di reported (yang tercapai). Contoh: kalian ingin menyalakan relay dari aplikasi — tulis desired.relay = ON, perangkat yang online akan menerima dan mengeksekusi.
Platform bisa meneruskan pesan ke layanan lain berdasarkan aturan. Di AWS, Rule Engine memakai SQL sederhana:
SELECT deviceid, temperature, timestamp() AS ts
FROM 'sensor/+/telemetry'
WHERE temperature > 30Rule ini menangkap pesan dari topik sensor/+/telemetry, hanya pesan dengan suhu di atas 30, dan meneruskannya (mis. ke InfluxDB, S3, atau Lambda). Detail pipeline data kita bahas di episode 8.
Firmware perlu tiga hal: endpoint, certificate, dan private key. Endpoint didapat dari AWS:
aws iot describe-endpoint --endpoint-type iot:Data-ATS"endpointAddress": "xxxxxxxxxxxxx-ats.iot.ap-southeast-1.amazonaws.com"Bungkus sertifikat dan kunci ke dalam satu file:
cat device.pem.crt device.private.key > device.pem#include <Arduino.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include "secrets.h" // ENDPOINT, CERT, KEY, WIFI_SSID, WIFI_PASS
WiFiClientSecure espClient;
PubSubClient mqtt(espClient);
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
espClient.setCACert(AWS_CERT_CA);
espClient.setCertificate(AWS_CERT_CRT);
espClient.setPrivateKey(AWS_CERT_PRIVATE);
mqtt.setServer(ENDPOINT, 8883);
mqtt.connect("sensor-ruang-01");
}
void loop() {
mqtt.loop();
mqtt.publish("sensor/ruang-01/telemetry",
"{\"temperature\":26.5,\"humidity\":61}");
delay(10000);
}Perhatikan perbedaan dari episode 5: koneksi memakai port 8883 (TLS) dan tiga sertifikat — CA root AWS, sertifikat perangkat, dan private key. Kredensial disimpan terpisah di secrets.h yang di-gitignore.
const char *WIFI_SSID = "NAMA_WIFI";
const char *WIFI_PASS = "PASSWORD_WIFI";
const char *ENDPOINT = "xxxxxxxxxxxxx-ats.iot.ap-southeast-1.amazonaws.com";
const char *AWS_CERT_CA = "-----BEGIN CERTIFICATE-----...";
const char *AWS_CERT_CRT = "-----BEGIN CERTIFICATE-----...";
const char *AWS_CERT_PRIVATE = "-----BEGIN RSA PRIVATE KEY-----...";Caution
File secrets.h berisi kredensial live — wajib masuk .gitignore. Untuk produksi skala besar, lihat episode 19 (PKI & zero-touch provisioning): sertifikat dibuat di pabrik dan ditanam ke perangkat, bukan di-embed di source code.
Pantau apakah pesan benar-benar sampai ke cloud:
aws iot-data publish --topic "sensor/ruang-01/telemetry" \
--payload '{"temperature":27.0}' --cli-binary-format raw-in-base64-outAtau pakai MQTT test client di konsol AWS IoT — kalian akan melihat telemetry masuk real-time dari ESP32.
Data-ATS (bukan Data-ATS-OLD/legacy) agar TLS modern berfungsi.certificate lalu private key dalam satu file PEM wajib benar.Inti yang harus dibawa pulang:
Di episode 8 selanjutnya, kita akan mengikuti perjalanan data setelah masuk cloud: data ingestion & pipeline — bagaimana telemetry diterima, dialirkan lewat streaming, dan disimpan, plus praktik membangun pipeline data dari IoT platform ke storage. Data kalian akan mulai "mengalir"!