☀️Siang
IoT

Cheatsheet ESP32 & IoT: Referensi Cepat Pinout, Command, dan Sensor

GRATIS

Referensi cepat lengkap ESP32 — pinout, Arduino IDE, WiFi, MQTT, BLE, sensor, GPIO, dan MicroPython dalam satu halaman



1. Pinout ESP32 DevKit V1

💡 Tips

Pin yang aman digunakan: GPIO 2, 4, 5, 12-19, 21-23, 25-27, 32-33. Hindari GPIO 0, 1, 3, 6-11, 34-39 (input only / reserved).

GPIOFungsiKeterangan
GPIO 0Boot ModePull HIGH saat boot, bisa output LOW setelah boot
GPIO 1TX0 (UART)Jangan gunakan jika pakai Serial Monitor
GPIO 2LED Built-inOutput HIGH = LED menyala (DevKit)
GPIO 3RX0 (UART)Jangan gunakan jika pakai Serial Monitor
GPIO 4ADC2_CH0Aman digunakan, mendukung PWM
GPIO 5SS (SPI)Aman digunakan, pull-up default saat boot
GPIO 12ADC2_CH5HATI-HATI: harus LOW saat boot atau ESP32 gagal start
GPIO 13ADC2_CH4Aman digunakan
GPIO 14ADC2_CH6Aman digunakan, mendukung PWM
GPIO 15ADC2_CH3Debug log output saat boot
GPIO 16UART2 RXAman digunakan
GPIO 17UART2 TXAman digunakan
GPIO 18SPI CLKAman digunakan
GPIO 19SPI MISOAman digunakan
GPIO 21I2C SDAAman digunakan
GPIO 22I2C SCLAman digunakan
GPIO 23SPI MOSIAman digunakan
GPIO 25DAC1Output analog, ADC2
GPIO 26DAC2Output analog, ADC2
GPIO 27ADC2_CH7Aman digunakan
GPIO 32ADC1_CH4Aman, bisa baca analog
GPIO 33ADC1_CH5Aman, bisa baca analog
GPIO 34ADC1_CH6INPUT ONLY — tidak bisa output
GPIO 35ADC1_CH7INPUT ONLY — tidak bisa output
GPIO 36SVP / ADC1_CH0INPUT ONLY — tidak bisa output
GPIO 39SVN / ADC1_CH3INPUT ONLY — tidak bisa output

2. Arduino IDE Command & Setup

Board Manager URL

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Fungsi Dasar Arduino ESP32

FungsiKeteranganContoh
pinMode(pin, mode)Atur mode pinpinMode(2, OUTPUT)
digitalWrite(pin, val)Tulis HIGH/LOWdigitalWrite(2, HIGH)
digitalRead(pin)Baca pin digitalint val = digitalRead(4)
analogRead(pin)Baca ADC (0-4095)int val = analogRead(34)
analogWrite(pin, val)Output PWM (0-255)analogWrite(2, 128)
ledcSetup(ch, freq, res)Setup LED PWM channelledcSetup(0, 5000, 8)
ledcAttachPin(pin, ch)Attach pin ke PWM channelledcAttachPin(2, 0)
ledcWrite(ch, duty)Tulis duty cycle PWMledcWrite(0, 128)
delay(ms)Tunggu dalam milidetikdelay(1000)
millis()Waktu sejak boot (ms)unsigned long t = millis()

3. WiFi Connection

#include <WiFi.h>

const char* ssid = "NamaWiFi";
const char* password = "PasswordWiFi";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("\nWiFi Connected!");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Cek koneksi WiFi
  if (WiFi.status() != WL_CONNECTED) {
    WiFi.reconnect();
  }
}

Fungsi WiFi Berguna

FungsiKeterangan
WiFi.begin(ssid, pass)Mulai koneksi WiFi
WiFi.status()Cek status koneksi
WiFi.localIP()Dapatkan IP address
WiFi.disconnect()Putuskan koneksi
WiFi.reconnect()Sambung ulang
WiFi.macAddress()Dapatkan MAC address
WiFi.scanNetworks()Scan jaringan sekitar
WiFi.mode(WIFI_STA)Set mode Station
WiFi.mode(WIFI_AP)Set mode Access Point
WiFi.softAP(ssid, pass)Buat Access Point

4. MQTT Client (PubSubClient)

#include <WiFi.h>
#include <PubSubClient.h>

const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* topic_pub = "esp32/suhu";
const char* topic_sub = "esp32/relay";

WiFiClient espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length) {
  String message;
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }
  Serial.print("Pesan dari ");
  Serial.print(topic);
  Serial.print(": ");
  Serial.println(message);
}

void reconnect() {
  while (!client.connected()) {
    String clientId = "ESP32-" + String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      client.subscribe(topic_sub);
      Serial.println("MQTT Connected!");
    } else {
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin("SSID", "PASSWORD");
  while (WiFi.status() != WL_CONNECTED) delay(500);
  
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();
  
  // Publish data setiap 5 detik
  static unsigned long lastMsg = 0;
  if (millis() - lastMsg > 5000) {
    lastMsg = millis();
    float suhu = 25.5; // Ganti dengan bacaan sensor
    client.publish(topic_pub, String(suhu, 1).c_str());
  }
}

Fungsi PubSubClient

FungsiKeterangan
client.setServer(host, port)Atur broker MQTT
client.connect(id)Hubungkan ke broker
client.publish(topic, msg)Kirim pesan
client.subscribe(topic)Subscribe topik
client.setCallback(fn)Atur fungsi callback
client.loop()Proses pesan (wajib di loop)
client.connected()Cek status koneksi
client.disconnect()Putuskan koneksi

5. Bluetooth Low Energy (BLE)

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#define SERVICE_UUID        "12345678-1234-1234-1234-123456789abc"
#define CHARACTERISTIC_UUID "abcdefab-1234-1234-1234-abcdefabcdef"

BLEServer *pServer = NULL;
BLECharacteristic *pCharacteristic = NULL;
bool deviceConnected = false;

class MyServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer* pServer) { deviceConnected = true; }
  void onDisconnect(BLEServer* pServer) { deviceConnected = false; }
};

void setup() {
  Serial.begin(115200);
  BLEDevice::init("ESP32-BLE");
  
  pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  
  BLEService *pService = pServer->createService(SERVICE_UUID);
  
  pCharacteristic = pService->createCharacteristic(
    CHARACTERISTIC_UUID,
    BLECharacteristic::PROPERTY_READ |
    BLECharacteristic::PROPERTY_WRITE |
    BLECharacteristic::PROPERTY_NOTIFY
  );
  
  pCharacteristic->addDescriptor(new BLE2902());
  pService->start();
  
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->start();
  
  Serial.println("BLE Ready! Waiting for connections...");
}

void loop() {
  if (deviceConnected) {
    String data = "Suhu: 25.5°C";
    pCharacteristic->setValue(data.c_str());
    pCharacteristic->notify();
    delay(2000);
  }
}

6. Sensor DHT11 / DHT22

Wiring

Pin DHTESP32Keterangan
VCC (+)3.3VPower supply
DATAGPIO 4Tambah pull-up 10kΩ ke 3.3V
GND (-)GNDGround
#include <DHT.h>

#define DHTPIN 4
#define DHTTYPE DHT11   // Ganti DHT22 jika perlu

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
}

void loop() {
  float suhu = dht.readTemperature();
  float kelembaban = dht.readHumidity();
  
  if (isnan(suhu) || isnan(kelembaban)) {
    Serial.println("Gagal membaca sensor DHT!");
    return;
  }
  
  Serial.print("Suhu: ");
  Serial.print(suhu);
  Serial.print("°C | Kelembaban: ");
  Serial.print(kelembaban);
  Serial.println("%");
  
  delay(2000);
}

7. Sensor Ultrasonic HC-SR04

Wiring

Pin HC-SR04ESP32
VCC5V (atau 3.3V tergantung modul)
TRIGGPIO 5
ECHOGPIO 18 (pakai voltage divider jika 5V)
GNDGND
#define TRIG_PIN 5
#define ECHO_PIN 18

void setup() {
  Serial.begin(115200);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

float bacaJarak() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  long durasi = pulseIn(ECHO_PIN, HIGH);
  float jarak = durasi * 0.034 / 2; // cm
  return jarak;
}

void loop() {
  float jarak = bacaJarak();
  Serial.print("Jarak: ");
  Serial.print(jarak);
  Serial.println(" cm");
  delay(500);
}

8. Sensor LDR (Cahaya)

Wiring (Voltage Divider)

KomponenKoneksi
LDR3.3V → LDR → GPIO 34
Resistor 10kΩGPIO 34 → 10kΩ → GND
#define LDR_PIN 34

void setup() {
  Serial.begin(115200);
  analogReadResolution(12); // 0-4095
}

void loop() {
  int nilaiLDR = analogRead(LDR_PIN);
  // Konversi ke persen (terbalik: gelap = nilai tinggi)
  int persenCahaya = map(nilaiLDR, 0, 4095, 100, 0);
  
  Serial.print("Raw: ");
  Serial.print(nilaiLDR);
  Serial.print(" | Cahaya: ");
  Serial.print(persenCahaya);
  Serial.println("%");
  
  delay(1000);
}

9. Referensi Cepat GPIO

KategoriPinCatatan
ADC1 (aman saat WiFi)32, 33, 34, 35, 36, 39Hanya baca analog
ADC2 (tidak saat WiFi)4, 12-15, 25-27Konflik dengan WiFi
DAC (analog output)25, 26Output 0-3.3V
Touch Sensor0, 2, 4, 12-15, 27, 32, 33Deteksi sentuhan kapasitif
I2C (default)SDA=21, SCL=22Wire.begin()
SPI (default)MOSI=23, MISO=19, CLK=18, CS=5SPI.begin()
UART0 (Serial)TX=1, RX=3Serial Monitor
UART1TX=10, RX=9Internal flash
UART2TX=17, RX=16Serial2
Input Only34, 35, 36, 39Tidak bisa jadi output
Boot-sensitive0, 2, 5, 12, 15Perlu level tertentu saat boot

10. MicroPython ESP32

Flash MicroPython

# Download firmware dari micropython.org
esptool.py --chip esp32 --port COM3 erase_flash
esptool.py --chip esp32 --port COM3 write_flash -z 0x1000 firmware.bin

GPIO & LED Blink

from machine import Pin
import time

led = Pin(2, Pin.OUT)

while True:
    led.value(not led.value())
    time.sleep(1)

WiFi di MicroPython

import network

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("NamaWiFi", "Password")

while not wlan.isconnected():
    time.sleep(0.5)

print("IP:", wlan.ifconfig()[0])

MQTT di MicroPython

from umqtt.simple import MQTTClient

client = MQTTClient("esp32", "broker.hivemq.com")
client.connect()
client.publish(b"esp32/data", b"Hello MQTT!")
client.set_callback(lambda t, m: print(t, m))
client.subscribe(b"esp32/cmd")

while True:
    client.check_msg()
    time.sleep(1)

Bacaan Analog di MicroPython

from machine import ADC, Pin

adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)  # Range 0-3.3V
adc.width(ADC.WIDTH_12BIT) # 0-4095

while True:
    nilai = adc.read()
    print("ADC:", nilai)
    time.sleep(0.5)
← Sebelumnya Tutorial ESP32 Lengkap Selanjutnya → Artikel Lainnya
🔍 Zoom
100%
🎨 Tema