#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 selesai
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
Menyambungkan ESP32 ke jaringan nirkabel rumahmu adalah langkah pertama setiap proyek yang online. Begitu tersambung, lampu di board tetap menyala dan layar kecil bergantian setiap tiga detik menampilkan alamat board di jaringan dan seberapa kuat sinyalnya, digambarkan dengan kata-kata dari sangat bagus sampai sangat lemah. Jika koneksi putus, lampu berkedip dan board mencoba tersambung lagi setiap 30 detik.

Video

Skema rangkaian

Koneksi Wi-Fi STA ESP32 (dengan Layar LCD) - Circuit

Kode sumber

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

FAQ

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.