Rabu, 12 November 2025

Wi-Fi hotspot dengan captive portal

ESP32 yang dikonfigurasi sebagai Wi-Fi hotspot dengan captive portal bekerja dengan cara membuat jaringan lokal mandiri yang dapat diakses oleh perangkat lain. Ketika ESP32 diaktifkan dalam mode Access Point (AP), ia memancarkan sinyal Wi-Fi dengan nama SSID tertentu, misalnya "ESP32_Hotspot". Perangkat yang terhubung ke jaringan ini akan diarahkan ke halaman web lokal melalui mekanisme DNS spoofing, di mana semua permintaan domain dialihkan ke alamat IP ESP32 menggunakan library DNSServer. Web server yang berjalan di ESP32 kemudian menangani permintaan HTTP dan menampilkan halaman HTML yang telah diprogram, seperti halaman sambutan atau formulir input. Dengan cara ini, pengguna yang terhubung ke hotspot akan otomatis melihat halaman portal tanpa perlu mengetik alamat tertentu, mirip seperti sistem login Wi-Fi publik di kafe atau hotel.

Source code lengkap untuk ESP32 yang berfungsi sebagai Wi-Fi hotspot dengan captive portal yang mengarahkan pengguna ke halaman web lokal:

#include <WiFi.h>
#include <DNSServer.h>
#include <ESPAsyncWebServer.h>
#include <AsyncTCP.h>

const byte DNS_PORT = 53;
DNSServer dnsServer;
AsyncWebServer server(80);

// HTML halaman utama
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
  <title>ESP32 Captive Portal</title>
</head>
<body>
  <h1>Selamat Datang di Hotspot ESP32</h1>
  <p>Anda berhasil terhubung ke jaringan lokal.</p>
</body>
</html>
)rawliteral";

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

  // Setup Access Point
  WiFi.softAP("ESP32_Hotspot", "12345678");
  delay(100);
  Serial.println("Hotspot aktif: ESP32_Hotspot");

  // Setup DNS untuk redirect semua domain ke IP ESP32
  dnsServer.start(DNS_PORT, "*", WiFi.softAPIP());

  // Setup Web Server
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html);
  });

  // Redirect semua permintaan ke halaman utama
  server.onNotFound([](AsyncWebServerRequest *request){
    request->redirect("/");
  });

  server.begin();
}

void loop() {
  dnsServer.processNextRequest();
}
https://github.com/lacamera/ESPAsyncWebServer

Selasa, 11 November 2025

Pemrograman dan Proyek IoT dengan ESP32

๐Ÿงญ Bagian 1: Pengenalan dan Dasar-Dasar

  1. Apa Itu ESP32?

    • Sejarah dan evolusi dari ESP8266

    • Keunggulan ESP32 dibanding mikrokontroler lain

  2. Spesifikasi Teknis ESP32

    • CPU, memori, konektivitas, GPIO

    • Modul populer: ESP32-WROOM, ESP32-CAM, dll

  3. Lingkungan Pengembangan

    • Instalasi Arduino IDE

    • Instalasi ESP-IDF (opsional untuk pengguna lanjutan)

    • Pemilihan board dan port

๐Ÿ”Œ Bagian 2: Pemrograman Dasar

  1. Blink LED: Program Pertama

    • Penjelasan kode

    • Upload dan troubleshooting

  2. GPIO dan Sensor Digital

    • Membaca tombol, mengontrol LED

    • Sensor PIR, sensor cahaya

  3. Sensor Analog dan ADC

    • Membaca potensiometer, sensor suhu analog

  4. PWM dan Kontrol Aktuator

    • Kendali motor DC, buzzer, LED RGB

๐Ÿ“ก Bagian 3: Konektivitas

  1. Wi-Fi dan Web Server

    • Menghubungkan ke Wi-Fi

    • Membuat web server lokal

  2. Bluetooth dan BLE

    • Perbedaan BLE dan Bluetooth klasik

    • Membuat BLE server dan client

  3. HTTP dan MQTT

    • Kirim data ke server (ThingSpeak, Firebase)

    • Komunikasi IoT dengan MQTT

๐Ÿง  Bagian 4: Proyek Praktis

  1. Stasiun Cuaca Pintar

    • Sensor DHT11/DHT22 + ESP32 + ThingSpeak

  2. Kontrol Lampu via Smartphone

    • BLE + relai + aplikasi Android

  3. Sistem Keamanan Rumah

    • Sensor gerak + kamera ESP32-CAM + notifikasi

  4. Data Logger ke MicroSD dan Cloud

    • Penyimpanan lokal dan sinkronisasi

๐Ÿ› ️ Bagian 5: Tips Lanjutan dan Troubleshooting

  1. Debugging dan Serial Monitor

    • Teknik membaca output dan error

  2. Manajemen Daya dan Sleep Mode

    • Deep sleep, light sleep, dan penghematan energi

  3. Integrasi dengan Platform IoT

    • Blynk, Home Assistant, Node-RED

๐Ÿ“š Lampiran

  • Referensi pustaka dan dokumentasi resmi

  • Daftar komponen dan toko rekomendasi

  • Template kode dan proyek siap pakai

Simple Wifi Server

 /*
 WiFi Web Server LED Blink

 A simple web server that lets you blink an LED via the web.
 This sketch will print the IP address of your WiFi Shield (once connected)
 to the Serial monitor. From there, you can open that address in a web browser
 to turn on and off the LED on pin 5.

 If the IP address of your shield is yourAddress:
 http://yourAddress/H turns the LED on
 http://yourAddress/L turns it off

 This example is written for a network using WPA2 encryption. For insecure
 WEP or WPA, change the Wifi.begin() call and use Wifi.setMinSecurity() accordingly.

 Circuit:
 * WiFi shield attached
 * LED attached to pin 5

 created for arduino 25 Nov 2012
 by Tom Igoe

ported for sparkfun esp32
31.01.2017 by Jan Hendrik Berlin

 */

#include <WiFi.h>

const char *ssid = "yourssid";
const char *password = "yourpasswd";

NetworkServer server(80);

void setup() {
  Serial.begin(115200);
  pinMode(5, OUTPUT);  // set the LED pin mode

  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  server.begin();
}

void loop() {
  NetworkClient client = server.accept();  // listen for incoming clients

  if (client) {                     // if you get a client,
    Serial.println("New Client.");  // print a message out the serial port
    String currentLine = "";        // make a String to hold incoming data from the client
    while (client.connected()) {    // loop while the client's connected
      if (client.available()) {     // if there's bytes to read from the client,
        char c = client.read();     // read a byte, then
        Serial.write(c);            // print it out the serial monitor
        if (c == '\n') {            // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.<br>");
            client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.<br>");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          } else {  // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(5, HIGH);  // GET /H turns the LED on
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(5, LOW);  // GET /L turns the LED off
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("Client Disconnected.");
  }
}

Board ESP32

 

Board ESP32 terdiri berbagai jenis:

Senin, 10 November 2025

Monitoring Suhu Ruangan Jarak Jauh

 

Studi kasus ini mendemonstrasikan penerapan ESP32 dalam solusi Internet of Things (IoT) yang fungsional, dirancang khusus untuk memantau kondisi lingkungan kritis secara real-time dan memberikan notifikasi instan.
1. Tantangan & Kebutuhan (Latar Belakang Masalah)
Permasalahan utama yang dihadapi adalah risiko overheating pada peralatan sensitif di dalam lemari server tertutup. Kerusakan perangkat keras akibat suhu berlebih adalah ancaman nyata. Kebutuhan spesifik meliputi:
  • Pemantauan Berkelanjutan: Membaca data suhu dan kelembapan secara otomatis dan berkala.
  • Akses Jarak Jauh: Melihat status ruangan dari mana saja melalui internet.
  • Respons Instan: Menerima notifikasi darurat secara otomatis di ponsel jika suhu melebihi ambang batas aman (target: > 30°C).
2. Solusi Proyek (Tujuan)
Tujuan proyek ini adalah merancang dan mengimplementasikan sistem otomatis menggunakan ESP32 yang berfungsi sebagai "penjaga digital" untuk lemari server, dengan kapabilitas utama:
  • Akuisisi data sensor.
  • Transmisi data melalui jaringan Wi-Fi.
  • Visualisasi data pada dashboard IoT.
  • Integrasi sistem peringatan dini melalui aplikasi perpesanan (Telegram).
3. Spesifikasi Teknis (Komponen yang Digunakan)
KomponenDeskripsi & Fungsi
ESP32 Dev BoardMikrokontroler inti yang memproses data dan mengelola koneksi Wi-Fi.
Sensor DHT22Sensor digital presisi untuk mengukur suhu (°C) dan kelembapan (%).
Modul PendukungBreadboard, kabel jumper, dan power supply (adaptor micro-USB) untuk prototipe.
API Telegram BotAntarmuka pemrograman aplikasi cloud yang memfasilitasi pengiriman notifikasi pesan.
Platform IoT (ThingSpeak)Layanan cloud gratis untuk menerima, menyimpan, dan menampilkan data sensor dalam bentuk grafik.
4. Metodologi Implementasi (Langkah Proyek)
Proyek ini dilaksanakan melalui tiga tahapan utama:
A. Perakitan Hardware & Sirkuit:
Sensor DHT22 dihubungkan ke salah satu pin GPIO ESP32. Penggunaan GPIO tunggal ini menyederhanakan perkabelan (hanya 3 pin yang digunakan: VCC, GND, dan Data).
B. Pengembangan Software (Arduino IDE):
  • Menggunakan library Wi-Fi dan DHT yang tersedia di Arduino IDE.
  • Skrip pemrograman fokus pada:
    • Menghubungkan ESP32 ke jaringan Wi-Fi lokal dengan kredensial SSID dan password yang benar.
    • Pengambilan sampel data sensor setiap 30 detik.
    • Mengirim data ke saluran (channel) ThingSpeak melalui permintaan HTTP GET.
C. Integrasi Sistem Peringatan (Telegram API):
  • Sebuah bot Telegram unik dibuat melalui @BotFather untuk mendapatkan token API.
  • Logika kondisional ditambahkan ke kode ESP32: JIKA suhu yang dibaca sensor > 30°C, MAKA ESP32 secara otomatis memicu permintaan HTTP POST ke API Telegram untuk mengirim pesan darurat.
5. Dampak dan Manfaat (Hasil Proyek)
Sistem yang dibangun berhasil memenuhi semua tujuan proyek. Manfaat utama yang diperoleh meliputi:
  • Efisiensi Biaya: Solusi ini jauh lebih murah dibandingkan sistem pemantauan industri yang siap pakai.
  • Ketenangan Pikiran: Pengguna dapat memantau kondisi lemari server dari jarak jauh melalui dashboard web ThingSpeak kapan saja.
  • Respons Cepat: Notifikasi instan Telegram memungkinkan tindakan korektif dilakukan segera setelah suhu kritis terdeteksi, mencegah kerugian finansial akibat kerusakan perangkat keras.
6. Wawasan Utama (Pelajaran dari Studi Kasus)
  • Akselerasi Prototyping: Fitur Wi-Fi terintegrasi pada ESP32 mempercepat pengembangan solusi IoT secara signifikan.
  • Interoperabilitas API: ESP32 berfungsi sebagai jembatan yang kuat antara dunia fisik (sensor) dan layanan cloud (Telegram, ThingSpeak), menunjukkan fleksibilitasnya dalam berinteraksi dengan API standar.
  • Solusi Praktis IoT: Studi kasus ini membuktikan bahwa proyek IoT yang kompleks dapat diimplementasikan dengan komponen off-the-shelf (siap pakai) yang terjangkau.

Penjelasan dan Alur Sistem

1. Fungsi Utama Sistem

Sistem ini berfungsi sebagai "penjaga digital" untuk memantau kondisi lingkungan kritis, khususnya suhu pada lemari server (atau ruangan tertutup lainnya), secara real-time dan dari jarak jauh. Tujuannya adalah mencegah kerusakan perangkat keras akibat overheating dengan menyediakan pemantauan berkelanjutan, visualisasi data, dan respons instan berupa notifikasi darurat.

2. Komponen Kunci

KomponenPeran dalam Sistem
ESP32 Dev BoardBertindak sebagai otak sistem. Membaca data sensor, menjalankan logika kondisional, dan mengelola koneksi Wi-Fi.
Sensor DHT22Input data fisik. Mengukur suhu (°C) dan kelembapan (%) dengan presisi tinggi.
Platform IoT (ThingSpeak)Layanan Cloud & Visualisasi. Menerima data dari ESP32, menyimpannya, dan menampilkannya dalam bentuk grafik yang dapat diakses melalui browser.
API Telegram BotSistem Peringatan. Digunakan untuk memfasilitasi pengiriman pesan darurat (notifikasi) secara otomatis ke ponsel pengguna.
 

3. Alur Kerja Sistem (Metodologi Implementasi)

Sistem ini bekerja melalui siklus tiga tahap yang terus berulang, didukung oleh koneksi internet:

TahapProsesDetail Implementasi
1. Akuisisi Data (Sisi Hardware)ESP32 membaca data lingkungan.Sensor DHT22 dihubungkan ke salah satu pin GPIO ESP32. Skrip Arduino diprogram untuk mengambil sampel data suhu dan kelembapan dari sensor, misalnya, setiap 30 detik.
2. Transmisi & Visualisasi (Cloud)ESP32 mengirim data ke internet.ESP32 terhubung ke jaringan Wi-Fi lokal. Skrip memformat data dan mengirimkannya ke saluran ThingSpeak melalui permintaan HTTP GET (seperti mengirim URL). ThingSpeak menerima data, menyimpannya, dan memperbarui grafik visualisasi.
3. Logika Kondisional & Peringatan (Alert)ESP32 mengambil keputusan dan bertindak cepat.Logika JIKA/MAKA ditanamkan dalam kode: JIKA suhu yang dibaca melebihi ambang batas aman (misalnya, > 30°C), MAKA ESP32 secara otomatis memicu permintaan HTTP POST ke API Telegram Bot untuk mengirim pesan darurat ke ponsel pengguna.
 

 

 

Referensi

Komunikasi Bluetooth dengan ESP32

ESP32 adalah pilihan mikrokontroler yang populer untuk proyek

Ada dua mode Bluetooth utama yang dapat digunakan pada ESP32, masing-masing memiliki fungsi dan skenario penggunaan yang berbeda: Bluetooth Classic dan Bluetooth Low Energy (BLE).


1. Bluetooth Classic (BT)

Bluetooth Classic, juga dikenal sebagai Bluetooth Standard atau BR/EDR, cocok untuk transfer data yang stabil dan berkecepatan tinggi, ideal untuk streaming data besar atau koneksi data yang terus-menerus.

⚙️ Karakteristik Utama

  • Kecepatan Data: Lebih cepat (hingga 2-3 Mbps).

  • Konsumsi Daya: Lebih tinggi, tidak ideal untuk perangkat bertenaga baterai yang kecil.

  • Koneksi: Menggunakan profil spesifik seperti SPP (Serial Port Profile) untuk komunikasi serial nirkabel.

๐Ÿ’ป Contoh Penggunaan (Profil SPP)

Dalam mode ini, ESP32 bertindak seperti kabel serial nirkabel, memungkinkan komunikasi dua arah dengan perangkat lain (misalnya, aplikasi kontrol di ponsel).

FungsiDeskripsi
ServerESP32 menunggu koneksi dari klien (misalnya, ponsel).
KlienESP32 mencari dan terhubung ke perangkat Bluetooth lain.

๐Ÿ“– Cara Kerja Skrip Ini

  1. Inklusi Library: Memanggil semua library yang diperlukan untuk fungsi BLE.

  2. UUID: SERVICE_UUID dan CHARACTERISTIC_UUID adalah alamat unik (ID) data yang digunakan oleh klien untuk menemukan service dan data yang ditawarkan oleh ESP32.

  3. Setup (Inisialisasi):

    • ESP32 menginisialisasi dirinya sebagai perangkat BLE.

    • Membuat BLE Server yang dapat menerima koneksi.

    • Membuat Service dan Characteristic di bawah server tersebut, mendefinisikan bahwa Characteristic tersebut bisa dibaca, ditulis, dan memberi notifikasi (notify).

    • Mulai Advertising (beriklan) sehingga smartphone atau perangkat BLE lain dapat melihat ESP32.

  4. Loop (Pengiriman Data):

    • Setiap 2 detik, jika ada klien yang terhubung (deviceConnected == true), nilai value (counter) diubah menjadi string.

    • pCharacteristic->setValue(txString); dan pCharacteristic->notify(); digunakan untuk memperbarui nilai dan mengirimkan pembaruan (notification) ke klien secara real-time.

๐Ÿ’ก Untuk Menguji Kode Ini:

  1. Pastikan Anda telah menginstal board ESP32 di Arduino IDE.

  2. Upload skrip ke ESP32 Anda.

  3. Gunakan aplikasi scanner BLE di smartphone Anda (seperti nRF Connect atau BLE Scanner) untuk menemukan perangkat bernama "ESP32_BLE_Counter" dan membaca Characteristic di dalamnya.

 

๐Ÿ“š Referensi

Untuk memulai pemrograman komunikasi Bluetooth pada ESP32, Anda akan membutuhkan sumber daya berikut:

  1. Dokumentasi Resmi ESP-IDF: Dokumentasi framework pengembangan Espressif Systems yang menyediakan detail mendalam tentang implementasi Bluetooth Classic dan BLE.

  2. Arduino Core for the ESP32: Repositori GitHub yang menyediakan library seperti BluetoothSerial.h dan BLEDevice.h.

  3. Arduino IDE Software: Lingkungan pengembangan untuk menulis dan mengunggah kode ke ESP32.

Internet Radio ESP32 Tanpa Amplifier, DAC, dan Display

Pendahuluan

ESP32 adalah mikrokontroler pilihan terbaik untuk proyek Internet of Things (IoT) berbasis audio, berkat chip Wi-Fi dan kemampuan pemrosesan suara yang memadai. Proyek Internet Radio ini memungkinkan ESP32 terhubung ke stasiun radio online dan melakukan streaming audio.

Tutorial ini berfokus pada pendekatan minimalis dan hemat biaya, memungkinkan Anda membangun radio yang berfungsi hanya dengan board ESP32 dan speaker sederhana, tanpa perlu Digital-to-Analog 


1. Persiapan dan Komponen

Proyek ini menggunakan library audio yang memanfaatkan kemampuan Internal DAC atau I2S (Inter-IC Sound) ESP32, sehingga meminimalkan jumlah komponen.

1.1. Komponen Hardware

KomponenKeteranganFungsi Utama
ESP32 Dev ModuleTipe apa pun (DevKit V1, NodeMCU-32S, dll.).Otak pemrosesan dan koneksi Wi-Fi.
Kartu MicroSD & AdapterDiperlukan untuk menyimpan file konfigurasi stasiun radio.Menyimpan data konfigurasi.
Speaker atau HeadphoneSpeaker kecil 4-8 Ohm atau headphone biasa.Output suara.
Kabel Jumper & BreadboardUntuk menghubungkan speaker ke pin ESP32.Koneksi sirkuit.

#include <WiFi.h>
#include "Audio.h" // Asumsi menggunakan library 'Audio' yang umum
#include "SD.h"

// --- KONFIGURASI WIFI & SD CARD ---
const char* ssid = "NAMA_WIFI_ANDA";
const char* password = "PASSWORD_WIFI_ANDA";
// Pin SD Card (dapat bervariasi)
#define SD_CS_PIN 5 

// Objek Audio dan pin output I2S/DAC
Audio audio; 

void setup() {
  Serial.begin(115200);
  
  // 1. Inisialisasi Wi-Fi
  Serial.print("Menghubungkan ke Wi-Fi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nTerhubung! IP: " + WiFi.localIP().toString());

  // 2. Inisialisasi SD Card
  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("Gagal Inisialisasi Kartu SD!");
    // Tambahkan penanganan error
    return;
  }
  Serial.println("Kartu SD terinisialisasi.");

  // 3. Konfigurasi Audio
  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT); // Ganti dengan pin I2S yang benar
  audio.setVolume(5); // Atur volume (0-21)
  
  // 4. Baca URL dari SD Card dan Mulai Streaming
  // Misalnya, membaca file 'radio.txt'
  File radioFile = SD.open("/radio.txt");
  if (radioFile) {
    String url = radioFile.readStringUntil('\n');
    url.trim();
    Serial.println("Streaming dari URL: " + url);
    audio.connecttohost(url.c_str());
    radioFile.close();
  } else {
    Serial.println("File radio.txt tidak ditemukan di SD Card.");
  }
}

void loop() {
  audio.loop(); // Fungsi wajib untuk menjaga buffer audio tetap berjalan
}

// Tambahkan handler callback audio (penting untuk library audio)
void audio_info(const char *info){
  Serial.print("INFO: "); Serial.println(info);
}
// ... [Tambahkan callback audio lainnya]

 

4. Troubleshooting (Pemecahan Masalah)

Proyek Internet Radio sering mengalami masalah terkait jaringan dan buffer.

MasalahKemungkinan PenyebabSolusi
Suara Patah-patah/TerputusBuffer audio tidak terisi tepat waktu (latensi Wi-Fi buruk).Periksa kualitas sinyal Wi-Fi. Tambahkan lebih banyak delay atau atur ukuran buffer di library audio.
Tidak ada suara sama sekaliPengkabelan pin I2S/Speaker salah, atau library tidak dikonfigurasi dengan benar.Cek kembali pinout audio.setPinout(...) dengan pin yang Anda gunakan. Pastikan volume diatur di atas 0.
Gagal inisialisasi SD CardPin CS salah, atau kartu SD diformat tidak benar.Pastikan SD_CS_PIN sudah benar. Gunakan kartu SD dengan format FAT32.
Error: Gagal Terhubung ke HostURL streaming stasiun radio mati atau salah.Verifikasi URL streaming di browser Anda. Coba URL streaming yang berbeda dan pastikan formatnya (misalnya, .mp3 atau .aac).

 

Kesimpulan

Proyek Internet Radio adalah cara yang sangat efektif untuk mendemonstrasikan kekuatan ESP32 sebagai perangkat IoT dual-core yang mampu menangani tugas jaringan yang kompleks (Wi-Fi, HTTP request) sekaligus memproses output audio real-time. Dengan memanfaatkan fitur internal ESP32, Anda dapat menciptakan solusi audio yang fungsional dan minimalis.

 

Referensi

Instal Driver USB untuk ESP32

๐Ÿ”Œ ESP32 Perlu Driver?

Chip USB seperti CP2102 dan CH340 digunakan untuk komunikasi antara ESP32 dan komputer melalui port serial. Tanpa driver, komputer tidak akan mengenali board ESP32 saat dihubungkan.


๐Ÿ’ฝ Cara Instal Driver Berdasarkan Chip

✅ Untuk CP2102 (Silicon Labs)

  1. Kunjungi situs resmi: https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers

  2. Pilih sistem operasi kamu (Windows, macOS, Linux)

  3. Unduh dan instal driver

  4. Restart komputer jika diperlukan

✅ Untuk CH340 (WCH)

  1. Kunjungi situs resmi: http://www.wch.cn/downloads/CH341SER_EXE.html

  2. Unduh file installer (biasanya bernama CH341SER.EXE)

  3. Jalankan installer dan ikuti petunjuk

  4. Restart komputer jika diminta


๐Ÿ” Verifikasi Instalasi

  • Setelah driver terinstal, sambungkan ESP32 ke komputer via USB

  • Buka Arduino IDE

  • Masuk ke Tools > Port

  • Pastikan port serial muncul (contoh: COM3, COM4, atau /dev/ttyUSB0 di Linux)

Esp32 untuk internet radio

 

Internet Radio ESP32 adalah perangkat yang memungkinkan kita mendengarkan siaran radio melalui koneksi WiFi, tanpa menggunakan gelombang radio tradisional. Dengan ESP32, kita bisa mengakses stasiun radio online dan memutar audio melalui speaker eksternal.

๐Ÿ”ง Komponen yang Dibutuhkan

  • ESP32 board (disarankan versi dengan PSRAM seperti ESP32-S3)

  • VS1053 MP3 decoder module atau I2S amplifier (misalnya MAX98357A)

  • Speaker kecil (3W)

  • Potensiometer (untuk kontrol volume)

  • OLED display (opsional) untuk menampilkan nama stasiun

  • Power supply: baterai Li-ion + modul charger TP4056

๐Ÿ› ️ Langkah-Langkah Pembuatan

  1. Instal library yang dibutuhkan di Arduino IDE:

    • ESP8266Audio

    • AudioFileSourceICYStream

    • AudioGeneratorMP3

    • AudioOutputI2S atau AudioOutputVS1053

  2. Hubungkan ESP32 ke modul audio dan speaker.

    • Untuk I2S: gunakan pin BCLK, LRCLK, dan DOUT

    • Untuk VS1053: gunakan SPI dan pin kontrol

  3. Gunakan kode berikut sebagai contoh dasar:

    #include <WiFi.h>
    #include "AudioFileSourceICYStream.h"
    #include "AudioGeneratorMP3.h"
    #include "AudioOutputI2S.h"

    const char* ssid = "Nama_WiFi";
    const char* password = "Password_WiFi";
    const char* streamURL = "http://yourstreamurl.com/stream.mp3";

    AudioGeneratorMP3 *mp3;
    AudioFileSourceICYStream *file;
    AudioOutputI2S *out;

    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) delay(500);

      file = new AudioFileSourceICYStream(streamURL);
      out = new AudioOutputI2S();
      mp3 = new AudioGeneratorMP3();
      mp3->begin(file, out);
    }

    void loop() {
      if (mp3->isRunning()) {
        mp3->loop();
      } else {
        mp3->stop();
      }
    }
     

    ๐Ÿ“ฑ Fitur Tambahan yang Bisa Ditambahkan

    • Pemilihan stasiun radio via tombol atau rotary encoder

    • Tampilan nama stasiun dan metadata lagu di OLED

    • Kontrol volume dan mute

    • Casing 3D printed untuk tampilan profesional

    ๐ŸŽฏ Manfaat dan Tujuan Proyek

    • Belajar tentang streaming audio dan protokol ICY

    • Eksplorasi komunikasi WiFi dan pemrosesan audio digital

    • Membangun perangkat IoT yang berguna dan menyenangkan

     

ESP32 menjadi WiFi hotspot (Access Point)

Berikut adalah script .ino untuk membuat ESP32 menjadi WiFi hotspot (Access Point), lengkap dengan penjelasan tiap bagian. Ini memungkinkan perangkat lain terhubung langsung ke ESP32 tanpa router.

#include <WiFi.h>

// Nama SSID dan password hotspot
const char* ssid = "ESP32_Hotspot";
const char* password = "12345678";

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

  // Memulai mode Access Point
  WiFi.softAP(ssid, password);

  Serial.println("Hotspot ESP32 aktif");
  Serial.print("IP Address: ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  // Tambahkan logika lain di sini jika diperlukan
}
 

๐Ÿง  Penjelasan Script

  • #include <WiFi.h> Mengimpor library WiFi untuk ESP32.

  • WiFi.softAP(ssid, password); Mengaktifkan mode Access Point dengan nama dan password yang ditentukan.

  • WiFi.softAPIP(); Mengambil alamat IP ESP32 sebagai hotspot, biasanya 192.168.4.1.

  • Serial.begin(115200); Mengaktifkan komunikasi serial untuk debugging.

๐Ÿ“ฑ Cara Menguji

  1. Upload sketch ke ESP32 via Arduino IDE.

  2. Buka Serial Monitor (baud rate 115200).

  3. Cari WiFi bernama ESP32_Hotspot di smartphone/laptop.

  4. Hubungkan dengan password 12345678.

  5. ESP32 akan menampilkan IP-nya di Serial Monitor.

๐Ÿ”ง Pengembangan Lanjutan

Setelah ESP32 berfungsi sebagai hotspot, kamu bisa:

  • Menambahkan web server untuk kontrol perangkat.

  • Menghubungkan sensor dan menampilkan data via browser.

  • Membuat portal login atau dashboard lokal.

     

Bahwa skrip yang disediakan hanya ditujukan untuk penggunaan pribadi dan edukasi pada jaringan milik sendiri.

ESP32 sebagai BLE Client

 Berikut contoh script .ino untuk ESP32 sebagai BLE Client, yang akan terhubung ke BLE Server dan membaca data dari karakteristik tertentu.

๐Ÿ”— Script BLE Client ESP32

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>

BLEScan* pBLEScan;
BLEAdvertisedDevice* myDevice;
bool deviceFound = false;

class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
  void onResult(BLEAdvertisedDevice advertisedDevice) {
    Serial.println("Perangkat ditemukan: " + advertisedDevice.toString().c_str());

    // Ganti dengan nama atau UUID perangkat BLE Server yang ingin dihubungkan
    if (advertisedDevice.getName() == "ESP32_BLE") {
      Serial.println("Target BLE ditemukan!");
      myDevice = new BLEAdvertisedDevice(advertisedDevice);
      deviceFound = true;
      pBLEScan->stop();
    }
  }
};

void setup() {
  Serial.begin(115200);
  BLEDevice::init("");

  pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true);
  pBLEScan->start(5); // Scan selama 5 detik

  if (deviceFound) {
    BLEClient*  pClient  = BLEDevice::createClient();
    pClient->connect(myDevice); // Koneksi ke server

    BLERemoteService* pRemoteService = pClient->getService("12345678-1234-1234-1234-123456789abc");
    if (pRemoteService == nullptr) {
      Serial.println("Service tidak ditemukan.");
      return;
    }

    BLERemoteCharacteristic* pRemoteCharacteristic = pRemoteService->getCharacteristic("abcd1234-ab12-cd34-ef56-abcdef123456");
    if (pRemoteCharacteristic == nullptr) {
      Serial.println("Karakteristik tidak ditemukan.");
      return;
    }

    std::string value = pRemoteCharacteristic->readValue();
    Serial.print("Data dari server: ");
    Serial.println(value.c_str());
  } else {
    Serial.println("Perangkat BLE target tidak ditemukan.");
  }
}

void loop() {
  // Tidak ada loop aktif, bisa ditambahkan logika polling atau reconnect
}
 

๐Ÿงช Catatan

  • Pastikan UUID service dan karakteristik sesuai dengan BLE Server yang kamu gunakan.

  • Nama perangkat BLE (ESP32_BLE) harus cocok dengan yang disiarkan oleh server.

  • Gunakan aplikasi seperti nRF Connect untuk memverifikasi UUID dan karakteristik.

 

Menggunakan Bluetooth Low Energy (BLE) pada ESP32

 Berikut contoh script .ino untuk menggunakan Bluetooth Low Energy (BLE) pada ESP32 dengan Arduino IDE. Script ini membuat ESP32 bertindak sebagai BLE server yang mengirimkan data ke perangkat BLE client (misalnya smartphone).

๐Ÿงฌ Script BLE ESP32 (BLE Server)

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

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

#define SERVICE_UUID        "12345678-1234-1234-1234-123456789abc"
#define CHARACTERISTIC_UUID "abcd1234-ab12-cd34-ef56-abcdef123456"

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_NOTIFY
                    );

  pCharacteristic->addDescriptor(new BLE2902());
  pCharacteristic->setValue("Hello BLE");
  pService->start();

  pServer->getAdvertising()->start();
  Serial.println("BLE server aktif. Silakan konek ke 'ESP32_BLE'");
}

void loop() {
  if (deviceConnected) {
    pCharacteristic->setValue("Data baru dari ESP32");
    pCharacteristic->notify();
    delay(1000);
  }
}
 

๐Ÿ“ฑ Cara Menguji

  • Upload ke ESP32

  • Gunakan aplikasi seperti nRF Connect (Android/iOS) untuk scan dan konek ke ESP32_BLE

  • Buka layanan dan karakteristik untuk melihat notifikasi data

Kalau kamu ingin versi BLE client (ESP32 sebagai penerima data), atau ingin menambahkan fitur seperti kontrol LED via BLE, 

 


 

 

Referensi

Menggunakan Bluetooth Classic pada ESP32

 

Berikut contoh script .ino untuk menggunakan Bluetooth Classic pada ESP32 dengan Arduino IDE. Script ini memungkinkan ESP32 menerima data via Bluetooth dan menampilkannya di Serial Monitor.

๐Ÿ“ฒ Script Bluetooth Classic ESP32

#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32_BT"); // Nama perangkat Bluetooth
  Serial.println("Bluetooth siap. Pair dengan 'ESP32_BT'");
}

void loop() {
  if (SerialBT.available()) {
    char data = SerialBT.read();
    Serial.print("Data diterima: ");
    Serial.println(data);

    // Contoh: nyalakan LED jika menerima '1'
    if (data == '1') {
      digitalWrite(LED_BUILTIN, HIGH);
    } else if (data == '0') {
      digitalWrite(LED_BUILTIN, LOW);
    }
  }
}
 

⚙️ Cara Menggunakan

  • Pastikan board ESP32 sudah dipilih di Tools > Board

  • Upload sketch ke ESP32

  • Pair ESP32 dengan smartphone (nama: ESP32_BT)

  • Gunakan aplikasi seperti Serial Bluetooth Terminal (Android) untuk mengirim data

  • Kirim karakter '1' untuk menyalakan LED, '0' untuk mematikan

Untuk versi BLE (Bluetooth Low Energy), struktur kodenya berbeda dan lebih kompleks. Kalau kamu tertarik dengan BLE atau ingin mengontrol perangkat lain seperti relay atau sensor,

  

Referensi

Menghubungkan ESP32 ke jaringan WiFi

 Berikut contoh script .ino untuk menghubungkan ESP32 ke jaringan WiFi menggunakan Arduino IDE.

Script ini menggunakan library WiFi.h dan akan menampilkan status koneksi ke Serial Monitor:

#include <WiFi.h>

// Ganti dengan SSID dan password WiFi kamu
const char* ssid = "Nama_WiFi";
const char* password = "Password_WiFi";

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println("Menghubungkan ke WiFi...");
  WiFi.begin(ssid, password);

  // Tunggu sampai terhubung
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("Terhubung ke WiFi!");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Tambahkan logika lain di sini jika diperlukan
}
 

 

๐Ÿงช Cara Menggunakan

  1. Buka Arduino IDE

  2. Pilih board ESP32 di menu Tools > Board

  3. Pilih port USB di Tools > Port

  4. Paste script di atas ke jendela editor

  5. Klik Upload

  6. Buka Serial Monitor (baud rate 115200) untuk melihat status koneksi

 

 

Referensi

Menulis Script ESP32 menggunakan Arduino IDE

  

 

 

Referensi

Aplikasi Arduino IDE

Arduino IDE (Integrated Development Environment) adalah perangkat lunak sumber terbuka (open-source) resmi yang digunakan untuk menulis, mengkompilasi, dan mengunggah kode program ke papan mikrokontroler Arduino. 

Perangkat lunak ini berfungsi sebagai alat inti bagi para pengembang, pemula, dan pecinta elektronika untuk membuat berbagai proyek berbasis Arduino. 

Fitur Utama

Arduino IDE menyediakan antarmuka grafis yang sederhana dan ramah pengguna, memungkinkan pengguna untuk berinteraksi dengan hardware Arduino dengan mudah: 
  • Editor Teks: Area untuk menulis kode program, yang sering disebut "sketsa" (sketches).
  • Kompilasi dan Unggah: Tombol fungsional untuk memverifikasi (mengkompilasi) kode dan mengunggahnya ke papan Arduino yang terhubung melalui USB.
  • Serial Monitor/Plotter: Konsol teks yang berfungsi untuk menampilkan dan mengirim data antara Arduino dan komputer secara real-time, sangat berguna untuk proses debugging.
  • Manajer Board & Library: Memudahkan instalasi dan pembaruan dukungan untuk berbagai jenis papan Arduino dan pustaka (libraries) tambahan yang menyediakan fungsionalitas siap pakai.
  • Bahasa Pemrograman: Menggunakan bahasa pemrograman C dan C++ yang disederhanakan dengan fungsi dan pustaka khusus Arduino, membuatnya mudah diakses oleh pemula. 
Arduino IDE tersedia secara gratis untuk berbagai sistem operasi, termasuk Windows, macOS, dan Linux

Panduan ini membantu kamu menginstal dukungan board ESP32 di Arduino IDE agar bisa mulai membuat proyek IoT dengan mudah.

1. Unduh dan Instal Arduino IDE

  • Kunjungi:  https://www.arduino.cc/en/software

  • Pilih versi sesuai sistem operasi (Windows, macOS, Linux)

  • Instal seperti biasa


2. Tambahkan URL Board Manager ESP32

  • Buka Arduino IDE

  • Masuk ke File > Preferences

  • Di bagian Additional Boards Manager URLs, tambahkan:

https://espressif.github.io/arduino-esp32/package_esp32_index.json;

https://dl.espressif.com/dl/package_esp32_index.json

  • Klik OK

 

3. Instal Board ESP32

  • Buka Tools > Board > Boards Manager

  • Cari “ESP32” di kolom pencarian

  • Pilih “esp32 by Espressif Systems” lalu klik Install

  • Tunggu proses instalasi selesai

     

 

4. Pilih Board ESP32

  • Setelah instalasi, pilih board sesuai tipe ESP32 kamu di Tools > Board

    • Contoh: “ESP32 Dev Module”, “ESP32-S3 Dev Module”, dll.

       

5. Coba Upload Program

  • Sambungkan ESP32 ke komputer via USB

  • Pilih port di Tools > Port

  • Upload contoh program seperti Blink untuk menguji koneksi

     

 



 

Referensi

Wi-Fi hotspot dengan captive portal