The ESP32-C6 runs an Arduino WebServer on port 80 and exposes four HTTP endpoints. All endpoints use GET and are available in both Station mode (where the ESP32 joins an existing Wi-Fi network) and AP mode (where the ESP32 creates its own hotspot). You can reach the server from any device on the same network using a browser, curl, or the Python requests library.
In Station mode the ESP32 uses the static IP 192.168.1.253 (configurable in the sketch via local_IP). In AP mode the IP is always 192.168.4.1 — this is assigned automatically by the ESP32 soft-AP stack and cannot be changed without modifying the firmware.
Endpoint Summary
| Endpoint | Method | Content-Type | Description |
|---|
/ | GET | text/html | HTML control panel with trigger and reset buttons |
/durum | GET | text/plain | Poll current state — returns BEKLE or SIL |
/tetikle | GET | text/html | Set state to SIL, turn LED red, return confirmation page |
/sifirla | GET | text/html | Reset state to BEKLE, turn LED green, return confirmation page |
GET /
Returns the full HTML control panel page rendered by handleRoot(). The page displays the current system state and provides two clickable buttons that link to /tetikle and /sifirla. You can open this URL in any browser on the same network to operate the demo without using the command line.
| Field | Value |
|---|
| Method | GET |
| Path | / |
| Response type | text/html |
| Response body | Full HTML page with control buttons |
Example:
curl http://192.168.4.1/
# → Full HTML control panel
GET /durum
Returns the current internal state of the ESP32 as plain text. The value is either BEKLE (waiting — no command issued) or SIL (delete — destruction triggered). This is the endpoint the Python listener scripts poll every 1 second to decide whether to execute the destructive payload.
| Field | Value |
|---|
| Method | GET |
| Path | /durum |
| Response type | text/plain |
| Response body | BEKLE or SIL |
Example:
# Station mode
curl http://192.168.1.253/durum
# → BEKLE
# AP mode
curl http://192.168.4.1/durum
# → BEKLE
GET /tetikle
Sets the internal durum variable to "SIL" and switches the RGB LED to red (255, 0, 0). Returns an HTML confirmation page styled as a “system breach” alert. After you visit this endpoint, any polling client that calls /durum will receive SIL and begin its payload execution.
| Field | Value |
|---|
| Method | GET |
| Path | /tetikle |
| Response type | text/html |
| Side effect | Sets durum = "SIL", LED turns red |
| Serial output | [!] SIL komutu gönderildi! |
curl example:
curl http://192.168.4.1/tetikle
# → HTML "SİSTEM İHLALİ" confirmation page
Python example:
import requests
# Poll status (Station mode)
response = requests.get("http://192.168.1.253/durum")
print(response.text) # BEKLE or SIL
# AP mode trigger
requests.get("http://192.168.4.1/tetikle")
GET /sifirla
Resets the internal durum variable back to "BEKLE" and switches the RGB LED to green (0, 255, 0). Returns an HTML confirmation page confirming the reset. Use this endpoint to re-arm the demo for another run without reflashing the ESP32 or power-cycling it.
| Field | Value |
|---|
| Method | GET |
| Path | /sifirla |
| Response type | text/html |
| Side effect | Sets durum = "BEKLE", LED turns green |
| Serial output | [*] Durum sıfırlandı: BEKLE |
Example:
# Station mode
curl http://192.168.1.253/sifirla
# → HTML "SİSTEM SIFIRLANDI" confirmation page
# AP mode
curl http://192.168.4.1/sifirla