ESP32 Tidak Mau Terhubung ke Wi-Fi? Kode WiFi.status() dan Solusi yang Benar-Benar Ampuh
ESP32 tidak mau terhubung ke Wi-Fi? Baca WiFi.status() dan kode reason, atasi masalah 2,4 GHz dan kata sandi, brownout, setTxPower, reconnect, IP statis, dan eduroam.
ESP32 tidak mau terhubung ke Wi-Fi dan Serial Monitor cuma terus mencetak titik? Penyebabnya hampir tidak pernah board yang rusak. Tersangka yang biasa: mencoba masuk ke jaringan 5 GHz, salah ketik kecil di nama jaringan atau kata sandi, catu daya lemah yang tegangannya anjlok begitu Wi-Fi menyala, pengaturan keamanan dan kanal di router, atau jaringan enterprise di sekolah maupun kantor. Kabar baiknya, ESP32 sebenarnya sudah memberi tahu apa yang salah. Kamu cuma perlu tahu cara membaca nilai WiFi.status() dan kode reason (alasan) yang dilaporkannya ketika koneksi terputus.
Di panduan ini kamu akan melihat dulu langkah-langkah yang dilalui ESP32 untuk masuk ke jaringan dan kode status yang dilaporkannya di setiap langkah. Setelah itu ada sketch diagnostik yang mencetak kode status dan kode reason, pemindai yang menampilkan daftar jaringan di sekitarmu, keharusan 2,4 GHz dan router dual-band, brownout dan solusi setTxPower, sketch reconnect yang pulih sendiri, IP statis, koneksi WPA2-Enterprise untuk jaringan sekolah, serta tes hotspot ponsel yang dalam beberapa menit memberi tahu apakah masalahnya di router atau di board. Sketch-nya berjalan di core ESP32 versi 2.x dan 3.x untuk Arduino IDE, dan di bagian akhir ada juga skrip tes untuk Raspberry Pi Pico W dan MicroPython.

Bagaimana ESP32 terhubung ke jaringan Wi-Fi?
Ketika kamu memanggil WiFi.begin(), ESP32 menjalankan empat langkah di latar belakang. Pertama, ia memindai kanal-kanal untuk mencari jaringan dengan nama (SSID) yang kamu berikan. Kalau ketemu, ia melakukan autentikasi dan asosiasi dengan router. Di jaringan WPA2, langkah ini disusul 4-way handshake, momen ketika ketahuan apakah kata sandinya benar. Terakhir, ia meminta alamat IP dari server DHCP router. WiFi.status() baru mengembalikan WL_CONNECTED setelah langkah terakhir ini juga selesai. Kalau kamu tahu di langkah mana ia macet, sebagian besar penyebabnya sudah ketahuan:
| Langkah | Apa yang terjadi? | Status dan reason kalau macet |
|---|---|---|
| 1. Pemindaian | ESP32 mencari nama jaringan di kanal 2,4 GHz | WL_NO_SSID_AVAIL (1), reason 201 |
| 2. Autentikasi dan asosiasi | Router menerima atau menolak ESP32 | WL_CONNECT_FAILED (4) atau WL_DISCONNECTED (6), reason 202 atau 203 |
| 3. 4-way handshake | Kunci yang diturunkan dari kata sandi dibandingkan | WL_DISCONNECTED (6) dengan reason 15; WL_CONNECTION_LOST (5) dengan reason 204 |
| 4. DHCP | Router memberi ESP32 sebuah alamat IP | Macet di WL_IDLE_STATUS (0) |
| Setelah terhubung | Router terus mengirim paket beacon | Kalau berhenti: WL_CONNECTION_LOST (5), reason 200 |
Arti kode WiFi.status()
WiFi.status() mengembalikan nilai bertipe wl_status_t. Kalau kamu langsung mencetaknya ke Serial Monitor, yang terlihat cuma angka. Tabel di bawah menunjukkan arti setiap angka di core Arduino ESP32. Hati-hati: nilai 0 sampai 6 punya nama yang sama dengan library WiFi Arduino lama, tetapi di ESP32 nilai-nilai itu muncul dalam situasi yang sedikit berbeda. Contohnya, tepat setelah WiFi.begin() statusnya 6, bukan 0; status berubah menjadi 0 begitu board sudah masuk ke router dan sedang menunggu IP, lalu menjadi 3 ketika IP-nya didapat.
| Kode | Konstanta | Arti | Cek dulu |
|---|---|---|---|
| 0 | WL_IDLE_STATUS | Sudah masuk ke router tetapi belum punya alamat IP | Normal selama beberapa detik; kalau berlanjut, DHCP |
| 1 | WL_NO_SSID_AVAIL | Tidak ditemukan jaringan dengan nama itu | Nama jaringan, pita 2,4 GHz, jarak |
| 2 | WL_SCAN_COMPLETED | Pemindaian jaringan sudah selesai | Tidak berkaitan dengan koneksi |
| 3 | WL_CONNECTED | Terhubung dan punya alamat IP | Semua beres |
| 4 | WL_CONNECT_FAILED | Router menolak koneksi | Kata sandi, mode keamanan, filter MAC |
| 5 | WL_CONNECTION_LOST | Koneksi yang sudah terbentuk terputus | Kekuatan sinyal, catu daya, antena |
| 6 | WL_DISCONNECTED | Tidak terhubung; masih mencoba atau percobaannya gagal | Kode reason |
| 254 | WL_STOPPED | Station Wi-Fi dihentikan (core 3.x) | Panggil WiFi.mode(WIFI_STA) |
| 255 | WL_NO_SHIELD | Wi-Fi belum dijalankan (core 2.x) | Panggil WiFi.mode() atau WiFi.begin() |
Sketch diagnostik: cetak kode status dan kode reason ke Serial Monitor
Sketch di bawah mencoba terhubung selama 20 detik, mencetak kode status beserta namanya setiap kali berubah, dan menampilkan kode reason dari ESP-IDF setiap kali koneksi terputus. Kalau berhasil terhubung, sketch ini mencetak alamat IP, gateway, kekuatan sinyal (RSSI), dan kanal; dalam kondisi apa pun ia juga menampilkan alamat MAC board. Ganti nama jaringan dan kata sandinya dengan milikmu, upload sketch-nya, lalu buka Serial Monitor di 115200 baud. Kalau sketch-nya bahkan tidak mau ter-upload, baca dulu panduan gagal upload.
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı, büyük-küçük harfe duyarlı / network name, case-sensitive
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6// Durum kodunu adına çevir / turn the status code into its name
7const char* durumAdi(wl_status_t durum) {
8 switch (durum) {
9 case WL_IDLE_STATUS: return "WL_IDLE_STATUS";
10 case WL_NO_SSID_AVAIL: return "WL_NO_SSID_AVAIL";
11 case WL_SCAN_COMPLETED: return "WL_SCAN_COMPLETED";
12 case WL_CONNECTED: return "WL_CONNECTED";
13 case WL_CONNECT_FAILED: return "WL_CONNECT_FAILED";
14 case WL_CONNECTION_LOST: return "WL_CONNECTION_LOST";
15 case WL_DISCONNECTED: return "WL_DISCONNECTED";
16 default: return "WL_NO_SHIELD / WL_STOPPED";
17 }
18}
19
20// Bağlantı her koptuğunda sebep kodunu yaz / print the reason code on every disconnect
21void koptugunda(arduino_event_id_t olay, arduino_event_info_t bilgi) {
22 Serial.printf("Koptu / Disconnected, reason: %d\n", (int)bilgi.wifi_sta_disconnected.reason);
23}
24
25void setup() {
26 Serial.begin(115200);
27 delay(1000);
28 WiFi.onEvent(koptugunda, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
29 WiFi.mode(WIFI_STA); // istasyon modu / station mode
30 WiFi.begin(WIFI_ADI, WIFI_SIFRE); // begin() yalnızca bir kez / call begin() only once
31
32 wl_status_t onceki = WL_NO_SHIELD;
33 unsigned long baslangic = millis();
34 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 20000) {
35 wl_status_t simdi = WiFi.status();
36 if (simdi != onceki) { // yalnızca değişince yaz / print only when it changes
37 Serial.printf("Durum / Status: %d %s\n", (int)simdi, durumAdi(simdi));
38 onceki = simdi;
39 }
40 delay(500);
41 }
42
43 if (WiFi.status() == WL_CONNECTED) {
44 Serial.print("Bagli / Connected, IP: ");
45 Serial.println(WiFi.localIP());
46 Serial.print("Ag gecidi / Gateway: ");
47 Serial.println(WiFi.gatewayIP());
48 Serial.printf("RSSI: %d dBm, kanal / channel: %d\n", (int)WiFi.RSSI(), (int)WiFi.channel());
49 } else {
50 wl_status_t son = WiFi.status();
51 Serial.printf("Baglanamadi / Failed, son durum / last status: %d %s\n", (int)son, durumAdi(son));
52 }
53 Serial.print("MAC: ");
54 Serial.println(WiFi.macAddress()); // MAC filtresi için / for MAC filtering
55}
56
57void loop() {}Wajar kalau yang pertama muncul adalah Durum / Status: 6 WL_DISCONNECTED. Kalau koneksi berhasil, status sebentar berubah menjadi 0 lalu menjadi 3. Kalau tetap di 1, jaringannya tidak pernah ditemukan; kalau baris seperti Koptu / Disconnected, reason: 15 terus bermunculan, kemungkinan besar kata sandinya salah. Untuk detail lebih banyak lagi, atur Tools > Core Debug Level di Arduino IDE ke Warn atau Info: core kemudian juga mencetak nama reason di setiap pemutusan, misalnya Reason: 201 - NO_AP_FOUND. Berikut kode reason yang paling sering kamu temui:
| Reason | Nama | Apa artinya? | Solusi |
|---|---|---|---|
| 2 | AUTH_EXPIRE | Waktu autentikasi habis | Sinyal lemah atau router sibuk; dekatkan board, restart router |
| 5 | ASSOC_TOOMANY | Batas jumlah klien router sudah penuh | Lepaskan perangkat yang tidak dipakai atau naikkan batasnya |
| 8 | ASSOC_LEAVE | ESP32 sendiri yang keluar dari jaringan | Kodemu memanggil WiFi.disconnect(); ini normal |
| 15 | 4WAY_HANDSHAKE_TIMEOUT | Handshake kata sandi tidak bisa diselesaikan | Paling sering kata sandi salah; cek kata sandi dan mode keamanannya |
| 200 | BEACON_TIMEOUT | Beacon dari router berhenti datang | Sinyal lemah atau tegangan anjlok; antena, catu daya, setTxPower |
| 201 | NO_AP_FOUND | Tidak ditemukan jaringan dengan nama ini | Ejaan SSID, jaringan 5 GHz, jarak, jaringan tersembunyi, kanal 12 dan 13 |
| 202 | AUTH_FAIL | Autentikasi ditolak | Kata sandi atau mode keamanan yang tidak kompatibel seperti Enterprise |
| 203 | ASSOC_FAIL | Router menolak asosiasi | Filter MAC atau mode nirkabel seperti khusus 802.11ax |
| 204 | HANDSHAKE_TIMEOUT | Waktu handshake habis | Kata sandi salah atau sinyal sangat lemah |
| 210, 211 | NO_AP_FOUND_W_COMPATIBLE_SECURITY, NO_AP_FOUND_IN_AUTHMODE_THRESHOLD | Jaringan ditemukan, tetapi mode keamanannya tidak kompatibel atau di bawah batas minimum yang diizinkan (core 3.x) | Atur router ke WPA2-Personal (AES) atau turunkan batas minimumnya dengan WiFi.setMinSecurity() |
Keharusan 2,4 GHz: ESP32 tidak bisa melihat jaringan 5 GHz
ESP32 klasik, ESP32-S2, ESP32-S3, ESP32-C3, dan ESP32-C6 hanya bekerja di pita 2,4 GHz. Jaringan yang memancar di 5 GHz tidak pernah terlihat oleh chip ini ketika memindai, dan hasilnya selalu WL_NO_SSID_AVAIL. Kebanyakan router rumahan memancar di kedua pita. Kalau router-mu memakai nama terpisah untuk tiap pita (misalnya MyWiFi dan MyWiFi_5G), selalu berikan nama jaringan 2,4 GHz ke ESP32. Kalau kedua pita memakai nama yang sama (Smart Connect, band steering, atau sistem mesh), ESP32 biasanya masuk ke sisi 2,4 GHz tanpa masalah, karena ia memang tidak pernah melihat sinyal 5 GHz. Masalah muncul ketika pita 2,4 GHz dimatikan atau ketika router berusaha mendorong klien ke 5 GHz: ESP32 terhubung, beberapa detik kemudian putus, dan siklus itu terus berulang. Dalam kasus seperti itu, pisahkan kedua pita di pengaturan router atau buat jaringan tamu yang hanya memancar di 2,4 GHz.
| Board | Pita Wi-Fi | Catatan |
|---|---|---|
| ESP32 (WROOM-32, DevKit), ESP32-S2, ESP32-S3 | Hanya 2,4 GHz | 802.11 b/g/n |
| ESP32-C3 | Hanya 2,4 GHz | Board Super Mini murah mungkin perlu daya pancar yang lebih rendah |
| ESP32-C6 | Hanya 2,4 GHz | Mendukung Wi-Fi 6 (802.11ax), tetapi tetap hanya di 2,4 GHz |
| ESP32-C5 | 2,4 GHz dan 5 GHz | Chip dual-band pertama Espressif |
| ESP8266 (NodeMCU, Wemos D1 mini, ESP-01) | Hanya 2,4 GHz | 802.11 b/g/n |
| Raspberry Pi Pico W dan Pico 2 W | Hanya 2,4 GHz | Chip nirkabel CYW43439 |
| Arduino Uno R4 WiFi | Hanya 2,4 GHz | ESP32-S3 di board-nya yang mengurus Wi-Fi |
Kalau pitanya sudah benar dan jaringannya tetap tidak ditemukan, cek pengaturan kanal dan mode di router. Dengan pengaturan wilayah bawaan ESP32, kanal 1 sampai 11 dipindai secara aktif, sedangkan kanal 12 dan 13 hanya didengarkan secara pasif. Jaringan yang terlihat di kanal-kanal itu biasanya tetap ditemukan, tetapi jaringan tersembunyi (siaran SSID dimatikan) di kanal 12 atau 13 tidak akan ditemukan ESP32. Pilihan paling aman adalah mengganti kanal dari otomatis ke kanal tetap 1, 6, atau 11. ESP32 klasik, S2, S3, dan C3 tidak bisa masuk ke router yang diatur khusus 802.11ax (Wi-Fi 6); ganti modenya ke b/g/n atau campuran b/g/n/ax. Untuk keamanan, pilihan yang paling kompatibel adalah WPA2-Personal (AES) atau mode campuran WPA2/WPA3. Secara bawaan, core Arduino menolak apa pun yang lebih lemah dari WPA2 (WEP dan WPA-TKIP lama); kalau kamu benar-benar harus masuk ke jaringan yang sangat tua, tambahkan WiFi.setMinSecurity(WIFI_AUTH_WEP) sebelum begin(). Sebelum mengubah pengaturan apa pun, pakai pemindai ini untuk melihat apa yang sebenarnya dilihat ESP32:
1#include <WiFi.h>
2
3// Güvenlik türünü yazıya çevir / turn the security type into text
4const char* guvenlikAdi(wifi_auth_mode_t tur) {
5 switch (tur) {
6 case WIFI_AUTH_OPEN: return "Acik / Open";
7 case WIFI_AUTH_WEP: return "WEP";
8 case WIFI_AUTH_WPA_PSK: return "WPA";
9 case WIFI_AUTH_WPA2_PSK: return "WPA2";
10 case WIFI_AUTH_WPA_WPA2_PSK: return "WPA/WPA2";
11 case WIFI_AUTH_WPA3_PSK: return "WPA3";
12 case WIFI_AUTH_WPA2_WPA3_PSK: return "WPA2/WPA3";
13 default: return "Diger / Other (Enterprise)";
14 }
15}
16
17void setup() {
18 Serial.begin(115200);
19 WiFi.mode(WIFI_STA);
20 WiFi.disconnect(); // temiz tarama için bağlantıyı kes / disconnect for a clean scan
21 delay(100);
22}
23
24void loop() {
25 Serial.println("Taraniyor / Scanning...");
26 int adet = WiFi.scanNetworks(); // engelleyen tarama, 2-4 sn / blocking scan, 2-4 s
27 if (adet <= 0) {
28 Serial.println("Ag bulunamadi / No networks found");
29 }
30 for (int i = 0; i < adet; i++) {
31 Serial.printf("%2d | %-32s | %4d dBm | kanal/ch %2d | %s\n",
32 i + 1, WiFi.SSID(i).c_str(), (int)WiFi.RSSI(i),
33 (int)WiFi.channel(i), guvenlikAdi(WiFi.encryptionType(i)));
34 }
35 WiFi.scanDelete(); // sonuçları bellekten sil / free the results
36 Serial.println();
37 delay(10000); // 10 sn sonra yeniden tara / scan again in 10 s
38}Kalau nama jaringanmu sama sekali tidak ada di daftar, masalahnya ada sebelum kodemu: jaringannya 5 GHz, tersembunyi, atau ESP32-nya terlalu jauh. Kalau namanya ada, lihat RSSI-nya: -30 sampai -60 dBm sangat bagus dan -60 sampai -70 dBm bagus; di antara -70 dan -80 dBm ESP32 bisa terhubung tetapi mungkin putus-putus, dan di bawah -80 dBm jangan harapkan koneksi yang andal. Kalau nama yang sama muncul beberapa kali, router atau sistem mesh-mu punya lebih dari satu access point. Dengan pemindaian cepat bawaan, ESP32 masuk ke kecocokan pertama yang ditemukannya; kalau kamu ingin ia memilih sinyal terkuat, tambahkan WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN) sebelum begin(). Menyalin nama jaringan persis seperti yang muncul di hasil pemindaian lalu menempelkannya ke sketch-mu menghilangkan salah ketik untuk selamanya.
Kesalahan nama jaringan (SSID) dan kata sandi
Kalau sketch diagnostik melaporkan reason 201 atau 15, masalahnya biasanya ada di dua baris kodemu. SSID boleh sepanjang maksimal 32 byte, kata sandi WPA2 harus 8 sampai 63 karakter, dan keduanya peka huruf besar-kecil. Berikut kesalahan yang paling sering terlewat:
- Huruf besar dan kecil: Kamu tidak bisa masuk ke jaringan yang tertulis MyWiFi di router dengan mengetik mywifi. Aturan yang sama berlaku untuk kata sandi.
- Spasi tak terlihat: Spasi di akhir nama jaringan atau kata sandi, atau karakter tersembunyi yang ikut tersalin dari suatu tempat, membuat keduanya tidak cocok.
- Karakter khusus: Huruf beraksen atau simbol di nama jaringan bisa saja disimpan router dengan encoding yang berbeda. Mengganti nama jaringan hanya dengan huruf Latin biasa dan angka adalah solusi yang paling pasti.
- Apostrof melengkung: Di iPhone, nama hotspot adalah nama ponselnya, dan sering berisi apostrof melengkung ’ alih-alih apostrof lurus ' seperti di keyboard-mu, sehingga nama di kodemu tidak cocok.
- Backslash dan tanda kutip: Kalau kata sandinya berisi \ atau ", tulis keduanya sebagai \\ dan \" di string C++; kalau tidak, compiler mengubah kata sandinya atau sketch-nya gagal dikompilasi.
- Jaringan terbuka: Ketika masuk ke jaringan tanpa kata sandi, jangan tulis kata sandi sama sekali; WiFi.begin(name) sudah cukup. Kalau kamu memberikan kata sandi untuk jaringan terbuka, core akan mencari WPA2 dan tidak bisa menemukan jaringannya.
- Jaringan tersembunyi: Kamu bisa masuk ke jaringan yang siaran SSID-nya dimatikan dengan mengetik namanya persis, tetapi jaringan seperti ini tidak muncul di hasil pemindaian; kalau ada masalah, nyalakan siarannya selama pengujian.
Catu daya dan brownout: kenapa board reset ketika Wi-Fi mulai menyala?
Modul ESP32 menarik arus rata-rata sekitar 80 mA, tetapi selama pemancar Wi-Fi aktif, arusnya sebentar melonjak sampai 250–400 mA. Lonjakan terbesar biasanya terjadi selama kalibrasi radio ketika board mulai menyala dan selama koneksi pertama. Karena itu Espressif menyarankan catu daya yang sanggup memberi setidaknya 500 mA. Kalau catu dayanya tidak sanggup mengikuti lonjakan ini, jalur 3,3 V anjlok sekejap, detektor brownout chip bereaksi, dan board restart dengan pesan Brownout detector was triggered di Serial Monitor. Gejalanya sangat khas: kode berjalan lancar sampai baris Wi-Fi, board reset di WiFi.begin(), dan semuanya berubah menjadi loop tanpa akhir. Error ini kami bahas sangat lengkap di artikel tentang brownout dan Guru Meditation ESP32.

| Sumber daya | Cocok? | Kenapa? |
|---|---|---|
| Port USB di belakang komputer, kabel pendek dan tebal | Biasanya ya | Port USB 2.0 memberi 500 mA; kabel pendek mengurangi susut tegangan |
| USB di panel depan, USB hub, atau kabel panjang dan tipis | Bisa bermasalah | Hambatan kabel dan kontak menurunkan tegangan ketika arus melonjak |
| Charger ponsel 5 V minimal 1 A | Ya | Menyisakan ruang yang lega untuk lonjakan arus |
| Pin 3.3V Arduino Uno | Tidak | Pin ini hanya bisa memberi sekitar 50 mA |
| Sel Li-ion 3,7 V langsung ke pin 5V board | Tidak | Karena dropout AMS1117, output-nya turun di bawah 3 V |
| Sel Li-ion dengan konverter boost 5 V atau regulator 3,3 V low-dropout | Ya | Memberi 3,3 V yang stabil meskipun baterainya makin habis |
| Output 3,3 V modul daya breadboard MB102 | Umumnya ya | Beri daya dari adaptor dengan arus yang cukup dan tambahkan kapasitor |
Solusi setTxPower: menurunkan daya pancar
Di sebagian board, bahkan dengan catu daya yang bagus, ESP32 melihat jaringannya tetapi tidak bisa terhubung, atau koneksinya terus putus. Terutama di board ESP32-C3 Super Mini yang murah dan sebagian board ESP32 klon, rangkaian antena dan regulatornya kewalahan pada daya pancar maksimum. Secara bawaan ESP32 memancar di sekitar 19,5–20 dBm. Menurunkannya dengan WiFi.setTxPower() mengurangi lonjakan arus dan sering langsung memperbaiki koneksi di board-board ini. Panggil fungsi ini tepat setelah WiFi.begin(); fungsi ini tidak berpengaruh kalau dipanggil sebelum Wi-Fi berjalan, yaitu sebelum WiFi.mode() atau begin().
| Konstanta | Daya | Kapan dipakai |
|---|---|---|
| WIFI_POWER_19_5dBm | 19,5 dBm | Mendekati bawaan; jangkauan terjauh |
| WIFI_POWER_15dBm | 15 dBm | Percobaan pertama untuk masalah ringan |
| WIFI_POWER_11dBm | 11 dBm | Biasanya cukup kalau router ada di ruangan yang sama |
| WIFI_POWER_8_5dBm | 8,5 dBm | Nilai yang paling sering disarankan untuk ESP32-C3 Super Mini |
| WIFI_POWER_5dBm | 5 dBm | Untuk tes tepat di sebelah router |
Setiap penurunan 3 dB membuat daya pancar menjadi setengahnya, jadi jangkauannya juga makin pendek. Mulailah dari 15 dBm; kalau masalahnya masih ada, turunkan ke 11 lalu ke 8,5 dBm. Kalau menurunkan daya memperbaiki koneksi, penyebab sebenarnya biasanya catu daya atau desain antena, jadi untuk jangka panjang tambahkan juga catu daya yang lebih baik dan kapasitor. Pengaturan daya board yang sedang berlaku bisa kamu baca dengan WiFi.getTxPower(); nilainya dalam satuan 0,25 dBm, jadi 78 berarti 19,5 dBm.
Sketch reconnect otomatis
ESP32 kehilangan koneksi ketika router restart, ketika listrik kembali menyala setelah padam, atau ketika sinyal melemah untuk beberapa lama. Di core ESP32, WiFi.setAutoReconnect(true) aktif secara bawaan, dan setelah sebagian besar pemutusan, board terhubung lagi dengan sendirinya. Tetapi untuk beberapa reason, misalnya 202 AUTH_FAIL, core menyerah setelah satu kali mencoba lagi dan board tetap offline sampai kamu me-reset-nya. Karena itu, di proyek yang harus berjalan berbulan-bulan, sebaiknya kamu menambahkan pengecekan sendiri. Sketch di bawah tidak memakai delay(), melainkan millis(), untuk mengecek koneksi setiap 15 detik, menyambung ulang kalau koneksi putus, dan me-restart board kalau tidak bisa terhubung selama 5 menit:
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6const unsigned long KONTROL_ARALIGI = 15000; // 15 sn'de bir kontrol / check every 15 s
7const int EN_FAZLA_DENEME = 20; // 20 x 15 sn = 5 dk / 20 x 15 s = 5 min
8unsigned long sonKontrol = 0;
9int basarisizSayac = 0; // üst üste başarısız kontrol / consecutive failed checks
10
11void wifiBaslat() {
12 WiFi.mode(WIFI_STA);
13 WiFi.setAutoReconnect(true); // çekirdeğin kendi yeniden bağlanması / core auto-reconnect
14 WiFi.begin(WIFI_ADI, WIFI_SIFRE);
15 WiFi.setTxPower(WIFI_POWER_15dBm); // gerekirse 8_5dBm'e kadar düşür / lower to 8_5dBm if needed
16 WiFi.setSleep(false); // modem uykusunu kapat / disable modem sleep
17}
18
19void setup() {
20 Serial.begin(115200);
21 wifiBaslat();
22}
23
24void loop() {
25 if (millis() - sonKontrol >= KONTROL_ARALIGI) {
26 sonKontrol = millis();
27 if (WiFi.status() == WL_CONNECTED) {
28 basarisizSayac = 0;
29 Serial.printf("Bagli / Connected, IP: %s, RSSI: %d dBm\n",
30 WiFi.localIP().toString().c_str(), (int)WiFi.RSSI());
31 } else {
32 basarisizSayac++;
33 Serial.printf("Bagli degil / Not connected (%d/%d), yeniden baglaniyor / reconnecting\n",
34 basarisizSayac, EN_FAZLA_DENEME);
35 WiFi.disconnect();
36 WiFi.reconnect();
37 if (basarisizSayac >= EN_FAZLA_DENEME) {
38 Serial.println("Yeniden baslatiliyor / Restarting");
39 delay(100);
40 ESP.restart(); // son çare: kartı yeniden başlat / last resort: restart the board
41 }
42 }
43 }
44
45 // Projenin kodu buraya; uzun delay() kullanma / your project code here; avoid long delay()
46}Baris WiFi.setSleep(false) mematikan modem sleep, yaitu mode ketika ESP32 sebentar-sebentar mematikan radionya selama terhubung. Ini mengurangi putusnya koneksi dengan sebagian router dan mengurangi latensi di web server; sebagai gantinya board menarik arus beberapa puluh mA lebih banyak. Di proyek baterai kamu bisa menghapus baris ini dan menghitung berapa lama baterainya bertahan dengan kalkulator umur baterai. Pertahankan baris setTxPower hanya kalau kamu mengalami masalah dari bagian sebelumnya. Ketika menambahkan kode proyekmu ke loop(), hindari panggilan delay() yang lama, karena pengecekan koneksi hanya berjalan selama loop() terus berputar. Kalau kamu lebih suka memasukkan data login Wi-Fi dari ponsel daripada menuliskannya langsung di kode, lihat library WiFiManager.
Pengaturan IP statis ESP32
Biasanya router memberi ESP32 alamat lewat DHCP yang bisa berubah setiap kali. Kalau kamu membuat web server yang akan selalu kamu buka di alamat yang sama dari ponsel, atau kalau DHCP router-nya bermasalah (status terus macet di 0), IP statis membuat semuanya lebih mudah. Ingat tiga aturan: WiFi.config() harus dipanggil sebelum WiFi.begin(); alamat yang kamu pilih harus berada di jaringan router tetapi di luar pool DHCP-nya (kalau router membagikan 192.168.1.2–100, pakai alamat seperti 192.168.1.200); dan gateway adalah alamat router itu sendiri. Untuk mengetahui alamat router-mu, jalankan sketch diagnostik sekali dengan DHCP; sketch itu juga mencetak gateway.
1#include <WiFi.h>
2
3const char* WIFI_ADI = "EvAgi_2G"; // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234"; // Wi-Fi şifresi / Wi-Fi password
5
6IPAddress sabitIP(192, 168, 1, 200); // DHCP havuzunun dışında bir adres / an address outside the DHCP pool
7IPAddress agGecidi(192, 168, 1, 1); // modemin adresi / router address
8IPAddress altAgMaskesi(255, 255, 255, 0); // alt ağ maskesi / subnet mask
9IPAddress dns1(1, 1, 1, 1); // birinci DNS / primary DNS
10IPAddress dns2(8, 8, 8, 8); // ikinci DNS / secondary DNS
11
12void setup() {
13 Serial.begin(115200);
14 WiFi.mode(WIFI_STA);
15 // config() mutlaka begin()'den önce / config() must come before begin()
16 if (!WiFi.config(sabitIP, agGecidi, altAgMaskesi, dns1, dns2)) {
17 Serial.println("Statik IP ayarlanamadi / Static IP config failed");
18 }
19 WiFi.begin(WIFI_ADI, WIFI_SIFRE);
20
21 unsigned long baslangic = millis();
22 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 15000) {
23 delay(500);
24 Serial.print('.');
25 }
26 Serial.println();
27 Serial.print("IP: ");
28 Serial.println(WiFi.localIP()); // 192.168.1.200 olmalı / should be 192.168.1.200
29}
30
31void loop() {}Jaringan sekolah dan kantor: terhubung ke WPA2-Enterprise (eduroam)
eduroam di kampus, jaringan perusahaan, dan sebagian jaringan sekolah memakai WPA2-Enterprise (802.1X), yang memberi setiap pengguna nama pengguna dan kata sandi sendiri alih-alih satu kata sandi bersama. WiFi.begin(nama, kata_sandi) biasa selalu gagal di jaringan seperti ini, dan di pemindai tipe keamanannya tampil sebagai Diger / Other (Enterprise). Core Arduino ESP32 versi 2.x dan 3.x menyediakan bentuk begin() siap pakai untuk PEAP, metode yang paling umum:
1#include <WiFi.h>
2
3const char* AG_ADI = "eduroam"; // kurum ağının adı / enterprise network name
4const char* EAP_KIMLIK = "[email protected]"; // kimlik, çoğu zaman kullanıcı adıyla aynı / identity, usually same as username
5const char* EAP_KULLANICI = "[email protected]"; // kullanıcı adı / username
6const char* EAP_SIFRE = "kurum_sifren"; // kurum şifresi / enterprise password
7
8void setup() {
9 Serial.begin(115200);
10 WiFi.disconnect(true); // önceki bağlantıyı kapat / close any previous connection
11 WiFi.mode(WIFI_STA);
12 // PEAP (MSCHAPv2) ile bağlan, CA doğrulaması yok / connect with PEAP (MSCHAPv2), no CA check
13 WiFi.begin(AG_ADI, WPA2_AUTH_PEAP, EAP_KIMLIK, EAP_KULLANICI, EAP_SIFRE);
14
15 unsigned long baslangic = millis();
16 while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 30000) {
17 delay(500);
18 Serial.print('.');
19 }
20 Serial.println();
21 if (WiFi.status() == WL_CONNECTED) {
22 Serial.print("Bagli / Connected, IP: ");
23 Serial.println(WiFi.localIP());
24 } else {
25 Serial.printf("Baglanamadi / Failed, durum / status: %d\n", (int)WiFi.status());
26 }
27}
28
29void loop() {}Di kebanyakan institusi, identity sama dengan nama pengguna; sebagian meminta identitas luar anonim seperti [email protected]. Sketch ini tidak memvalidasi sertifikat server (CA): koneksinya berjalan, tetapi access point palsu bisa saja menangkap kata sandimu. Jadi sebelum memasang kata sandi pribadimu di ESP32, tanyakan dulu ke bagian IT dan, kalau bisa, minta akun atau jaringan yang memang disediakan untuk perangkat. Kalau institusimu mewajibkan sertifikat, kamu bisa memberikan file CA sebagai parameter keenam begin(). Jaringan yang membuka halaman login di browser (captive portal), seperti di hotel, asrama, dan kafe, adalah masalah lain, karena ESP32 tidak bisa mengisi halaman itu. Sebagian sekolah juga mewajibkan alamat MAC perangkat didaftarkan lebih dulu; kirimkan ke bagian IT alamat MAC yang dicetak sketch diagnostik. Di jaringan seperti ini, solusi paling praktis adalah hotspot ponselmu atau router saku kecil.
Tes hotspot ponsel: masalahnya di router atau di ESP32?
Cara tercepat mempersempit penyebabnya adalah menghubungkan ESP32 ke jaringan yang pengaturannya sepenuhnya ada di tanganmu. Hotspot ponselmu sangat cocok untuk ini:
- Beri hotspot nama pendek yang hanya terdiri dari huruf biasa dan angka (misalnya esptest), lalu atur kata sandi sederhana minimal 8 karakter (misalnya test12345).
- Di Android, atur opsi pita di pengaturan hotspot seluler (di sebagian ponsel disebut AP band atau Kecepatan dan kompatibilitas) ke 2,4 GHz dan pilih WPA2-Personal sebagai tipe keamanan.
- Di iPhone, buka Settings > Personal Hotspot dan nyalakan Allow Others to Join. Di model yang lebih baru, nyalakan juga Maximize Compatibility; opsi ini memindahkan hotspot ke 2,4 GHz. Nama hotspot adalah nama ponselnya, jadi sederhanakan di Settings > General > About > Name, dan biarkan layar Personal Hotspot tetap terbuka sampai ESP32 terhubung.
- Ganti nama jaringan dan kata sandi di sketch diagnostik dengan data hotspot, letakkan ponsel 1–2 meter dari ESP32, lalu upload sketch-nya.
- Baca kode status dan kode reason di Serial Monitor, lalu coba sketch yang sama dengan data router rumahmu.
Tafsirkan hasilnya seperti ini: kalau ESP32 terhubung ke hotspot tetapi tidak ke router rumahmu, berarti kode, board, dan catu dayamu baik-baik saja; masalahnya ada di pengaturan pita, kanal, keamanan, filter MAC, atau batas klien router. Kalau ke hotspot pun tidak bisa terhubung, masalahnya ada di sisi ESP32: ganti catu daya dan kabelnya, turunkan daya dengan setTxPower, pastikan tidak ada logam di depan antena, dan cek lagi kodenya. Tes hotspot juga cara tercepat untuk membuktikan bahwa proyek yang tidak mau terhubung di sekolah sebenarnya berfungsi.
Tes Wi-Fi dengan Raspberry Pi Pico W dan MicroPython
Raspberry Pi Pico W dan Pico 2 W juga hanya mendukung 2,4 GHz; semua saran tentang pita, kata sandi, daya, dan hotspot di artikel ini berlaku juga untuk board-board ini. Di MicroPython, kode status dibaca dengan konstanta dari modul network. Skrip di bawah berjalan tanpa diubah di Thonny, baik di ESP32 maupun Pico W. Di Pico W, skrip ini langsung berhenti menunggu kalau jaringannya tidak ditemukan atau kata sandinya salah; di ESP32, MicroPython terus mencoba lagi setelah sebagian error, jadi skrip ini mencetak status terakhir setelah 20 detik:
1import network, time
2
3AG_ADI = "EvAgi_2G" # Wi-Fi adı / network name
4SIFRE = "sifre1234" # Wi-Fi şifresi / Wi-Fi password
5
6wlan = network.WLAN(network.STA_IF)
7wlan.active(True)
8if wlan.isconnected():
9 wlan.disconnect() # eski bağlantıyı kapat / close the previous connection
10 time.sleep(1)
11wlan.connect(AG_ADI, SIFRE)
12
13durum = wlan.status()
14for saniye in range(20): # en fazla 20 sn bekle / wait up to 20 s
15 durum = wlan.status()
16 print(saniye, "durum / status:", durum)
17 if durum in (network.STAT_GOT_IP, network.STAT_NO_AP_FOUND, network.STAT_WRONG_PASSWORD):
18 break # sonuç belli, beklemeyi bırak / result is known, stop waiting
19 time.sleep(1)
20
21if durum == network.STAT_GOT_IP:
22 print("Bagli / Connected, IP:", wlan.ifconfig()[0])
23 print("RSSI:", wlan.status("rssi"), "dBm")
24elif durum == network.STAT_NO_AP_FOUND:
25 print("Ag bulunamadi / Network not found (SSID, 2.4 GHz)")
26elif durum == network.STAT_WRONG_PASSWORD:
27 print("Sifre yanlis / Wrong password")
28else:
29 print("Baglanamadi / Failed, durum / status:", durum)Di Pico W nilai status numeriknya berbeda: 3 berarti terhubung dan punya IP, 2 terhubung tetapi menunggu IP, -1 kegagalan umum, -2 jaringan tidak ditemukan, dan -3 kata sandi salah. Di ESP32 kamu justru akan melihat 1001 selama menyambung, 1010 begitu mendapat IP, dan kode reason ESP-IDF seperti 201 dan 202 kalau ada yang salah. Untuk menghindari masalah kanal 12 dan 13 di Pico W, atur kode negaramu sebelum menyambung (rp2.country('ID') untuk Indonesia, atau network.country('ID') di firmware yang lebih baru; ganti dengan kode negaramu sendiri); kalau koneksinya sesekali putus, kamu bisa mematikan mode hemat daya dengan wlan.config(pm=0xa11140). Untuk membuat web server dengan Pico W, lihat artikel web server Pico W, dan kalau kamu baru mengenal MicroPython, lihat panduan dasar-dasar MicroPython.
Masalah umum dan solusinya
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| Karakter acak di Serial Monitor | Baud rate tidak cocok | Atur Serial Monitor ke 115200 baud |
| Status 1, reason 201 | Nama jaringan salah, jaringan 5 GHz, atau terlalu jauh | Jalankan pemindai dan salin persis nama jaringan 2,4 GHz |
| Status 6, reason 15 berulang-ulang | Kata sandi salah | Ketik ulang kata sandi dengan memperhatikan huruf besar-kecil dan karakter khusus |
| Status 4 atau 6; reason 202, 210, atau 211 | Mode keamanan tidak kompatibel | Ganti router ke WPA2-Personal (AES) atau campuran WPA2/WPA3 |
| Macet di status 0 | Sudah masuk ke router tetapi tidak mendapat IP dari DHCP | Restart router, perbesar pool DHCP, atau pakai IP statis |
| Reset di WiFi.begin() dengan pesan Brownout detector was triggered | Catu daya tidak sanggup menahan lonjakan arus | Kabel pendek, adaptor minimal 1 A, 470 µF di antara 3V3 dan GND |
| Terhubung, lalu putus setelah beberapa menit (reason 200) | Sinyal lemah, modem sleep, atau masalah daya | setSleep(false), setTxPower, sketch reconnect, dekatkan ke router |
| Berfungsi di meja, tidak mau terhubung di dalam casing | Casing logam atau baterai di depan antena | Letakkan antena di tepi casing menghadap keluar, pakai casing plastik |
| Terhubung, tetapi halaman web tidak mau terbuka di ponsel | Ponsel ada di jaringan lain, atau jaringan tamu memakai client isolation | Hubungkan keduanya ke jaringan yang sama dan baca IP-nya di Serial Monitor |
| Nilai analogRead() kacau ketika Wi-Fi menyala | Sensor ada di pin ADC2, dan Wi-Fi memakai ADC2 | Pindahkan sensor ke pin ADC1, GPIO 32–39 |
| Jangkauan hanya beberapa sentimeter di ESP32-CAM atau board dengan antena eksternal | Pilihan antena diatur ke eksternal tetapi antenanya tidak terpasang | Pasang antena ke soket IPEX atau cek resistor 0 Ω pemilih antena di board |
Sudah terhubung: sekarang mau membuat apa?
- Web server dan dashboard langsung: Buat web server ESP32 dengan WebSocket yang menampilkan nilai sensor di ponselmu secara real-time.
- Jam internet: Ambil waktu dari server NTP dan tampilkan di layar.
- Layar cuaca: Ambil suhu dan kelembapan kotamu dengan API cuaca.
- Notifikasi ponsel: Kirim pesan lewat bot Telegram ketika pintu terbuka.
- Rumah pintar: Hubungkan ESP32 ke Home Assistant lewat MQTT.
- Komunikasi tanpa router: Biarkan dua board ESP32 saling bicara dengan ESP-NOW tanpa masuk ke jaringan apa pun.
- Upload nirkabel: Setelah board tertutup rapat di casing-nya, kirim kode baru lewat Wi-Fi dengan pembaruan OTA.
ESP32 yang tidak mau terhubung ke Wi-Fi memang membingungkan pada awalnya, tetapi kode status dan kode reason selalu memberi tahu di langkah mana masalahnya: 1 dan 201 berarti jaringannya tidak ditemukan, 15 dan 202 menunjuk ke kata sandi atau mode keamanan, 0 ke DHCP, sedangkan 200 atau reset mendadak ke sinyal atau catu daya. Kalau kamu baru mengenal ESP32, dasar-dasarnya ada di Apa Itu ESP32?. Di aplikasi BlueGrays kamu juga bisa menjelajahi proyek seperti koneksi Wi-Fi ESP32, web server, mDNS, jam NTP, stasiun cuaca, pembaruan OTA, dan alarm Telegram, masing-masing dengan skema rangkaian langkah demi langkah dan kode siap pakai.
Pertanyaan umum
Kenapa ESP32-ku tidak mau terhubung ke Wi-Fi?
Penyebab paling umum adalah mencoba masuk ke jaringan 5 GHz, salah ketik di nama jaringan atau kata sandi, catu daya lemah yang tegangannya anjlok ketika Wi-Fi mulai menyala, dan pengaturan keamanan router. Cetak nilai WiFi.status() dan kode reason yang dilaporkan ketika koneksi putus, maka kamu langsung tahu yang mana penyebabnya. Kalau jaringannya tidak ditemukan, kamu akan melihat 1 dan 201; dengan kata sandi yang salah, biasanya muncul 6 dan 15.
Bisakah ESP32 terhubung ke Wi-Fi 5 GHz?
ESP32 klasik, ESP32-S2, S3, C3, dan C6 hanya mendukung 2,4 GHz dan tidak pernah melihat jaringan 5 GHz ketika memindai. Model yang dual-band adalah ESP32-C5. Kalau router-mu memancarkan kedua pita dengan nama terpisah, berikan nama jaringan 2,4 GHz ke ESP32.
Apa arti WiFi.status() 6 di ESP32?
6 berarti WL_DISCONNECTED: board tidak terhubung, dan percobaan menyambung masih berjalan atau sudah gagal. Di ESP32, kata sandi yang salah sering menghasilkan nilai ini, bukan 4 (WL_CONNECT_FAILED). Untuk melihat penyebab sebenarnya, cek kode reason di event ARDUINO_EVENT_WIFI_STA_DISCONNECTED.
Kenapa ESP32-ku terus putus dari Wi-Fi?
Penyebab utama koneksi yang terus putus adalah sinyal lemah, catu daya yang tidak sanggup menahan lonjakan arus Wi-Fi, logam atau baterai di depan antena, dan pengaturan band steering router. Dekatkan board ke router, tambahkan kapasitor 100–470 µF di antara 3V3 dan GND, lalu matikan modem sleep dengan WiFi.setSleep(false). Tulis juga kodemu supaya bisa pulih sendiri dari koneksi yang putus.
Bisakah ESP32 terhubung ke hotspot ponsel?
Bisa, asalkan hotspot-nya memancar di 2,4 GHz. Di Android atur pita hotspot ke 2,4 GHz, di iPhone nyalakan Maximize Compatibility, dan buat nama hotspot tetap sederhana. Tes hotspot adalah cara tercepat untuk mengetahui apakah masalahnya di router rumahmu atau di ESP32.
Bisakah ESP32 terhubung ke eduroam atau jaringan sekolah?
ESP32 bisa masuk ke jaringan WPA2-Enterprise seperti eduroam dengan bentuk WiFi.begin(name, WPA2_AUTH_PEAP, identity, username, password) di core Arduino ESP32. Namun di jaringan yang membuka halaman login di browser (captive portal), ESP32 tidak bisa mengisi halaman itu. Sebaiknya tanyakan dulu ke bagian IT sebelum memakai jaringan institusi dan, kalau bisa, minta akun terpisah untuk perangkat.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
Di proyek ini, kita menyambungkan ESP32 ke jaringan Wi-Fi rumah dalam mode Station (STA) dengan cara yang aman dan tahan gangguan. Kita menyimpan SSID dan kata sandi di file secrets.h terpisah agar tidak bocor ke Git, menyiapkan mekanisme sambung ulang otomatis, dan menampilkan tingkat sinyal RSSI dan alamat IP di layar LCD I2C. LED bawaan bekerja sebagai indikator status. Ini adalah pengelola koneksi kelas produksi.

Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
Di proyek ini, kita mengubah ESP32 menjadi web server asinkron yang bisa kamu kendalikan dari ponsel atau komputer di jaringan Wi-Fi yang sama. Berkat library ESPAsyncWebServer, server bisa memproses beberapa permintaan bersamaan (berbeda dengan WebServer.h klasik, yang memblokir pada satu permintaan). Kamu bisa membuka alamat IP ESP32 di browser dan mengklik tombol ON/OFF (rute /on dan /off) untuk menyalakan dan mematikan LED yang tersambung ke GPIO 5.

mDNS ESP32: Mengakses Perangkat lewat bluegrays-esp.local (dengan Layar LCD)
Di proyek ini, kita menambahkan layanan mDNS (Multicast DNS) ke ESP32, sehingga perangkat bisa diakses dengan nama host seperti bluegrays-esp.local, bukan alamat IP. Meskipun IP dari DHCP berubah, perangkat selalu bisa dijangkau dengan nama yang sama. Web server kecil di perangkat menerima perintah kendali LED dari browser lewat alamat http://bluegrays-esp.local/. Layar LCD I2C menampilkan nama host, alamat IP, dan status LED.

Jam Real-Time dari Internet lewat NTP ESP32
ESP32 tersambung ke Wi-Fi dan mengambil waktu nyata dengan presisi milidetik dari server NTP (Network Time Protocol). Berkat fungsi configTzTime(), zona waktu Turki (TRT, UTC+3) otomatis diterapkan, dan pergantian DST di negara yang memakai waktu musim panas otomatis diatur dengan string POSIX TZ. Waktunya ditampilkan di Serial Monitor sekaligus di LCD I2C opsional. configTzTime() memulai layanan SNTP; sinkronisasi ulang berkala terjadi selama koneksi tersedia.

HTTPClient + API Cuaca ESP32 (dengan Layar LCD)
Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Kita mengurai respons JSON yang diterima dengan ArduinoJson v7 dan menampilkan kota, suhu, kelembapan, cuaca, dan informasi angin di layar LCD I2C dalam bahasa Turki dan Inggris. wttr.in gratis dan tidak butuh kunci API; kamu cukup memasukkan nama kota apa pun untuk mengambil kondisi cuaca terkini kota itu. Data diperbarui otomatis setiap 30 menit.

Pembaruan OTA ESP32: Instal Firmware Tanpa Kabel (dengan Layar LCD)
Di proyek ini, kamu belajar cara meng-upload firmware baru ke ESP32 lewat Wi-Fi tanpa kabel USB. Dengan library ArduinoOTA, ESP32 terlihat di jaringan dan otomatis tercantum sebagai bluegrays-ota di tab "Network port" Arduino IDE. Upload pertama dilakukan lewat USB, dan semua pembaruan berikutnya tanpa kabel; fitur penting untuk perangkat di lapangan. Layar LCD I2C menampilkan status Wi-Fi, alamat IP, nama host, persentase upload OTA, dan pesan error.

Penghitung WebSocket ESP32 (2 Tombol + LCD + Web Real-Time)
Di proyek ini, dua tombol yang tersambung ke ESP32 (GPIO 5 menghitung naik, GPIO 4 menghitung turun) mengubah sebuah penghitung. Nilainya langsung diperbarui di LCD I2C 16x2 sekaligus, lewat dukungan WebSocket ESPAsyncWebServer, di setiap browser yang tersambung tanpa memuat ulang halaman. Alih-alih polling HTTP, dipakai satu koneksi yang tetap terbuka, dan ESP32 mengirim nilai baru ke semua orang dengan ws.textAll().

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

