로그인회원가입

[DIY] ESP32-C3와 MicroPython으로 만드는 스마트 USB 선풍기 컨트롤러 (터치·리모컨·웹·예약)

일반 USB 선풍기를 단순히 켜고 끄는 것을 넘어, 터치 제어, IR 리모컨, 웹 UI 실시간 모니터링, 예약 스케줄 기능까지 한 번에 제어할 수 있는 스마트 컨트롤러 모듈을 제작했습니다.

MicroPython의 비동기 처리(uasyncio)와 웹소켓(WebSocket) 통신을 활용하여 반응성을 극대화하고, 동작 로그는 외부 데이터베이스(PHP/MySQL)로 연동되도록 구성했습니다.

🛠️ 주요 스펙 및 기능 정의

  • 메인 MCU: ESP32-C3 SuperMini (MicroPython 기반)
  • 전원 제어: N-Channel MOSFET (GPIO 제어 기반 USB VBUS 라인 switching)
  • 제어 방식 (4-Way Multi-Control):
    1. 터치 버튼: GPIO 1번의 capacitive touch 센싱을 활용한 즉각적인 제어
    2. IR 리모컨: 37.9kHz 적외선 수신 모듈을 통한 IR 명령 처리
    3. 웹 Dashboard: 비동기 웹서버 + WebSocket 기반의 실시간 상태 확인 및 Web UI 제어
    4. 스케줄링: Cron 형태의 예약 스케줄러를 통한 자동 On/Off
  • 데이터 연동: iFrame 기반의 Web UI 구조 및 외부 PHP/MySQL 서버로의 동작 상태 로그 전송

🔌 하드웨어 구성 및 회로 포인트

USB 선풍기의 전원을 안전하게 제어하기 위해 MOSFET 스위칭 회로를 기본 구조로 잡았습니다.

무료 회원가입 하고 코드 보기
  • MOSFET Switch (GPIO 0): Low-power MCU 신호로 USB 선풍기의 5V 전류를 손실 없이 제어하기 위해 Gate 드라이브 회로를 구성했습니다.
  • Touch Sensor (GPIO 1): 물리 버튼 없이 깔끔한 외관을 위해 내부 Touch 센서를 활용했습니다.
  • IR 수신부 (GPIO 2): 리모컨 신호 인터럽트 처리 및 디코딩.

💻 소프트웨어 아키텍처 및 핵심 코드

웹 인터페이스의 실시간 반응성과 물리 입력(터치/리모컨) 간의 상태 동기화를 위해 MicroPython의 uasyncio를 기반으로 설계했습니다.

1. 비동기 이벤트 루프 및 상태 동기화

터치, IR 수신, 웹소켓 신호, 예약 스케줄러가 하나의 state_manager를 바라보도록 하여, 어느 매체에서 켜고 끄든 모든 인터페이스(웹 UI, LED 등)에 즉시 동일한 상태가 반영되도록 처리했습니다.

2. WebSocket 기반 실시간 웹 UI

HTTP 폴링(Polling) 방식의 지연을 없애기 위해 웹소켓을 직접 구축했습니다.

  • 웹 페이지 접속 시 현재 상태 동기화
  • 웹 버튼 클릭 시 즉시 MOSFET 제어 및 다른 웹 클라이언트로 상태 패킷 브로드캐스트
  • iFrame 구조를 통해 기존 메인 웹 대시보드나 홈 서버 페이지에 유연하게 삽입 가능

3. 외부 PHP / MySQL 데이터 로깅

상태 변경(On/Off) 이벤트가 발생할 때마다 비동기 HTTP POST 요청으로 외부 PHP API를 호출하여 데이터베이스에 동작 이력을 남깁니다.

Python

무료 회원가입 하고 코드 보기

🌟 제작 및 시운전 결과

  1. 터치 반응성: 반응 지연 없이 즉각적으로 On/Off 토글이 작동합니다.
  2. 리모컨 연동: 가정용 남는 IR 리모컨의 특정 키를 맵핑하여 멀리서도 손쉽게 제어 가능합니다.
  3. 웹 제어 & 모니터링: 스마트폰이나 PC 웹 브라우저에서 웹소켓을 통해 실시간으로 선풍기 상태가 갱신되고 제어됩니다.
  4. 예약 동작: 밤에 일정 시간 후 꺼지도록 스케줄을 걸어두는 용도로 유용하게 활용할 수 있습니다.

💡 마치며

ESP32-C3의 작은 폼팩터와 MicroPython의 강력한 라이브러리 ecosystem 덕분에 단순한 USB 선풍기를 완성도 높은 IoT 스마트 가전으로 업그레이드할 수 있었습니다.

코멘트

답글 남기기