Skip to main content
Most problems with this demo fall into one of three categories: the ESP32 cannot reach the Wi-Fi network, the Python listener cannot reach the ESP32, or the LED hardware is not behaving as expected. The items below cover every common failure mode with concrete steps to resolve each one.
If the LED stays blue for roughly 15 seconds and then turns yellow/orange, the ESP32 failed to join the network. Work through these checks:
  1. Open ESP32Station.ino and confirm the credentials match your lab network exactly — ssid and password are case-sensitive.
  2. Open the Serial Monitor at 115200 baud and watch the output. The sketch prints the IP address when it connects successfully:
    [✓] Wi-Fi bağlandı!
    [✓] IP Adresi: 192.168.1.253
    
  3. Some networks restrict new devices. Try disabling WPA2 Enterprise requirements or connect the lab router to a simple WPA2-Personal network for testing.
  4. The connection attempt retries 30 times with a 500 ms delay between each try — a total timeout of 15 seconds. If your router is slow to respond, you can increase the retry limit in setup():
    if (deneme > 30) {  // increase this value
    
If WiFi.config() fails to apply the static IP, the sketch falls back to DHCP and the IP shown in Serial Monitor will differ from 192.168.1.253. Always read the actual IP from the monitor before updating the listener script.
If the listener prints repeated connection errors, the PC and ESP32 cannot see each other on the network.
  1. Same network check — In Station mode both the PC and ESP32 must be connected to the same router. In AP mode the PC must be connected to the HACK_DEMO Wi-Fi hotspot, not your regular network.
  2. Firewall — Temporarily disable Windows Firewall and your antivirus for the duration of the test. Both can silently block outbound requests calls to local IPs.
  3. Ping test — Confirm reachability before running the Python script:
    # Station mode
    ping 192.168.1.253
    
    # AP mode
    ping 192.168.4.1
    
  4. IP mismatch — Open the Serial Monitor and confirm the ESP32’s actual IP. If DHCP was used instead of the static assignment, update ESP32_IP in dinleyici_station.py to match:
    ESP32_IP  = "192.168.1.253"   # replace with actual IP from Serial Monitor
    ESP32_URL = f"http://{ESP32_IP}/durum"
    
The listener script executes privileged system commands (bcdedit, reg delete, del on system paths, taskkill). Windows blocks all of these unless the process has administrator rights.
  1. Right-click PowerShell or Command Prompt and choose “Run as Administrator”.
  2. Navigate to the script directory and run:
    python dinleyici_station.py
    
  3. The script itself checks for admin rights at startup using ctypes.windll.shell32.IsUserAnAdmin() and exits immediately with a clear message if the check fails — so you will always see a prompt before any damage occurs.
The same requirement applies to the compiled .exe. Double-clicking the file from an unprivileged session will either silently fail or show the [HATA] message. Right-click the .exe and choose “Run as administrator” instead.
If the ESP32 boots but the LED shows no color at all, work through these steps:
  1. Confirm the pin definition at the top of the sketch is 8:
    #define LED_PIN 8
    
  2. Open Arduino IDE → Tools → Manage Libraries and confirm Adafruit NeoPixel is installed. The sketch will not compile without it.
  3. Upload the minimal test sketch from the LED indicators reference to isolate the issue to hardware versus firmware.
  4. Confirm your board selection is Tools → Board → ESP32C6 Dev Module. Other ESP32 variants (ESP32, ESP32-S2, ESP32-S3) place the built-in LED on a different pin or have no WS2812B at all — using the wrong board profile will cause ledRenk() to target the wrong GPIO.
If the listener keeps printing Sinyal bekleniyor: 'BEKLE' indefinitely, the trigger command never reached the ESP32.
  1. Confirm your browser or curl client is on the same network as the ESP32.
  2. Navigate to the correct base IP in your browser:
    • Station mode: http://192.168.1.253
    • AP mode: http://192.168.4.1
  3. If the control panel loads but the button does nothing, visit the trigger endpoint directly:
    curl http://192.168.1.253/tetikle
    # or
    curl http://192.168.4.1/tetikle
    
  4. Open the Serial Monitor and look for the confirmation line that handleTetikle() prints when it runs:
    [!] SIL komutu gönderildi!
    
    If this line does not appear, the HTTP request never reached the server. If it does appear but the Python listener still shows BEKLE, confirm the listener is polling the same IP and port (80).
The compiled executable has the same administrator requirement as the source script and the same antivirus exposure as any unsigned binary.
  1. Right-click the .exe in the dist/ folder and choose “Run as administrator”.
  2. Build the executable with:
    pyinstaller --onefile -w dinleyici_station.py
    
    The -w flag suppresses the console window. Remove it during development so you can see error output.
  3. If your antivirus quarantines or blocks the file, add a folder exception for the dist/ directory in your antivirus settings for the duration of the test. Unsigned single-file PyInstaller executables frequently trigger heuristic detections.
Only run the executable on the designated test machine in an isolated lab environment. The payload executes immediately when the ESP32 sends SIL — there is no additional confirmation prompt inside the exe.

Build docs developers (and LLMs) love