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.

Video
Skema rangkaian

Kode sumber
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
4// ─────────────────────────────────────────
5// ESP32 bergabung ke jaringan Wi-Fi sebagai station (STA); alamat IP dan
6// kekuatan sinyal RSSI tampil bergantian di LCD I2C 16x2 setiap 3 s. Jika
7// koneksi putus, ESP32 mencoba lagi setiap 30 s. LED bawaan menunjukkan
8// status koneksi.
9//
10// Pin:
11// GPIO 2 -> LED bawaan (status koneksi)
12// GPIO 21 -> SDA LCD, GPIO 22 -> SCL LCD
13// LCD VCC -> 5V (VIN), GND -> GND
14
15#include <Wire.h>
16#include <LiquidCrystal_I2C.h>
17#include <WiFi.h>
18
19// Data login Wi-Fi. Jika secrets.h ada di folder sketch (berisi WIFI_SSID dan WIFI_PASS), file itu
20// dipakai; jangan masukkan ke Git. Jika tidak, default Wokwi berlaku; untuk hardware asli isi SSID
21// dan kata sandimu sendiri!
22#if __has_include("secrets.h")
23#include "secrets.h"
24#else
25const char* WIFI_SSID = "Wokwi-GUEST";
26const char* WIFI_PASS = ""; // Wokwi-GUEST tidak punya kata sandi
27#endif
28
29// Pengaturan pin dan waktu
30#define LED_PIN 2 // LED onboard
31#define WIFI_TIMEOUT_MS 15000 // Batas waktu koneksi awal
32#define WIFI_RECOVER_MS 30000 // Interval sambung ulang
33#define SCREEN_SWITCH_MS 3000 // Periode ganti layar
34
35LiquidCrystal_I2C lcd(0x27, 16, 2);
36
37unsigned long lastReconnect = 0; // Percobaan terakhir (ms)
38unsigned long lastScreenSwitch = 0; // Ganti layar terakhir (ms)
39bool showIpScreen = true; // Layar IP atau RSSI
40
41// RSSI -> kualitas sinyal
42const char* rssiQuality(int rssi) {
43 if (rssi >= -55) return "Mukemmel";
44 if (rssi >= -65) return "Iyi";
45 if (rssi >= -75) return "Orta";
46 if (rssi >= -85) return "Zayif";
47 return "Cok zayif";
48}
49
50// Layar: menyambung
51void showConnecting() {
52 lcd.clear();
53 lcd.setCursor(0, 0);
54 lcd.print("Baglaniliyor...");
55 lcd.setCursor(0, 1);
56 lcd.print("Connecting...");
57}
58
59// Layar: terputus
60void showDisconnected() {
61 lcd.clear();
62 lcd.setCursor(0, 0);
63 lcd.print("Baglanti yok");
64 lcd.setCursor(0, 1);
65 lcd.print("Disconnected");
66}
67
68// Layar: alamat IP
69void showIpInfo() {
70 lcd.clear();
71 lcd.setCursor(0, 0);
72 lcd.print("IP:");
73 lcd.setCursor(0, 1);
74 lcd.print(WiFi.localIP());
75}
76
77// Layar: RSSI (dBm) dan kualitas sinyal
78void showRssiInfo() {
79 int rssi = WiFi.RSSI();
80 lcd.clear();
81 lcd.setCursor(0, 0);
82 lcd.print("RSSI:");
83 lcd.print(rssi);
84 lcd.print(" dBm");
85 lcd.setCursor(0, 1);
86 lcd.print(rssiQuality(rssi));
87}
88
89// Menyambung dalam mode STA, menunggu hingga WIFI_TIMEOUT_MS; mengembalikan true jika tersambung
90bool connectWiFi() {
91 WiFi.mode(WIFI_STA);
92 WiFi.setAutoReconnect(true);
93 WiFi.setSleep(false); // Hemat daya mati
94 WiFi.setHostname("bluegrays-esp32");
95 WiFi.begin(WIFI_SSID, WIFI_PASS);
96
97 unsigned long start = millis();
98 while (WiFi.status() != WL_CONNECTED && millis() - start < WIFI_TIMEOUT_MS) {
99 delay(500);
100 }
101 return WiFi.status() == WL_CONNECTED;
102}
103
104void setup() {
105 pinMode(LED_PIN, OUTPUT);
106 digitalWrite(LED_PIN, LOW);
107
108 // Pin I2C default DevKit V1
109 Wire.begin(21, 22);
110 lcd.init();
111 lcd.backlight();
112
113 // Layar pembuka 3 s
114 lcd.setCursor(3, 0);
115 lcd.print("BlueGrays");
116 lcd.setCursor(2, 1);
117 lcd.print("Wi-Fi STA v1");
118 delay(3000);
119
120 // Jika tersambung, LED menyala dan IP ditampilkan
121 showConnecting();
122 if (connectWiFi()) {
123 digitalWrite(LED_PIN, HIGH);
124 showIpInfo();
125 lastScreenSwitch = millis();
126 } else {
127 showDisconnected();
128 }
129}
130
131void loop() {
132 // Tanpa koneksi LED berkedip dan sambung ulang dicoba setiap 30 s
133 if (WiFi.status() != WL_CONNECTED) {
134 digitalWrite(LED_PIN, (millis() / 500) % 2);
135 if (millis() - lastReconnect > WIFI_RECOVER_MS) {
136 showConnecting();
137 WiFi.disconnect();
138 WiFi.reconnect();
139 lastReconnect = millis();
140 delay(3000);
141 if (WiFi.status() == WL_CONNECTED) {
142 digitalWrite(LED_PIN, HIGH);
143 showIpInfo();
144 lastScreenSwitch = millis();
145 } else {
146 showDisconnected();
147 }
148 }
149 return;
150 }
151
152 // Tersambung: LED tetap menyala (setAutoReconnect juga bisa memulihkan koneksi sendiri)
153 digitalWrite(LED_PIN, HIGH);
154
155 // Selama tersambung, layar IP dan RSSI bergantian
156 if (millis() - lastScreenSwitch > SCREEN_SWITCH_MS) {
157 lastScreenSwitch = millis();
158 showIpScreen = !showIpScreen;
159 if (showIpScreen) showIpInfo();
160 else showRssiInfo();
161 }
162
163 delay(50);
164}
165FAQ
Kenapa kita menyimpan kata sandi Wi-Fi di file terpisah?
Jika kamu tidak memasukkan file secrets.h ke Git (.gitignore), kata sandimu tidak akan terbuka ketika kamu membagikan kodemu. Ini praktik terbaik yang dipakai di proyek sungguhan.
Bisakah ESP32 tersambung ke Wi-Fi 5 GHz?
Tidak, ESP32 hanya mendukung jaringan 2,4 GHz. Pastikan pita 2,4 GHz modemmu aktif; jika ada masalah dengan jaringan dua pita, buat nama (SSID) terpisah untuk pita 2,4 GHz.
Apa arti nilai RSSI?
Ini adalah kekuatan sinyal, diukur dalam dBm. −50 dBm sangat bagus, −70 dBm masih bisa diterima, dan apa pun di bawah −80 dBm lemah dan koneksinya bisa putus.
Apa yang terjadi ketika koneksi hilang?
Kode secara teratur mengecek status koneksi dan mencoba tersambung lagi jika koneksi hilang. Sambung ulang otomatis ini memastikan perangkat kembali ke jaringan dengan sendirinya meskipun modem restart.
