Tutorial Dasar Pemrograman IoT

Panduan lengkap mempelajari pemrograman Mikrokontroler (Arduino/ESP) dengan C++ untuk pemula

1. Pengenalan IoT & Mikrokontroler

1

Apa itu IoT?

IoT (Internet of Things) adalah konsep dimana objek fisik (perangkat, sensor, mesin) terhubung ke internet untuk bertukar data dan dikendalikan dari jarak jauh.

Karakteristik Sistem IoT:

  • Membaca data fisik melalui Sensor (suhu, cahaya, gerak)
  • Memproses data menggunakan Mikrokontroler (Otak sistem)
  • Melakukan aksi melalui Aktuator (LED, Motor, Relay)
  • Terhubung ke jaringan (WiFi, Bluetooth, LoRa)
2

Bahasa Pemrograman yang Digunakan

C++ / Arduino Language
Sebagian besar board IoT pemula (seperti Arduino Uno, ESP8266, NodeMCU, ESP32) diprogram menggunakan bahasa C/C++ yang sudah disederhanakan melalui framework Arduino. 

Kelebihan framework Arduino:
- Sintaks mudah dipahami
- Ratusan library tersedia gratis
- Komunitas sangat besar
- Bisa berjalan di berbagai jenis board (Cross-platform)
3

Board Populer untuk IoT

  • Arduino Uno: Cocok untuk belajar dasar, tapi tidak ada WiFi bawaan.
  • NodeMCU (ESP8266): Sangat populer untuk IoT pemula, sudah built-in WiFi.
  • ESP32: Board canggih dengan built-in WiFi & Bluetooth, dual-core processor.

2. Requirements dan Setup

1

Kebutuhan Software & Hardware

Untuk memulai, Anda memerlukan:

  • Software: Arduino IDE (Versi 2.x disarankan)
  • Hardware: Board ESP8266 / ESP32 atau Arduino Uno
  • Kabel Data: Kabel Micro USB atau Type-C (Penting: pastikan kabel bisa transfer data, bukan hanya untuk cas)
  • Komponen: LED, Resistor (220/330 ohm), Kabel Jumper, Breadboard
Catatan: Jika belum memiliki hardware, Anda bisa menggunakan simulator online seperti Wokwi (wokwi.com) atau Tinkercad!
2

Install Arduino IDE

Langkah Instalasi IDE
LANGKAH 1: Download
1. Buka https://www.arduino.cc/en/software
2. Download Arduino IDE 2.x sesuai OS Anda (Windows/Mac/Linux)
3. Jalankan file installer hingga selesai

LANGKAH 2: Tambah Board ESP (Jika pakai ESP32/ESP8266)
1. Buka Arduino IDE -> File -> Preferences
2. Di "Additional Boards Manager URLs" isi dengan:
   https://dl.espressif.com/dl/package_esp32_index.json
3. Pergi ke Tools -> Board -> Boards Manager
4. Cari "ESP32" lalu klik Install.
3

Memilih Board & Port

Koneksi Board
1. Hubungkan mikrokontroler ke laptop dengan kabel USB
2. Di Arduino IDE, klik menu Tools -> Board -> Pilih board Anda (misal: "DOIT ESP32 DEVKIT V1")
3. Klik menu Tools -> Port -> Pilih port yang terdeteksi (COM3, COM4, atau /dev/cu.usbserial)
4. Board siap diprogram!

3. Struktur Dasar Program (Syntax)

1

Setup() dan Loop()

Berbeda dengan pemrograman web, program IoT mikrokontroler memiliki dua fungsi utama yang wajib ada.

Struktur Dasar sketch.ino
// 1. Bagian Deklarasi Global (diluar fungsi)
int ledPin = 13; 

// 2. Fungsi setup() - Berjalan HANYA SEKALI saat board menyala/reset
void setup() {
  // Biasanya untuk inisialisasi pin, mulai komunikasi serial, connect WiFi
  pinMode(ledPin, OUTPUT);
}

// 3. Fungsi loop() - Berjalan BERULANG KALI selamanya
void loop() {
  // Berisi logika utama program (baca sensor, hidupkan relay, dll)
  digitalWrite(ledPin, HIGH);
}
Ingat: Setiap statement dalam C++ wajib diakhiri dengan titik koma (;).
2

Statement dan Comment

Komentar Code
// Ini adalah single line comment (Komentar satu baris)
// Komentar tidak akan dieksekusi oleh mikrokontroler

/* 
Ini adalah multi-line comment.
Bisa memakan lebih dari satu baris.
Berguna untuk mendeskripsikan blok kode yang panjang.
*/

4. Variabel dan Konstanta

1

Pengenalan Variabel

Variabel digunakan untuk menyimpan nilai seperti hasil pembacaan sensor atau status lampu. Karena C++ adalah strongly-typed language, Anda harus menentukan tipe datanya.

Deklarasi Variabel
// Format: tipe_data nama_variabel = nilai;

int umur = 20;
float suhuRuangan = 25.5;

void setup() {
  // Mengubah nilai variabel
  umur = 21; 
}
2

Konstanta (#define dan const)

Mendefinisikan Konstanta
// Konstanta adalah nilai yang TIDAK BISA diubah saat program berjalan
// Sangat berguna untuk mendefinisikan nomor PIN

// Cara 1: Menggunakan #define (Pre-processor directive, tidak pakai ; di akhir)
#define LED_MERAH 2
#define SENSOR_PIN 34

// Cara 2: Menggunakan keyword const
const int ledHijau = 4;
const float PI = 3.14159;

5. Tipe Data

1

Tipe Data Numerik

Angka
int jumlahOrang = 100;     // Bilangan bulat (-32768 hingga 32767 di Arduino Uno)
long jarakBintang = 99999; // Bilangan bulat yang lebih panjang
float suhu = 36.5;         // Bilangan desimal (pecahan)
double presisiTinggi = 1.234567; // Desimal lebih presisi

// Operasi matematika dasar: +, -, *, /, % (modulo)
int hasil = 10 + 5; // 15
2

Tipe Data Boolean & Karakter

Bool & Char
bool lampuMenyala = true;  // Hanya true(1) atau false(0)
bool adaGerakan = false;

char huruf = 'A';          // Satu karakter tunggal (gunakan petik satu)

// String (Teks / Kumpulan Karakter) - Perhatikan huruf 'S' besar
String pesan = "Halo IoT!"; // Gunakan petik ganda
String ssidWiFi = "HomeNetwork";

6. Pin Input & Output

pinMode()

Menentukan apakah pin sebagai INPUT (sensor) atau OUTPUT (aktuator)

digitalWrite()

Memberi tegangan HIGH (5V/3.3V) atau LOW (0V) pada pin digital

digitalRead()

Membaca status pin digital (apakah sedang HIGH atau LOW)

analogRead()

Membaca nilai sensor analog (tegangan bervariasi) menjadi angka 0-1023 / 0-4095

1

Mengendalikan Output (Contoh: Blinking LED)

Digital Output
const int pinLed = 13;

void setup() {
  // Set pin 13 sebagai arus keluar (OUTPUT)
  pinMode(pinLed, OUTPUT);
}

void loop() {
  digitalWrite(pinLed, HIGH); // Nyalakan LED (Beri tegangan)
  delay(1000);                // Jeda 1000 milidetik (1 detik)
  digitalWrite(pinLed, LOW);  // Matikan LED (Putus tegangan)
  delay(1000);                // Jeda 1 detik
}
2

Membaca Input (Contoh: Tombol / Push Button)

Digital Input
const int pinTombol = 2;
const int pinLed = 13;
int statusTombol = 0;

void setup() {
  pinMode(pinLed, OUTPUT);
  pinMode(pinTombol, INPUT_PULLUP); // INPUT_PULLUP mencegah pin mengambang/floating
}

void loop() {
  statusTombol = digitalRead(pinTombol); // Baca status tombol
  
  // Logika: Jika ditekan (LOW karena pull-up), nyalakan LED
  if (statusTombol == LOW) {
    digitalWrite(pinLed, HIGH);
  } else {
    digitalWrite(pinLed, LOW);
  }
}
3

Membaca Sensor Analog (LDR, Potensiometer, Kelembaban Tanah)

Analog Input
const int pinSensor = A0; // Gunakan pin Analog (A0, A1, dll)
int nilaiSensor = 0;

void setup() {
  // Pin analog tidak wajib di-declare pinMode-nya
}

void loop() {
  // analogRead mengembalikan nilai 0-1023 (Arduino Uno 10-bit ADC)
  // atau 0-4095 (ESP32 12-bit ADC)
  nilaiSensor = analogRead(pinSensor);
  
  delay(500);
}

7. Kontrol Alur (Logika)

1

If, Elseif, Else

Percabangan If
int suhu = 32;

if (suhu > 30) {
  // Dijalankan jika suhu di atas 30
  digitalWrite(pinKipas, HIGH);
} else if (suhu < 20) {
  // Dijalankan jika suhu di bawah 20
  digitalWrite(pinKipas, LOW);
  digitalWrite(pinPemanas, HIGH);
} else {
  // Dijalankan jika kondisi di atas tidak ada yang terpenuhi
  digitalWrite(pinKipas, LOW);
  digitalWrite(pinPemanas, LOW);
}

// Operator Logika: && (AND), || (OR), ! (NOT)
if (suhu > 30 && kelembaban < 50) {
  // Suhu panas DAN kering
}
2

Perulangan (Loop For & While)

Looping
void setup() {
  // For Loop (Berguna untuk inisialisasi banyak pin sekaligus)
  // Sintaks: for(nilai_awal; kondisi_batas; increment)
  for (int i = 2; i <= 6; i++) {
    pinMode(i, OUTPUT);
  }

  // While Loop (Berulang selama kondisi terpenuhi)
  int hitung = 0;
  while (hitung < 5) {
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
    delay(100);
    hitung++; // Tambah 1
  }
}
3

Delay vs Millis (Time Management)

Manajemen Waktu
// delay(ms) menghentikan SELURUH proses mikrokontroler.
// Untuk multitasking IoT, gunakan millis() (Waktu sejak board menyala).

unsigned long waktuSebelumnya = 0;
const long interval = 1000; // 1 detik
int statusLed = LOW;

void loop() {
  unsigned long waktuSekarang = millis();

  if (waktuSekarang - waktuSebelumnya >= interval) {
    waktuSebelumnya = waktuSekarang; // Reset timer

    // Toggle LED tanpa mem-pause program (Blink without delay)
    if (statusLed == LOW) statusLed = HIGH;
    else statusLed = LOW;
    
    digitalWrite(13, statusLed);
  }
  
  // Program lain tetap bisa berjalan disini tanpa terhalang delay!
}

8. Komunikasi Serial (Debugging)

Serial Monitor adalah jembatan komunikasi antara mikrokontroler dan komputer Anda. Sangat penting untuk melihat hasil pembacaan sensor atau mencari error (debugging).

1

Menulis ke Serial Monitor

Serial Print
void setup() {
  // Mulai komunikasi serial dengan baudrate 9600 bps
  Serial.begin(9600); 
  
  // Tunggu serial siap (khusus beberapa board)
  while (!Serial) { ; } 
  
  Serial.println("Sistem IoT Dimulai!");
}

void loop() {
  int nilaiSensor = analogRead(A0);
  
  // Print tanpa enter
  Serial.print("Nilai Sensor: "); 
  // Print dengan enter/baris baru di akhir
  Serial.println(nilaiSensor);    
  
  delay(1000);
}

9. Membuat Fungsi Custom

1

Fungsi Void dan Return

Fungsi membantu merapikan kode agar `loop()` tidak terlalu penuh.

Custom Functions
// 1. Fungsi Void (Tidak mengembalikan nilai)
void kedipkanLed(int pin, int kecepatan) {
  digitalWrite(pin, HIGH);
  delay(kecepatan);
  digitalWrite(pin, LOW);
  delay(kecepatan);
}

// 2. Fungsi Return (Mengembalikan hasil proses)
float ubahKeCelcius(int dataAnalog) {
  // Contoh rumus fiktif konversi ADC ke Suhu
  float voltase = dataAnalog * (5.0 / 1023.0);
  float celcius = voltase * 100;
  return celcius; // Kirim nilai kembali
}

void loop() {
  // Memanggil fungsi void
  kedipkanLed(13, 500); 
  
  // Memanggil fungsi return
  int bacaan = analogRead(A0);
  float suhuSekarang = ubahKeCelcius(bacaan);
  
  Serial.println(suhuSekarang);
}

Kesimpulan dan Langkah Berikutnya

1

Ringkasan Materi

  • Konsep mikrokontroler dan struktur setup() & loop()
  • Sintaks dasar C++ untuk Arduino
  • Variabel, Tipe Data numerik, boolean, dan String
  • Kontrol Pin Digital (digitalWrite, digitalRead) & Analog (analogRead)
  • Logika kontrol (If-else, For, While) dan multitasking (Millis)
  • Debugging menggunakan Serial Monitor
  • Modularisasi program menggunakan Fungsi
2

Langkah Selanjutnya (Menuju IoT Sebenarnya)

Setelah menguasai dasar pemrograman board, saatnya menghubungkannya ke internet!

  1. Koneksi WiFi: Pelajari library WiFi.h untuk ESP32/ESP8266.
  2. Protokol Komunikasi: Pelajari MQTT (Message Queuing Telemetry Transport) & HTTP GET/POST.
  3. Format Data: Pelajari format JSON untuk bertukar data sensor.
  4. Platform IoT (Cloud): Integrasikan dengan platform seperti Blynk, Thingspeak, atau Ubidots.
  5. Web Server Lokal: Buat dashboard langsung dari mikrokontroler Anda.
  6. Database: Kirim data sensor ke MySQL/Firebase.
3

Resources Berguna

Link Dokumentasi & Belajar
Official Arduino Reference:
https://www.arduino.cc/reference/en/

Random Nerd Tutorials (ESP32/ESP8266 Best Resource):
https://randomnerdtutorials.com/

Wokwi (Arduino/ESP Simulator Online):
https://wokwi.com/

Tinkercad Circuits:
https://www.tinkercad.com/circuits