Skip to content

acidsound/wolpu3h

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📡 WOLPU3H: Supabase-Powered Wake-on-LAN for ESP32/ESP8266

WOLPU3H는 ESP32 또는 ESP8266과 Supabase를 결합하여 어디서든 원격으로 로컬 네트워크의 PC를 깨울 수 있는 Wake-on-LAN 관리 시스템입니다. 전용 웹 대시보드를 통해 간편하게 제어할 수 있습니다.

🚀 주요 기능

  • 멀티 플랫폼 지원: ESP32-S3 및 ESP8266(NodeMCU) 기종을 모두 지원합니다.
  • 실시간 기기 모니터링 (Heartbeat): 연결된 모든 ESP 기기의 상태(Online/Offline), IP 주소, 힙 메모리 잔량 등을 대시보드에서 실시간으로 확인할 수 있습니다.
  • 모던 웹 대시보드: GitHub Pages로 배포 가능한 글래스모피즘 디자인의 관리 페이지.
  • 간편한 설정 (SoftAP): 기기 최초 부팅 시 스마트폰으로 접속하여 WiFi 및 API 설정 가능.
  • 시리얼 커맨드 제어: 시리얼 모니터를 통해 실시간 설정 조회 및 초기화 지원.
  • 보안 및 안정성: HTTPS 통신 및 API Key 인증을 사용하며, SSL 메모리 최적화를 통해 안정적인 폴링을 보장합니다.

🛠 1. Supabase 설정 (Backend)

  1. Supabase 프로젝트를 생성합니다.

  2. SQL Editor로 이동하여 프로젝트 루트의 setup.sql 내용을 실행합니다.

    • wol_requests (요청) 및 device_health (상태) 테이블이 생성되고 보안 정책(RLS)이 설정됩니다.
  3. Project Settings > API에서 아래 정보를 복사해둡니다:

    • Project URL (예: https://xyz...supabase.co)
    • Anon Key (Public API Key)
  4. (선택) 자동 정리 설정:

    • pg_cron 확장을 활성화하고 setup.sql 하단의 스케줄러 쿼리를 실행하면, 30일이 지난 완료된 요청을 자동으로 삭제합니다. (최근 10건은 유지)

🔌 2. ESP32-S3 설정 (Firmware)

라이브러리 설치

Arduino IDE의 라이브러리 관리자에서 다음을 설치하세요:

  • ArduinoJson (Benoit Blanchon) - v6 이상 권장

컴파일 및 업로드

  1. firmware/wolpu3h/wolpu3h.ino 파일을 엽니다.
  2. Tools > Board에서 ESP32S3 Dev Module을 선택합니다.
  3. Tools > USB CDC On BootEnabled로 설정합니다 (시리얼 로그 확인용).
  4. 업로드 버튼을 눌러 보드에 구워줍니다.

초기 설정 (네트워크 연결)

  1. 보드 부팅 후 스마트폰 WiFi 목록에서 WOLPU3H에 접속합니다.
  2. 브라우저에서 192.168.4.1에 접속합니다.
  3. 공유기 WiFi 정보와 Supabase 정보를 입력하고 Save를 누릅니다.
  4. (또는) 시리얼 모니터에서 set ssid:이름, set pass:비번 등 명령어로 설정 후 save 하세요.

🔄 설정 초기화 (Factory Reset)

WiFi를 변경하거나 설정을 다시 하고 싶은 경우 다음 방법을 사용하세요:

  1. 물리 버튼 사용: 기기의 **BOOT 버튼(GPIO 0)**을 5초 이상 꾹 누르고 있습니다. LED가 깜빡거리며 초기화된 후 재부팅됩니다.
  2. 시리얼 명령어 사용: 시리얼 모니터에 factory-reset을 입력합니다.

🔌 3. ESP8266 설정 (NodeMCU / Wemos D1 Mini)

컴파일 및 업로드

  1. firmware/wolpu3h_8266/wolpu3h_8266.ino 파일을 엽니다.
  2. Tools > Board에서 NodeMCU 1.0 (ESP-12E Module) 등을 선택합니다.
  3. 업로드 모드 진입:
    • 보드의 FLASH 버튼을 누른 상태에서 RESET 버튼을 딸깍 누른 뒤 FLASH 버튼을 뗍니다.
    • 자작 보드인 경우 GPIO 0을 GND에 연결한 상태로 전원을 켭니다.
  4. 업로드 버튼을 눌러 보드에 구워줍니다. (업로드 후 GPIO 0 연결 해제 및 리셋 필요)

💻 4. 웹 매니저 사용법 (Frontend)

직접 호스팅할 필요 없이 아래 공식 페이지를 통해 바로 관리할 수 있습니다. 입력한 Supabase 설정은 서버에 저장되지 않고 오직 사용자의 브라우저(localStorage)에만 안전하게 보관됩니다.

👉 WOLPU3H Live Dashboard

  1. (선택사항) 이 저장소를 fork 하거나 clone 하여 직접 GitHub Pages로 배포할 수도 있습니다.
  2. 배포된 URL 또는 위 Live 링크로 접속합니다.
  3. 우측 하단 Settings 버튼을 눌러 내 Supabase URL과 Anon Key를 입력합니다.
  4. Active Devices 섹션에서 내 ESP 기기가 online 상태인지 확인합니다. (최초 연결 시 약 1분 소요)
  5. Target MAC Address에 깨우고 싶은 PC의 MAC 주소를 입력하고 Send Magic Packet을 누릅니다.
  6. 현장에 있는 ESP 기기가 이를 감지하면 즉시 PC를 깨우고 상태를 done으로 변경합니다.


🏗 다중 기기 관리 (Device ID)

하나의 Supabase 프로젝트로 여러 장소의 PC를 제어할 수 있습니다. 각 ESP 기기에게 고유한 Device ID를 부여하여 특정 위치의 기기만 동작하게 만듭니다.

graph TD
    User([사용자 웹]) -->|요청: did='office'| DB[(Supabase)]
    
    DB -->|Polling| ESP_A["ESP32 #1 <br/> (did: home)"]
    DB -->|Polling| ESP_B["ESP32 #2 <br/> (did: office)"]
    
    ESP_A --x|무시| PC1[집 PC]
    ESP_B -->|WoL 발송!| PC2[사무실 PC]
Loading
  1. 설정 방법:

    • ESP 기기: 시리얼 명령어 set did:내방이름 또는 초기 설정 페이지에서 입력.
    • Web: 'Device ID' 칸에 깨우고 싶은 기기의 이름을 입력 (비워두면 모든 기기가 반응할 수 있음).
  2. 작동 원리:

    • Device ID가 일치하는 요청만 해당 ESP 기기가 수행하고 done 처리합니다.
    • Device IDNULL인 요청은 모든 ESP 기기가 동시에 반응합니다(브로드캐스트).

🧑‍💻 개발자를 위한 API 사용법 (CURL)

웹 대시보드 없이 터미널이나 자동화 스크립트에서 직접 PC를 깨울 수 있습니다.

# 특정 기기(office)를 통해 PC 깨우기
curl -X POST 'https://YOUR_PROJECT_ID.supabase.co/rest/v1/wol_requests' \
  -H "apikey: YOUR_ANON_KEY" \
  -H "Authorization: Bearer YOUR_ANON_KEY" \
  -H "Content-Type: application/json" \
  -H "Prefer: return=minimal" \
  -d '{ "target_mac": "AA:BB:CC:DD:EE:FF", "device_id": "office" }'

💡 시리얼 명령어 (Serial 커맨드)

  • help: 명령어 목록 보기
  • show: 현재 설정 확인
  • set <key>:<val>: 설정 변경 (예: set did:office_01)
  • save: 변경사항 저장 및 재부팅
  • factory-reset: 모든 초기화

⚠️ 트러블슈팅 및 주의사항

1. ESP8266 업로드 시 설정 초기화 방지

ESP8266 버전은 **GPIO 0(FLASH 핀)**을 5초 이상 누르면 공장 초기화가 되도록 설계되어 있습니다. 펌웨어 업데이트를 위해 GPIO 0을 쇼트(GND 연결)할 때, 다음을 주의하세요:

  • 핵심: GPIO 0을 쇼트한 후 5초 이내에 리셋(REST) 버튼을 누르세요.
  • 5초가 지나기 전에 리셋을 누르면 소프트웨어 로직이 즉시 정지되므로 설정값이 삭제되지 않고 안전하게 하드웨어 업로드 모드로 진입합니다.

2. Supabase 연결 실패 (Code: -1)

  • ESP8266은 메모리가 부족하여 SSL 연결이 불안정할 수 있습니다. 펌웨어에서 SSL 버퍼 최적화를 적용했으나, 여전히 실패한다면 전원 공급이 충분한지(USB 케이블 등) 확인하세요.

3. WiFi 목록이 나타나지 않을 때

  • 설정 페이지(192.168.4.1)를 새로고침하여 다시 스캔을 시도하세요.
  • ESP8266이 AP 모드와 Station 모드를 동시에 수행하느라 스캔이 늦어질 수 있습니다.

📝 라이선스

MIT License

About

Supabase-Powered Wake-on-LAN for ESP32/ESP8266

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors