본문 바로가기

ESP32

esp32 자동 타이머 스위치

반응형

요구 사항

 
  • ESP32 38P 핀
  • DS3231 RTC 모듈(권장)
  • 1~16채널 5V 릴레이
  • 암-암 듀폰 와이어
  • DS3231 없이도 NTP/RTC 동기화를 위한 안정적인 Wi-Fi 연결
  • 5V 3-5A 전원 공급 장치

 

깃허브 소스 사이트 

 

Optional

  • 5V UPS (DS3231 없이 RTC 시간 유지)
  • 솔리드 스테이트 릴레이(SSR DC-AC) (고부하 설정)
  • 미니 냉각 팬 (ESP32 냉각용)

도서관

  • 아두이노Json
  • NTP클라이언트
  • RTClib 1.14.1

설치

⚠️다운로드 및 설치

ESP32 윈도우/리눅스 드라이버

플래셔

안드로이드(otg)

윈도우

리눅스

esptool --port <PORT> write_flash 0x0 esp32-firmware-0x0.bin
 

윈도우/리눅스 브라우저

플래시 펌웨어

  • 펌웨어를 다운로드 하고 플래싱하세요.
  • 오프셋 주소
esp32-dump-0x0.bin: 0x0
 

WiFi 키

  • WiFi SSID:ESP32_16CH_Timer_Switch
  • 비밀번호:ESP32-admin

활성화

최초 설정

° 온라인

  • Wifi settings집 와이파이에 연결하면 모든 것이 정상적으로 작동할 것입니다 .

° 오프라인

  • 해당 위치로 이동하여 Time settings클릭하면 Sync Browser 모든 것이 정상적으로 작동합니다.

릴레이 네이밍

  • 릴레이 이름을 두 번 클릭하여 편집하세요.

시간 설정 (국가)

⚠️해당 국가 시간에 맞춰 설정하세요. 예를 들어 필리핀의 경우 (UTC+8.0) 28800초입니다.

  • 해당 국가를 검색 gmt offsets in seconds하고 시간 -> GMT 오프셋에 붙여넣으세요.

입장

  • mDNS:esp32-16ch-timer-switch.local
  • 캡티브 포털:Auto redirect
  • 게이트웨이:192.168.4.1
  • WAN: 192.168.1.123 ° 글로벌:Enable Port Forwarding on your router to access anywhere

⚠️메모

  • 잘못된 개방형 Wi-Fi 네트워크 SSID에 연결하지 마십시오. 연결 끊김 현상이 발생할 수 있습니다. 해결 방법은 Wi-Fi 스테이션 모드를 끄는 것입니다.

다시 놓기

  • BOOT 버튼을 5초 동안 길게 눌러 공장 초기화를 진행하세요.

재시작

  • EN 버튼을 눌러 재시작하세요

16채널 GPIO 연결

RELAY  |  ESP32 38P
VCC  _____ 5VIN 
IN1  _____ 15  Relay 1
IN2  _____ 2   Relay 2
IN3  _____ 4   Relay 3
IN4  _____ 5   Relay 4
IN5  _____ 18  Relay 5
IN6  _____ 19  Relay 6
IN7  _____ 3   Relay 7
IN8  _____ 1   Relay 8
IN9  _____ 23  Relay 9
IN10 _____ 13  Relay 10
IN11 _____ 14  Relay 11
IN12 _____ 27  Relay 12
IN13 _____ 26  Relay 13
IN14 _____ 25  Relay 14
IN15 _____ 33  Relay 15
IN16 _____ 32  Relay 16
GND  _____ GND
 
  • 추가 GPIO 핀

최대 16개의 릴레이, GPIO 핀 재할당을 위한 예비용으로만 사용 가능

IN17 _____ 16  Relay 17
IN18 _____ 17  Relay 18
IN19 _____ 21  Relay 19 (assign if no ds3231)
IN20 _____ 22  Relay 20 (assign if no ds3231)
 

DS3231 GPIO 연결

DS3231 | ESP32 38P
VCC → 3.3V
SDA → 21
SCL → 22
GND → GND

 

 

모든 기능

ESP32 16채널 릴레이 스마트 스위치 - 전체 설명서

📋 목차


개요

ESP32 16채널 릴레이 스마트 스위치는 가정, 기업 및 농장 자동화를 위해 설계된 생산 등급 자동화 시스템입니다. 주요 특징은 다음과 같습니다.

  • 개별 스케줄링이 가능한 16개의 독립적인 중계 채널
  • Wi-Fi를 통해 접속 가능한 웹 기반 구성 인터페이스
  • DS3231 RTC는 전원 사이클 전반에 걸쳐 시간 유지를 위한 장치입니다.
  • NTP 시간 동기화 (대체 서버 사용)
  • 브라우저 기반 시간 동기화는 최후의 수단입니다.
  • 자가 복구 기능 으로 안정적인 작동 보장
  • 펌웨어 변경 없이 GPIO 재구성

특징

핵심 기능

특징설명

16개의 릴레이 릴레이당 8개의 스케줄을 통한 독립적인 제어
웹 인터페이스 브라우저를 통한 전체 구성
mDNS 지원 접근 방법:http://esp32.local
NTP 동기화 자동 시간 동기화
DS3231 RTC 배터리 백업 실시간 시계
수동 재정의 일정 변경 없는 임시 통제
영구 저장소 전원이 꺼져도 모든 설정이 유지됩니다.

고급 기능

  • 액티브 로우/하이 구성 - 릴레이별 또는 전체 레벨 제어
  • 유연한 근무 시간 - 매일, 평일, 주말, 특정 월 등 원하는 날짜에 근무 가능
  • 야간 근무 일정 - 자정을 포함하는 근무 일정 지원
  • 와이파이 스캔 - 네트워크 검색 및 연결 자동 일시 중지
  • 브라우저 시간 동기화 - NTP를 사용할 수 없을 때의 대체 기능
  • 자가 복구 - WiFi, mDNS, DNS, 웹 서버의 자동 복구
  • 임계 상태 복구 - 전원 손실 후 릴레이 상태 복원
  • 공장 초기화 - 버튼 또는 웹 인터페이스를 통해

하드웨어 요구 사항

필수 구성 요소

요소사양수량

ESP32 보드 ESP32-WROOM-32 (38핀) 1
릴레이 모듈 16채널, 5V/12V 1
DS3231 RTC I2C 인터페이스 1
전원 공급 장치 5V @ 2A (최소) 1
점퍼 와이어 여성-여성 20세 이상

선택적 구성 요소

  • 릴레이 전원 라인에 100µF 커패시터를 사용하여 안정성을 확보합니다.
  • 푸시 버튼 - 하드웨어 공장 초기화용 (부팅 버튼 내장)
  • LED 표시등 - 상태 시각화용

핀 연결

ESP32 핀연결

GPIO21 DS3231 SDA
GPIO22 DS3231 SCL
GPIO0 부팅 버튼(공장 초기화)
GPIO1-33 릴레이 1~16 (핀 표 참조)

참고 : GPIO 6~11은 내부 플래시 메모리에 사용되므로 사용할 수 없습니다.


핀 구성

기본 릴레이 핀

계전기GPIO계전기GPIO

1 15 9 23
2 2 10 13
3 4 11 14
4 5 12 27
5 18 13 26
6 19 14 25
7 3 15 33
8 1 16 32

릴레이 핀 사용자 지정

이 시스템은 재컴파일 없이 동적 GPIO 재할당을 지원합니다.

  1. GPIO 구성 페이지 로 이동합니다.
  2. 드롭다운 메뉴를 사용하여 릴레이를 추가/제거하세요.
  3. 릴레이 별 활성 레벨 (낮음/높음) 전환
  4. 균일한 동작을 위해 글로벌 액티브 모드를 활성화하세요 .

활성 레벨 설명 :

  • 액티브 로우(Active LOW) : 핀이 로우(0V)일 때 릴레이가 작동합니다.
  • 액티브 하이(Active HIGH) : 핀이 하이(3.3V/5V)일 때 릴레이가 작동합니다.

설치 및 설정

1. 펌웨어 업로드

# Using Arduino IDE
1. Install ESP32 board support
2. Install required libraries:
   - WiFi.h (built-in)
   - WebServer.h (built-in)
   - DNSServer.h (built-in)
   - Preferences.h (built-in)
   - ArduinoJson (version 6)
   - NTPClient (by Fabrice Weinberg)
   - RTClib (by Adafruit)
3. Select ESP32 board (e.g., ESP32 Dev Module)
4. Compile and upload
 

2. 첫 번째 부팅

ESP32는 Wi-Fi 액세스 포인트를 생성합니다.

환경값

SSID ESP32_16CH_Timer_Switch
비밀번호 ESP32-admin
IP 주소 192.168.4.1

3. 초기 설정

  1. ESP32의 Wi-Fi 네트워크에 연결하세요
  2. 브라우저를 열어http://192.168.4.1
  3. 와이파이 페이지 로 이동
  4. 네트워크를 검색하고 Wi-Fi에 연결하세요.
  5. 시간대와 NTP 서버를 설정하세요.
  6. 필요에 따라 릴레이를 구성하십시오.

4. 기기 접근

네트워크에 연결한 후:


웹 인터페이스 가이드

내비게이션 구조

┌─────────────────────────────────────────────────────────────┐
│  [Relays]  [WiFi]  [Time]  [AP]  [GPIO]  [System]                      │
├─────────────────────────────────────────────────────────────┤
│                                                                        │
│  Status Indicators:  ● WiFi Status   ● Time Source                     │
│                      Current Time: HH:MM:SS                            │
└─────────────────────────────────────────────────────────────┘
 

1. 릴레이 페이지

특징:

  • 실시간 릴레이 상태 (켜짐/꺼짐/수동)
  • 수동 조작 버튼 (켜짐/꺼짐/자동)
  • 일정 관리 (릴레이당 8개의 일정)
  • 릴레이 이름을 두 번 클릭하여 이름을 변경하세요.
  • 시각적 일정 편집기

일정 옵션:

  • 시작/정지 시간 (초 단위까지)
  • 요일 선택
  • 해당 월의 일수 선택 (1-31일)
  • 활성화/비활성화 토글
  • 야간 일정 지원

2. 와이파이 페이지

특징:

  • 현재 연결 상태를 확인하세요
  • 사용 가능한 네트워크를 검색합니다.
  • SSID와 비밀번호를 입력하세요
  • RSSI 신호 강도 표시기
  • 설정 변경 시 자동 재연결

3. 시간 페이지

특징:

  • NTP 서버 구성
  • GMT 오프셋(초)
  • 일광 절약 시간제 적용
  • 동기화 간격(1~24시간)
  • 수동 NTP 동기화 버튼
  • 브라우저 시간 동기화 (대체 기능)

4. AP 페이지

특징:

  • 액세스 포인트 SSID 변경
  • AP 비밀번호를 설정하세요 (최소 8자)
  • 와이파이 채널(1~13)을 선택하세요.
  • SSID 표시 여부 전환(숨김 모드)

5. GPIO 페이지

특징:

  • 현재 릴레이 핀을 확인하세요
  • 릴레이 채널 추가/제거
  • 릴레이별 활성 상태(낮음/높음) 전환
  • 전역 활성 모드 재정의
  • 기본 핀 설정으로 재설정

6. 시스템 페이지

특징:

  • 시스템 정보 표시
    • IP 주소(STA 및 AP)
    • 힙 메모리 해제
    • 가동 시간
    • WiFi RSSI
    • 시간 소스 상태
    • NTP 동기화 기간
    • 표류 보정
    • RTC 존재
  • 서비스 확인 버튼
  • 공장 초기화 버튼

API 참조

REST API 엔드포인트

방법엔드포인트설명

얻다 /api/relays 모든 릴레이 주 및 일정을 확인하세요
우편 /api/relay/manual 수동 릴레이 상태 설정
우편 /api/relay/reset 릴레이를 자동 모드로 복귀
우편 /api/relay/save 일정 설정을 저장합니다
우편 /api/relay/name 릴레이 이름 설정
얻다 /api/time 현재 시간과 상태를 확인하세요
우편 /api/time/browser-sync 브라우저에서 시간 동기화
얻다 /api/wifi WiFi 설정 가져오기
우편 /api/wifi 와이파이 설정 저장
우편 /api/wifi/scan 와이파이 스캔 시작
얻다 /api/wifi/scan 스캔 결과 보기
얻다 /api/ntp NTP 설정 가져오기
우편 /api/ntp NTP 설정 저장
우편 /api/ntp/sync NTP 동기화 트리거
얻다 /api/ap AP 설정 가져오기
우편 /api/ap AP 설정 저장
얻다 /api/gpio GPIO 구성 가져오기
우편 /api/gpio/save GPIO 설정을 저장합니다.
우편 /api/gpio/add 릴레이 핀을 추가합니다.
우편 /api/gpio/delete 릴레이 핀 삭제
우편 /api/gpio/toggle-active-low 활성 레벨 전환
얻다 /api/gpio/global-mode 전역 활성 모드 가져오기
우편 /api/gpio/global-mode 전역 활성 모드 설정
얻다 /api/system 시스템 정보를 가져오세요
우편 /api/reset 검증 서비스
우편 /api/factory-reset 공장 초기화 기기

API 호출 예시

릴레이 수동 상태 설정

curl -X POST http://esp32.local/api/relay/manual \
  -H "Content-Type: application/json" \
  -d '{"relay":0,"state":true}'
 

브라우저에서 시간 동기화

curl -X POST http://esp32.local/api/time/browser-sync \
  -H "Content-Type: application/json" \
  -d '{"utc_epoch":1700000000}'
 

릴레이 상태 가져오기

curl http://esp32.local/api/relays
 

응답 예시

[
  {
    "state": true,
    "manual": false,
    "name": "Living Room Light",
    "pin": 15,
    "schedules": [
      {
        "startHour": 6,
        "startMinute": 0,
        "startSecond": 0,
        "stopHour": 22,
        "stopMinute": 0,
        "stopSecond": 0,
        "enabled": true,
        "days": 62,
        "monthDays": 0
      }
    ]
  }
]
 

구성 시스템

NVS 저장소(환경설정)

모든 설정은 ESP32의 비휘발성 저장소(NVS)에 저장됩니다.

구성크기설명

sysConfig 약 150바이트 시스템 설정(Wi-Fi, NTP, RTC)
extConfig 약 40바이트 확장 설정(채널, 동기화 간격)
relayConfigs 약 3KB 스케줄이 포함된 16가지 릴레이 구성
gpioConfig 약 68바이트 GPIO 핀 매핑
criticalState 약 44바이트 마지막으로 알려진 릴레이 상태

시스템 구성 구조

struct SystemConfig {
    uint16_t magic;           // Validation (0x1234)
    uint8_t version;          // Config version (9)
    char sta_ssid[32];        // WiFi SSID
    char sta_password[64];    // WiFi password
    char ap_ssid[32];         // AP SSID
    char ap_password[32];     // AP password
    char ntp_server[48];      // NTP server
    int32_t gmt_offset;       // GMT offset (seconds)
    int32_t daylight_offset;  // DST offset (seconds)
    time_t last_rtc_epoch;    // Last RTC epoch
    float rtc_drift;          // Drift compensation
    char hostname[32];        // mDNS hostname
};
 

확장 구성

struct ExtConfig {
    uint8_t magic;            // Validation (0xEC)
    uint8_t ap_channel;       // AP channel (1-13)
    uint8_t ntp_sync_hours;   // NTP sync interval
    uint8_t ap_hidden;        // Hidden SSID flag
    uint8_t global_active_mode; // 0=per-relay, 1=global LOW, 2=global HIGH
    uint8_t reserved[27];     // Future use
};
 

시간 관리

시간 소스 계층 구조

┌─────────────────────────────────────────────────────────────┐
│                    TIME SOURCE PRIORITY                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   1. NTP Server     ←── Highest accuracy                    │
│         ↓                                                   │
│   2. DS3231 RTC     ←── Battery-backed, survives reboot    │
│         ↓                                                   │
│   3. Browser Sync   ←── Manual fallback                     │
│         ↓                                                   │
│   4. Internal RTC   ←── Least accurate                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘
 

표류 보정

시스템이 자동으로 드리프트 보정값을 계산하고 적용합니다.

  • 시간에 따른 NTP 시간과 내부 RTC 시간을 비교합니다.
  • 드리프트의 이동 평균값을 유지합니다(0.95~1.05 범위).
  • 시간 계산을 동적으로 조정합니다.
  • 드리프트 값을 NVS에 저장하여 지속성을 확보합니다.

RTC 기능

기능설명

initRTC() DS3231을 I2C(GPIO21/22)로 초기화합니다.
syncInternalRTC() 외부 소스에서 내부 시간을 설정합니다.
getCurrentEpoch() 현재 UTC 시점과 그 이후의 시간차를 구하세요.
immediateDS3231Sync() DS3231 강제 업데이트
performRTCReabase() 내부 RTC의 드리프트 보정을 위한 기준점 재설정

NTP 대체 서버

static const char* NTP_SERVERS[] = {
    "time.google.com",
    "time.windows.com", 
    "time.cloudflare.com",
    "time.facebook.com"
};
 

스케줄 엔진

일정 구조

각 릴레이에는 다음과 같은 8개의 독립적인 스케줄이 있습니다 .

struct TimerSchedule {
    uint8_t startHour[8];     // Start hour (0-23)
    uint8_t startMinute[8];   // Start minute (0-59)
    uint8_t startSecond[8];   // Start second (0-59)
    uint8_t stopHour[8];      // Stop hour (0-23)
    uint8_t stopMinute[8];    // Stop minute (0-59)
    uint8_t stopSecond[8];    // Stop second (0-59)
    bool enabled[8];          // Schedule enabled flag
    uint8_t days[8];          // Day of week bitmask (0-127)
    uint32_t monthDays[8];    // Day of month bitmask (0-0x7FFFFFFF)
};
 

요일 비트마스크

낮조금값매크로

일요일 0 1 << 0 DAY_SUNDAY
월요일 1 1 << 1 DAY_MONDAY
화요일 2 1 << 2 DAY_TUESDAY
수요일 3 1 << 3 DAY_WEDNESDAY
목요일 4 1 << 4 DAY_THURSDAY
금요일 5 1 << 5 DAY_FRIDAY
토요일 6 1 << 6 DAY_SATURDAY

사전 정의된 마스크:

  • DAY_ALL = 0x7F(매일)
  • DAY_WEEKDAYS = 0x3E(월요일~금요일)
  • DAY_WEEKENDS = 0x41(토요일-일요일)

월 일 비트마스크

  • 비트 0 = 1일차
  • 비트 1 = 2일차
  • ...
  • 비트 30 = 31일차

예시 : 0x00000001= 해당 월의 1일만

스케줄 로직

IF schedule enabled AND day matches AND month day matches THEN
    IF start_time == stop_time:
        → ALWAYS ON during matching days
    ELSE IF start_time < stop_time:
        → ON between start and stop (same day)
    ELSE:
        → ON overnight (start → midnight → stop)
 

야간 일정 예시

환경값

시작 시간 22:00:00
시간을 멈추세요 06:00:00
월요일-금요일
결과 오후 10시부터 다음날 오전 6시까지 켜짐

일정 처리

  • 캐시 간격 : 1초 (가벼운 시간 확인용)
  • 처리 간격 : 250ms (상태 평가)
  • 디바운스 시간 : 500ms (릴레이 신호 잡음 방지)

자가 치유 시스템

모니터링 대상 구성 요소

요소복구 조치간격

와이파이 백오프를 사용한 자동 재연결 10초
mDNS 서비스 재개 안내 60초
DNS 실시간 재구성 60초
웹서버 건강 확인 30초
AP IP 주소가 0.0.0.0이면 재시작합니다. 필요에 따라
NTP 서버 오류 발생 시 서버 순환 30초
RTC 재초기화 필요에 따라

위기 상황 보호

이 시스템은 릴레이 상태와 수동 오버라이드 설정을 NVS에 저장합니다.

  • 매직 값 : 0xDEADBEEF(검증)
  • 체크섬 : 상태와 타임스탬프의 XOR 연산
  • 저장 빈도 : 변경 사항이 있을 경우 5분마다 저장
  • 복원 : 전원 켜짐 시 또는 복구 후

복구 로직

// Simplified recovery flow
if (WiFi disconnected && !connecting && !scanning) {
    health.wifiFailures++;
    if (health.wifiFailures >= 3) {
        WiFi.begin(ssid, password);  // Reconnect
    }
}

if (mDNS not announced in 5 minutes) {
    MDNS.addService("http", "tcp", 80);  // Re-announce
}

// Full health check every 30 minutes
if (now - lastFullHealthCheck > 30 minutes) {
    verifyRelayStates();
    saveCriticalState();
}
 

GPIO 관리

유효한 GPIO 핀

ESP32에는 릴레이 제어에 적합한 특정 핀이 있습니다.

사용 가능없는

1, 2, 3, 4, 5 6, 7, 8, 9, 10, 11
12, 13, 14, 15 24 (크리스탈)
18, 19, 21, 22 28, 29, 30, 31 (ADC2)
23, 25, 26, 27 (ESP32-WROOM-32 전용)
32, 33  

참고 : GPIO21 및 GPIO22는 DS3231 RTC I2C용으로 예약되어 있습니다.

글로벌 활성 모드

방법값행동

릴레이별 0 각 릴레이는 자체적인 액티브 로우(active Low) 설정을 사용합니다.
글로벌 LOW 1 핀이 LOW일 때 모든 릴레이가 활성화됩니다.
글로벌 하이 2 핀이 HIGH일 때 모든 릴레이가 활성화됩니다.

활성 레벨 예시

Active LOW (Default):
- To turn ON relay: digitalWrite(pin, LOW)
- To turn OFF relay: digitalWrite(pin, HIGH)

Active HIGH:
- To turn ON relay: digitalWrite(pin, HIGH)
- To turn OFF relay: digitalWrite(pin, LOW)
 

릴레이 추가/제거

  1. 릴레이 추가 : 기본 설정으로 새 채널이 추가되었습니다.
  2. 릴레이 제거 : 번호가 높은 릴레이를 낮은 번호로 이동시킵니다.
  3. 일정 보존 : 일정은 원래 중계 번호와 함께 유지됩니다.
  4. 최대 릴레이 개수 : 16개 (하드웨어 제한)

공장 초기화

방법 1: 하드웨어 버튼(BOOT/GPIO0)

  1. BOOT 버튼을 길게 누르세요
  2. 5초 동안 계속 누르고 계세요
  3. 시리얼 출력에서 ​​리셋이 확인되면 손을 떼세요.
  4. 기기가 공장 초기 설정으로 재부팅됩니다.

방법 2: 웹 인터페이스

  1. 시스템 페이지 로 이동
  2. 공장 초기화 버튼을 클릭하세요
  3. 작업을 확인하세요
  4. 기기가 재시작 없이 재설정됩니다

무엇이 초기화되나요?

목동작 재설정

와이파이 자격 증명 클리어됨 (AP 모드 활성화됨)
AP 설정 기본 설정으로 복원됨
NTP 설정 기본 설정으로 복원됨
릴레이 구성 모든 일정이 취소되었습니다.
GPIO 핀 기본 매핑으로 복원됨
mDNS 호스트 이름 "esp32"로 재설정
릴레이 이름 "릴레이 X"로 재설정
수동 재정의 클리어됨
RTC 드리프트 1.0으로 재설정

무엇이 보존되는가

아무것도 아닙니다 - 공장 초기화는 모든 사용자 설정을 완전히 삭제하는 것입니다.


문제 해결

일반적인 문제점 및 해결책

와이파이 연결 실패

징후해결책

잘못된 비밀번호 스캔 기능을 사용하여 네트워크가 존재하는지 확인하십시오.
숨겨진 SSID 텍스트 필드에 SSID를 수동으로 입력하세요.
2.4GHz 전용 ESP32는 5GHz 네트워크를 지원하지 않습니다.
신호가 너무 약합니다 RSSI 값을 확인하십시오 (> -80dBm이어야 합니다).
DHCP 문제 고정 IP는 지원되지 않습니다(DHCP만 사용 가능).

시간이 동기화되지 않습니다

징후해결책

NTP 실패 브라우저 동기화 버튼을 대체 수단으로 사용하세요.
잘못된 시간대 GMT 오프셋(시간이 아닌 초 단위)을 확인하십시오.
일광절약시간제 미적용 daylight_offset을 수동으로 설정하세요
RTC가 감지되지 않았습니다. I2C 배선을 확인하십시오 (GPIO21=SDA, GPIO22=SCL).

릴레이가 응답하지 않음

징후해결책

활성 레벨이 잘못되었습니다 GPIO 페이지에서 액티브 로우/하이 설정을 확인하세요.
수동 재정의 활성화됨 자동 버튼을 클릭하여 해제하세요.
일정 기능이 활성화되지 않았습니다. 확인란이 선택되어 있는지 확인하십시오.
날짜/월이 잘못되었습니다 요일과 월의 일 선택을 확인하세요
핀 충돌 다른 하드웨어에서 GPIO를 사용하지 않는지 확인하십시오.

웹 인터페이스 문제

징후해결책

연결할 수 없습니다 AP 모드 사용: ESP32_16CH_Timer_Switch에 연결
mDNS가 작동하지 않습니다 IP 주소를 통해 직접 접속
느린 응답 시스템 페이지에서 사용 가능한 힙 크기를 확인하세요(<20KB = 문제 발생).
API 타임아웃 대용량 일정 데이터를 직렬화하는 데 시간이 걸립니다.

LED 상태 표시등

지시자색상의미

와이파이 도트 녹색 와이파이에 연결됨
와이파이 도트 빨간색 와이파이 연결이 끊겼습니다
시간 소스 도트 녹색 NTP 기준 시간
시간 소스 도트 파란색 브라우저/RTC에서 제공하는 시간
시간 소스 도트 노란색 시간 출처 없음

시리얼 디버그 출력

// Enable serial debugging (115200 baud)
// Monitor output includes:
- Boot sequence information
- WiFi connection status
- NTP sync attempts
- RTC detection
- GPIO configuration
- Memory warnings (<20KB free)
- Recovery actions
 

기술 사양

시스템 사양

매개변수값

맥스 릴레이 16
릴레이별 일정 8
일정 세분화
NTP 동기화 간격 1~24시간 (설정 가능)
내부 시간 편차 0.95 - 1.05 (자동 보정)
스케줄 캐시 간격 1초
릴레이 디바운스 시간 500ms
웹 서버 포트 80
DNS 서버 포트 53

메모리 사용량

요소대략적인 크기

프로그램 플래시 약 250KB
전역 변수 약 15KB
NVS 스토리지 약 3.5KB
힙(유휴) 약 180KB
최소 자유 더미 설정 가능한 경고 (20KB)

네트워크 사양

규약세부

와이파이 모드 STA + AP를 동시에
AP 채널 1-13 (기본값: 6)
AP IP 192.168.4.1
mDNS 서비스 http://esp32.local
TCP 타임아웃 10초
최대 WiFi 클라이언트 수 4

타이밍 상수

작업타임아웃/간격

와이파이 연결 20초
NTP 요청 5초
NTP 재시도 30초
와이파이 확인 10초
RTC 동기화 60초
RTC 리베이스 5분
NTP 동기화 간격 1시간 (기본값)
메모리 정리 30초
위기 상태 저장 (더러울 경우) 5분

핀 제약 조건

GPIO강제

0 부팅 버튼(공장 초기화)
1 UART0 TX (디버그)
2 온보드 LED
3 UART0 RX
6-11 내장 플래시
12 부팅 모드(아래로 당기기)
21 I2C SDA(DS3231)
22 I2C SCL(DS3231)

버전 기록

버전변경 사항

v9 최신 릴리스
  - 글로벌 활성 모드 지원
  - 브라우저 시간 동기화 대체 기능
  - 자가 치유 시스템 개선
  - 위기 상태 보호
  - 동적 GPIO 구성
  - 월/일 일정 지원
  - 야간 근무 일정 지원
  - WiFi 스캔 일시 중지 시스템

크레딧


GPIO 핀 사용자 지정

sketch.ino 파일에서 이 줄을 찾으세요.

  • GPIO 핀을 추가, 제거 또는 재할당할 수 있습니다.
// Change GPIO PIN
  15, // IN1  - Relay 1
  2,  // IN2  - Relay 2
  4,  // IN3  - Relay 3
  5,  // IN4  - Relay 4
  18, // IN5  - Relay 5
  19, // IN6  - Relay 6
  3,  // IN7  - Relay 7
  1,  // IN8  - Relay 8
  23, // IN9  - Relay 9
  13, // IN10 - Relay 10
  14, // IN11 - Relay 11
  27, // IN12 - Relay 12
  26, // IN13 - Relay 13
  25, // IN14 - Relay 14
  33, // IN15 - Relay 15
  32  // IN16 - Relay 16
 
// Change GPIO PIN
const DEFAULT_PINS = [15,2,4,5,18,19,3,1,23,13,14,27,26,25,33,32];
 

16, 17, 21, 22validPins 처럼 GPIO 핀을 더 추가할 수 있습니다 .

// Change GPIO PIN
int validPins[] = {15, 2, 4, 16, 17, 5, 18, 19, 3, 1, 23, 13, 14, 27, 26, 25, 33, 32};
 

펌웨어 빌드

GitHub Actions를 사용하여 펌웨어 바이너리를 자동 빌드합니다.

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩