Chapter 3: Program Pertama (Blink LED)
Sekarang kita akan membuat program pertama kita dari nol dan memahami setiap barisnya. Program klasik untuk pemula: Blink LED!
Struktur Program ESP32
Setiap program ESP32 di Arduino IDE memiliki 2 fungsi wajib:
void setup() {
// Code yang dijalankan SEKALI saat ESP32 booting
}
void loop() {
// Code yang dijalankan BERULANG-ULANG selamanya
}
Analogi:
setup()= Persiapan sebelum masak (cuci tangan, siapkan bahan)loop()= Masak terus menerus tanpa henti
Program Blink LED
Buat file baru dan ketik code ini:
// Pin LED onboard ESP32
#define LED_PIN 2
void setup() {
// Set pin LED sebagai OUTPUT
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
delay(1000); // Tunggu 1 detik (1000ms)
digitalWrite(LED_PIN, LOW); // Matikan LED
delay(1000); // Tunggu 1 detik
}
Penjelasan Code
1. Define Pin
#define LED_PIN 2
#define= Buat konstanta (variable yang tidak berubah)LED_PIN= Nama konstanta kita2= GPIO pin 2 (LED onboard ESP32)
Kenapa pakai define?
- Code lebih readable
- Mudah diganti jika pakai pin lain
- Tidak makan memory (compile time replacement)
2. Setup Function
void setup() {
pinMode(LED_PIN, OUTPUT);
}
pinMode()= Set mode GPIO pin- Parameter 1: Pin yang diset (LED_PIN = 2)
- Parameter 2: Mode pin (OUTPUT atau INPUT)
OUTPUT = Pin bisa mengirim sinyal (HIGH/LOW) INPUT = Pin bisa menerima sinyal dari sensor/button
3. Loop Function
void loop() {
digitalWrite(LED_PIN, HIGH); // Nyalakan LED
delay(1000); // Tunggu 1 detik
digitalWrite(LED_PIN, LOW); // Matikan LED
delay(1000); // Tunggu 1 detik
}
digitalWrite():
- Mengirim sinyal HIGH (3.3V) atau LOW (0V) ke pin
HIGH= Nyalakan LEDLOW= Matikan LED
delay():
- Pause program untuk beberapa milliseconds
delay(1000)= 1 detikdelay(500)= 0.5 detik
Upload & Test
- Ketik code di atas
- Klik
Verify(icon centang) untuk check error - Klik
Upload(icon panah) - Tunggu hingga upload selesai
- LED onboard harusnya berkedip setiap 1 detik!
Experiment Time! ๐งช
Experiment 1: Ubah Kecepatan Blink
Coba ubah delay() values:
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(100); // Cepat!
digitalWrite(LED_PIN, LOW);
delay(100);
}
Hasilnya: LED berkedip cepat (10x per detik)
Experiment 2: Pola SOS (Morse Code)
void loop() {
// S = 3 short blinks
for(int i=0; i<3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
delay(400);
// O = 3 long blinks
for(int i=0; i<3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(600);
digitalWrite(LED_PIN, LOW);
delay(200);
}
delay(400);
// S = 3 short blinks
for(int i=0; i<3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
delay(2000); // Pause sebelum repeat
}
Hasilnya: LED blink pola SOS!
Experiment 3: Fade LED (PWM)
Buat LED nyala dengan brightness yang berubah-ubah:
#define LED_PIN 2
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// Fade in (0 โ 255)
for(int brightness = 0; brightness <= 255; brightness++) {
analogWrite(LED_PIN, brightness);
delay(5);
}
// Fade out (255 โ 0)
for(int brightness = 255; brightness >= 0; brightness--) {
analogWrite(LED_PIN, brightness);
delay(5);
}
}
Hasilnya: LED fade in/out smooth!
Menambah External LED
Sekarang kita coba pakai LED external:
Hardware Setup:
ESP32 Pin 4 โโโโโโโ
โ
โโโโ LED (Anode/+)
โ
โโโโ Resistor 220ฮฉ
โ
โโโโ GND
Wiring:
- Kaki panjang LED (anode/+) โ GPIO 4
- Kaki pendek LED (cathode/-) โ Resistor 220ฮฉ โ GND
Code:
#define INTERNAL_LED 2 // LED onboard
#define EXTERNAL_LED 4 // LED external
void setup() {
pinMode(INTERNAL_LED, OUTPUT);
pinMode(EXTERNAL_LED, OUTPUT);
}
void loop() {
// Blink alternate
digitalWrite(INTERNAL_LED, HIGH);
digitalWrite(EXTERNAL_LED, LOW);
delay(500);
digitalWrite(INTERNAL_LED, LOW);
digitalWrite(EXTERNAL_LED, HIGH);
delay(500);
}
Hasilnya: Kedua LED blink bergantian!
Serial Monitor untuk Debugging
Tambahkan Serial.print() untuk debugging:
#define LED_PIN 2
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200); // Start serial communication
Serial.println("ESP32 Blink Program Started!");
}
void loop() {
Serial.println("LED ON");
digitalWrite(LED_PIN, HIGH);
delay(1000);
Serial.println("LED OFF");
digitalWrite(LED_PIN, LOW);
delay(1000);
}
Cara lihat Serial Monitor:
- Upload code
- Buka
ToolsโSerial Monitor - Set baud rate: 115200
- Harusnya muncul text “LED ON” dan “LED OFF” bergantian
Common Mistakes & Fixes
โ LED Tidak Nyala
Penyebab:
- Pin salah (cek pinout ESP32)
- Wiring terbalik (cek polaritas LED)
- Resistor terlalu besar (> 1kฮฉ)
Solusi:
- Coba pin lain
- Balik kaki LED
- Pakai resistor 220ฮฉ atau 330ฮฉ
โ LED Redup
Penyebab:
- Resistor terlalu besar
Solusi:
- Kurangi nilai resistor (min 220ฮฉ untuk safety)
โ ESP32 Restart Terus
Penyebab:
- Short circuit
- Power tidak cukup
Solusi:
- Check wiring
- Gunakan USB port langsung (bukan USB hub)
Best Practices
- Selalu pakai resistor untuk LED (220ฮฉ - 1kฮฉ)
- Check polaritas LED (kaki panjang = positive)
- Use meaningful names untuk variables
- Add comments untuk code yang kompleks
- Test incrementally - jangan langsung code banyak
Kesimpulan
Sekarang Anda sudah bisa:
โ Membuat program blink LED โ Memahami struktur setup() dan loop() โ Menggunakan pinMode(), digitalWrite(), delay() โ Menambahkan external LED โ Debugging dengan Serial Monitor โ Experiment dengan berbagai pola blink
Di chapter selanjutnya, kita akan belajar GPIO lebih dalam: Input (Button) dan Output (Multiple LEDs).
Previous: โ Chapter 2 - Setup Environment Next: Chapter 4 - GPIO Input & Output โ