WiFi modes (STA/AP), ESP32 sebagai Access Point, web server, dan REST API.
ESP32 bisa beroperasi dalam 3 mode WiFi:
3 WiFi modes: STA (client), AP (server), AP+STA (kedua)
Di Arduino IDE: Sketch → Include Library → Manage Libraries → install ESPAsyncWebServer dan AsyncTCP.
C++ (Arduino)#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h>
// Access Point credentials
const char* ssid = "ESP32_IoT_AP";
const char* password = "12345678";
#define LED_PIN 2
#define LDR_PIN 34
AsyncWebServer server(80);
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
// Start Access Point
WiFi.softAP(ssid, password);
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP()); // biasanya 192.168.4.1
// ===== REST API Routes =====
// GET /api/status — baca status semua
server.on("/api/status", HTTP_GET, [](AsyncWebServerRequest *request) {
JsonDocument doc;
doc["led"] = digitalRead(LED_PIN) ? "ON" : "OFF";
doc["cahaya"] = analogRead(LDR_PIN);
doc["uptime"] = millis() / 1000;
doc["clients"] = WiFi.softAPgetStationNum();
String response;
serializeJson(doc, response);
request->send(200, "application/json", response);
});
// POST /api/led — kontrol LED
server.on("/api/led", HTTP_POST, [](AsyncWebServerRequest *request) {},
NULL,
[](AsyncWebServerRequest *request, uint8_t *data,
size_t len, size_t index, size_t total) {
JsonDocument doc;
deserializeJson(doc, data, len);
const char* state = doc["state"];
if (strcmp(state, "ON") == 0) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
request->send(200, "application/json",
"{\"status\":\"OK\"}");
});
// GET / — simple web page
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
String html = "<!DOCTYPE html><html><body style='background:#0f172a;color:#fff;font-family:sans-serif;text-align:center;padding:40px'>";
html += "<h1>ESP32 IoT Server</h1>";
html += "<p>LED: " + String(digitalRead(LED_PIN) ? "ON" : "OFF") + "</p>";
html += "<a href='/api/status'>View JSON API</a>";
html += "</body></html>";
request->send(200, "text/html", html);
});
server.begin();
Serial.println("Web server started!");
}
void loop() {
// Server berjalan async, tidak perlu code di loop
}
ESP32 AP Mode dengan REST API — bisa diakses via browser atau Flutter
http://192.168.4.1http://192.168.4.1/api/status → lihat JSON response