Panduan · 15 mnt baca

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.

Board pengembangan ESP32 dan antena PCB
Board pengembangan ESP32: jalur zig-zag di ujung modul berpelindung logam itu adalah antena PCB. Logam, baterai, atau kabel di atas atau tepat di samping area ini bisa melemahkan koneksi secara nyata.

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:

LangkahApa yang terjadi?Status dan reason kalau macet
1. PemindaianESP32 mencari nama jaringan di kanal 2,4 GHzWL_NO_SSID_AVAIL (1), reason 201
2. Autentikasi dan asosiasiRouter menerima atau menolak ESP32WL_CONNECT_FAILED (4) atau WL_DISCONNECTED (6), reason 202 atau 203
3. 4-way handshakeKunci yang diturunkan dari kata sandi dibandingkanWL_DISCONNECTED (6) dengan reason 15; WL_CONNECTION_LOST (5) dengan reason 204
4. DHCPRouter memberi ESP32 sebuah alamat IPMacet di WL_IDLE_STATUS (0)
Setelah terhubungRouter terus mengirim paket beaconKalau 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.

KodeKonstantaArtiCek dulu
0WL_IDLE_STATUSSudah masuk ke router tetapi belum punya alamat IPNormal selama beberapa detik; kalau berlanjut, DHCP
1WL_NO_SSID_AVAILTidak ditemukan jaringan dengan nama ituNama jaringan, pita 2,4 GHz, jarak
2WL_SCAN_COMPLETEDPemindaian jaringan sudah selesaiTidak berkaitan dengan koneksi
3WL_CONNECTEDTerhubung dan punya alamat IPSemua beres
4WL_CONNECT_FAILEDRouter menolak koneksiKata sandi, mode keamanan, filter MAC
5WL_CONNECTION_LOSTKoneksi yang sudah terbentuk terputusKekuatan sinyal, catu daya, antena
6WL_DISCONNECTEDTidak terhubung; masih mencoba atau percobaannya gagalKode reason
254WL_STOPPEDStation Wi-Fi dihentikan (core 3.x)Panggil WiFi.mode(WIFI_STA)
255WL_NO_SHIELDWi-Fi belum dijalankan (core 2.x)Panggil WiFi.mode() atau WiFi.begin()
Dengan kata sandi yang salah, kebanyakan orang mengira akan muncul WL_CONNECT_FAILED (4), tetapi ESP32 sering menampilkan WL_DISCONNECTED (6) dan terus mencoba lagi di latar belakang. Itu karena banyak router membiarkan handshake habis waktu begitu saja ketika kata sandinya salah (reason 15). Kesalahan klasik lainnya adalah memanggil WiFi.begin() berulang-ulang di dalam loop penantian: setiap panggilan mengulang dari awal percobaan yang sedang berjalan, dan board sering tidak pernah terhubung. Panggil begin() sekali saja, lalu cukup baca statusnya.

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.

C++ (Arduino IDE)
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:

ReasonNamaApa artinya?Solusi
2AUTH_EXPIREWaktu autentikasi habisSinyal lemah atau router sibuk; dekatkan board, restart router
5ASSOC_TOOMANYBatas jumlah klien router sudah penuhLepaskan perangkat yang tidak dipakai atau naikkan batasnya
8ASSOC_LEAVEESP32 sendiri yang keluar dari jaringanKodemu memanggil WiFi.disconnect(); ini normal
154WAY_HANDSHAKE_TIMEOUTHandshake kata sandi tidak bisa diselesaikanPaling sering kata sandi salah; cek kata sandi dan mode keamanannya
200BEACON_TIMEOUTBeacon dari router berhenti datangSinyal lemah atau tegangan anjlok; antena, catu daya, setTxPower
201NO_AP_FOUNDTidak ditemukan jaringan dengan nama iniEjaan SSID, jaringan 5 GHz, jarak, jaringan tersembunyi, kanal 12 dan 13
202AUTH_FAILAutentikasi ditolakKata sandi atau mode keamanan yang tidak kompatibel seperti Enterprise
203ASSOC_FAILRouter menolak asosiasiFilter MAC atau mode nirkabel seperti khusus 802.11ax
204HANDSHAKE_TIMEOUTWaktu handshake habisKata sandi salah atau sinyal sangat lemah
210, 211NO_AP_FOUND_W_COMPATIBLE_SECURITY, NO_AP_FOUND_IN_AUTHMODE_THRESHOLDJaringan 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.

BoardPita Wi-FiCatatan
ESP32 (WROOM-32, DevKit), ESP32-S2, ESP32-S3Hanya 2,4 GHz802.11 b/g/n
ESP32-C3Hanya 2,4 GHzBoard Super Mini murah mungkin perlu daya pancar yang lebih rendah
ESP32-C6Hanya 2,4 GHzMendukung Wi-Fi 6 (802.11ax), tetapi tetap hanya di 2,4 GHz
ESP32-C52,4 GHz dan 5 GHzChip dual-band pertama Espressif
ESP8266 (NodeMCU, Wemos D1 mini, ESP-01)Hanya 2,4 GHz802.11 b/g/n
Raspberry Pi Pico W dan Pico 2 WHanya 2,4 GHzChip nirkabel CYW43439
Arduino Uno R4 WiFiHanya 2,4 GHzESP32-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:

C++ (Arduino IDE)
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.
Sebelum mulai mengutak-atik kata sandi, cari tahu dulu apakah masalahnya di nama atau di kata sandi. Kalau muncul reason 201, jaringannya tidak pernah ditemukan dan mengubah-ubah kata sandi tidak ada gunanya. Kalau muncul reason 15, 202, atau 204, jaringannya ditemukan tetapi kata sandi atau mode keamanannya tidak diterima.

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.

Regulator tegangan AMS1117 3,3 V
AMS1117: inilah regulator yang menurunkan 5 V menjadi 3,3 V di kebanyakan board pengembangan ESP32. Agar bekerja dengan benar, regulator ini butuh selisih sekitar 1,1–1,3 V antara input dan output.
Sumber dayaCocok?Kenapa?
Port USB di belakang komputer, kabel pendek dan tebalBiasanya yaPort USB 2.0 memberi 500 mA; kabel pendek mengurangi susut tegangan
USB di panel depan, USB hub, atau kabel panjang dan tipisBisa bermasalahHambatan kabel dan kontak menurunkan tegangan ketika arus melonjak
Charger ponsel 5 V minimal 1 AYaMenyisakan ruang yang lega untuk lonjakan arus
Pin 3.3V Arduino UnoTidakPin ini hanya bisa memberi sekitar 50 mA
Sel Li-ion 3,7 V langsung ke pin 5V boardTidakKarena dropout AMS1117, output-nya turun di bawah 3 V
Sel Li-ion dengan konverter boost 5 V atau regulator 3,3 V low-dropoutYaMemberi 3,3 V yang stabil meskipun baterainya makin habis
Output 3,3 V modul daya breadboard MB102Umumnya yaBeri daya dari adaptor dengan arus yang cukup dan tambahkan kapasitor
Di proyek Wi-Fi, pasang kapasitor elektrolit 100–470 µF di antara pin 3V3 dan GND board, sedekat mungkin dengan board, ditambah kapasitor keramik 100 nF di sebelahnya. Kaki panjang (+) kapasitor elektrolit masuk ke 3V3 dan sisi yang ada garis di badannya masuk ke GND; kapasitor elektrolit yang terpasang terbalik akan panas dan bisa meletus. Cara kerja kapasitor bisa kamu baca di Apa Itu Kapasitor?, dan cara memberi daya yang benar ke board-mu ada di panduan Cara Memberi Daya ke Arduino.

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().

KonstantaDayaKapan dipakai
WIFI_POWER_19_5dBm19,5 dBmMendekati bawaan; jangkauan terjauh
WIFI_POWER_15dBm15 dBmPercobaan pertama untuk masalah ringan
WIFI_POWER_11dBm11 dBmBiasanya cukup kalau router ada di ruangan yang sama
WIFI_POWER_8_5dBm8,5 dBmNilai yang paling sering disarankan untuk ESP32-C3 Super Mini
WIFI_POWER_5dBm5 dBmUntuk 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:

C++ (Arduino IDE)
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.

C++ (Arduino IDE)
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() {}
Di ESP32 urutan parameternya adalah IP, gateway, subnet mask, DNS1, DNS2, berbeda dengan sebagian library WiFi Arduino (IP, DNS, gateway, subnet). Kalau urutannya tertukar, ESP32 masuk ke jaringan tetapi tidak bisa mengakses internet. Kami juga menyarankan untuk mengisi alamat DNS: kalau DNS tidak berfungsi, ESP32 muncul di router tetapi tidak bisa menerjemahkan nama domain, sehingga tidak bisa menjangkau layanan seperti API cuaca, NTP, atau Telegram. Memberikan IP yang sama ke dua perangkat membuat keduanya putus koneksi secara acak.

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:

C++ (Arduino IDE)
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:

  1. Beri hotspot nama pendek yang hanya terdiri dari huruf biasa dan angka (misalnya esptest), lalu atur kata sandi sederhana minimal 8 karakter (misalnya test12345).
  2. 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.
  3. 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.
  4. Ganti nama jaringan dan kata sandi di sketch diagnostik dengan data hotspot, letakkan ponsel 1–2 meter dari ESP32, lalu upload sketch-nya.
  5. 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:

Python
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

GejalaKemungkinan penyebabSolusi
Karakter acak di Serial MonitorBaud rate tidak cocokAtur Serial Monitor ke 115200 baud
Status 1, reason 201Nama jaringan salah, jaringan 5 GHz, atau terlalu jauhJalankan pemindai dan salin persis nama jaringan 2,4 GHz
Status 6, reason 15 berulang-ulangKata sandi salahKetik ulang kata sandi dengan memperhatikan huruf besar-kecil dan karakter khusus
Status 4 atau 6; reason 202, 210, atau 211Mode keamanan tidak kompatibelGanti router ke WPA2-Personal (AES) atau campuran WPA2/WPA3
Macet di status 0Sudah masuk ke router tetapi tidak mendapat IP dari DHCPRestart router, perbesar pool DHCP, atau pakai IP statis
Reset di WiFi.begin() dengan pesan Brownout detector was triggeredCatu daya tidak sanggup menahan lonjakan arusKabel 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 dayasetSleep(false), setTxPower, sketch reconnect, dekatkan ke router
Berfungsi di meja, tidak mau terhubung di dalam casingCasing logam atau baterai di depan antenaLetakkan antena di tepi casing menghadap keluar, pakai casing plastik
Terhubung, tetapi halaman web tidak mau terbuka di ponselPonsel ada di jaringan lain, atau jaringan tamu memakai client isolationHubungkan keduanya ke jaringan yang sama dan baca IP-nya di Serial Monitor
Nilai analogRead() kacau ketika Wi-Fi menyalaSensor ada di pin ADC2, dan Wi-Fi memakai ADC2Pindahkan sensor ke pin ADC1, GPIO 32–39
Jangkauan hanya beberapa sentimeter di ESP32-CAM atau board dengan antena eksternalPilihan antena diatur ke eksternal tetapi antenanya tidak terpasangPasang antena ke soket IPEX atau cek resistor 0 Ω pemilih antena di board
Ikuti urutannya ketika mencari masalah: pertama pakai tes hotspot untuk mengetahui apakah masalahnya di router atau di board, lalu cek dengan pemindai apakah jaringannya terlihat, kemudian baca kode status dan kode reason dari sketch diagnostik, dan baru setelah itu beralih ke catu daya dan pengaturan router. Ubah satu hal setiap kali. Kalau kamu curiga dengan pilihan pin-mu, peta pin board-mu bisa kamu lihat di alat diagram pin; kalau kamu memakai ESP32-CAM, lihat artikel ESP32-CAM untuk detail antenanya.

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.

Lihat semua proyek
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
#127Mahir

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.

4.4(21)
34
Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
#129Mahir

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.

4.8(16)
26
mDNS ESP32: Mengakses Perangkat lewat bluegrays-esp.local (dengan Layar LCD)
#131Mahir
Premium

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.

4.8(14)
23
Jam Real-Time dari Internet lewat NTP ESP32
#128Mahir
Premium

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.

4.5(13)
21
HTTPClient + API Cuaca ESP32 (dengan Layar LCD)
#133Mahir
Premium

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.

4.7(13)
20
Pembaruan OTA ESP32: Instal Firmware Tanpa Kabel (dengan Layar LCD)
#132Mahir
Premium

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.

4.6(14)
22
Penghitung WebSocket ESP32 (2 Tombol + LCD + Web Real-Time)
#130Mahir
Premium

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().

4.5(14)
23
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

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.

0.0(0)
9