DIP 스위치 설정 가이드¶
ESP32-S3 UWB 보드의 10-position DIP 스위치 매핑. 모든 설정은 전원이 켜진 상태에서 실시간 적용됩니다 (500 ms 디바운스 후 STM32 재설정).

1. 전체 매핑¶
| SW | GPIO | 기능 | ON (HIGH) | OFF (LOW) |
|---|---|---|---|---|
| SW1 | IO11 | 인덱스 bit 0 (LSB) | +1 | 0 |
| SW2 | IO10 | 인덱스 bit 1 | +2 | 0 |
| SW3 | IO9 | 인덱스 bit 2 | +4 | 0 |
| SW4 | IO46 | 인덱스 bit 3 | +8 | 0 |
| SW5 | IO3 | 인덱스 bit 4 | +16 | 0 |
| SW6 | IO8 | 인덱스 bit 5 (MSB) | +32 | 0 |
| SW7 | IO7 | 데이터 레이트 | 850k | 6.8M (기본) |
| SW8 | IO6 | LAN (Ethernet) | 활성화 (DHCP + MQTT) | 비활성화 (기본) |
| SW9 | IO5 | Gateway 모드 | 활성화 | 일반 모드 |
| SW10 | IO4 | 역할 (Role) | Anchor | Tag |
Strapping 핀 주의
SW4(IO46)와 SW5(IO3)는 ESP32-S3 strapping 핀이다. 부팅 시 상태가 boot mode/디버그 로그에 영향을 줄 수 있으니, 정상 부팅에 문제가 있으면 해당 스위치 위치를 점검할 것.
스위치는 3.3V 단락형(외부 풀다운 없음). ESP32 내부 풀다운 사용. ON = HIGH = 1.
2. 모드별 동작¶
일반 모드 (SW9 OFF)¶
- 부팅 시 STM32에 저장된 Role/Id/Rate를 2.5초간 청취
- 스위치 값과 일치 → provisioning 스킵 (빠른 부팅)
- 불일치 →
AT+SETCFG / SETCAP / SETRPT / SAVE / RESTART송출 (~10초) - 스위치 변경 시 → 500ms 디바운스 후 재설정 (STM32 재시작 동반)
- OLED:
A0 6.8M,T15 850k등 - SW8 ON이면 부팅 마지막에 ENC28J60 초기화 + MQTT 연결 시도
게이트웨이 모드 (SW9 ON)¶
- STM32에 아무 명령도 안 보냄 (provisioning 완전 스킵)
- 순수 패스스루: USB CDC ↔ UART2 양방향 +
AT+RANGE→ JSON 변환만 - SW1~6, SW7, SW10 스위치 값 모두 무시 (실제 역할/ID는 STM32가 마지막에 저장한 값)
- SW8(LAN)은 게이트웨이 모드에서도 살아있음 — 게이트웨이로 쓰면서 동시에 MQTT publish 가능
- OLED:
Gateway - 부트 루프 시 임시 회피용으로도 유용 — SW9를 ON 하면 ESP32가 STM32를 건드리지 않으니 깔끔하게 부팅
3. 인덱스 계산 (SW1~SW6)¶
이진수, SW1이 LSB:
| 원하는 idx | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 |
|---|---|---|---|---|---|---|
| 0 | OFF | OFF | OFF | OFF | OFF | OFF |
| 1 | OFF | OFF | OFF | OFF | OFF | ON |
| 2 | OFF | OFF | OFF | OFF | ON | OFF |
| 3 | OFF | OFF | OFF | OFF | ON | ON |
| 5 | OFF | OFF | OFF | ON | OFF | ON |
| 10 | OFF | OFF | ON | OFF | ON | OFF |
| 16 | OFF | ON | OFF | OFF | OFF | OFF |
| 32 | ON | OFF | OFF | OFF | OFF | OFF |
| 63 | ON | ON | ON | ON | ON | ON |
범위: 0 ~ 63 (UWB_TAG_COUNT=64와 일치)
4. 데이터 레이트 (SW7)¶
DW3000 UWB 데이터 전송 속도. AT+SETCFG의 freq 비트 + AT+SETCAP의 슬롯 시간이 같이 변경됨.
| SW7 | 레이트 | 슬롯 길이 | 특징 |
|---|---|---|---|
| OFF | 6.8M | 10ms | 짧은 패킷, 높은 throughput, 거리 살짝 짧음 |
| ON | 850k | 15ms | 긴 패킷(더 강한 동기화), 거리 길고 노이즈에 강함 |
4-1. LAN / MQTT (SW8)¶
ENC28J60 이더넷 + MQTT 게시 스택 ON/OFF.
| SW8 | 동작 |
|---|---|
| OFF | LAN 비활성. 기존 동작과 동일 (USB 시리얼 + OLED + UART 패스스루만). |
| ON | 부팅 시 ENC28J60 초기화 → DHCP → broker.hivemq.com:1883 MQTT 연결. AT+RANGE에서 만든 JSON을 uwb/range/{A\|T}{idx} 토픽으로 publish. |
핀 배선 (ENC28J60-I/ML)¶
| 신호 | GPIO |
|---|---|
| LAN_SPI_MOSI | IO13 |
| LAN_SPI_MISO | IO14 |
| LAN_SPI_SCLK | IO21 |
| LAN_INT | IO47 |
| LAN_SPI_CE | IO48 |
MQTT 토픽 / payload¶
- 토픽:
uwb/range/A0,uwb/range/T5등 (역할 + idx) - 클라이언트 ID:
uwb-A0-XXXXXX(eFuse MAC 끝 3바이트로 유니크화) - 페이로드(예):
{"id":3,"range":[1234,1280,1310,...]}— 시리얼 로그와 동일한 JSON
OLED 표시¶
SW8 ON일 때 버전 배너 아래 첫 줄에 LAN 상태가 고정 표시됨:
LAN ...— DHCP 시도 중L 192.168.1.5— 링크 OK / MQTT 연결 안 됨M 192.168.1.5— MQTT 연결 OK (publish 가능)
SW8은 부팅 시점에만 읽음. 런타임에 토글해도 LAN을 다시 올리지 않음 — 변경 후 재부팅 필요.
5. 자주 쓰는 설정 예시¶
Anchor 0 @ 6.8M (가장 흔한 기준 앵커)¶
- SW10 ON, 나머지 OFF
- 표시:
A0 6.8M
Anchor 5 @ 6.8M¶
- SW10 ON
- SW1 ON, SW3 ON (= bit0 + bit2 = 5)
- 표시:
A5 6.8M
Tag 0 @ 6.8M¶
- 모든 스위치 OFF (또는 SW10 OFF + idx 0)
- 표시:
T0 6.8M
Tag 10 @ 850k (장거리)¶
- SW10 OFF
- SW2 ON, SW4 ON (= bit1 + bit3 = 10)
- SW7 ON
- 표시:
T10 850k
PC 게이트웨이 (USB로 JSON 받기)¶
- SW9 ON (다른 스위치 위치 무관)
- 표시:
Gateway
6. 시리얼 진단 출력¶
부팅 후 2초마다 OLED와 별도로 시리얼에 다음 형식으로 찍힘:
게이트웨이 모드면 GW 접두사가 붙음:
스위치 변경 직후엔 추가로:
7. 주의사항¶
- 부트 루프 발생 시: SW9 ON으로 게이트웨이 모드 진입 → ESP32가 STM32를 건드리지 않으니 부트 루프 멈춤. 그 상태에서 시리얼 로그로 STM32 현재 상태(
Role:Anc, Id:0, Rate:6.8M등) 확인. - SW4(IO46), SW5(IO3) strapping 핀: 부팅 시점의 상태가 ESP32 boot mode에 영향. 굽기/플래시 중엔 OFF 권장.
- provisioning 시 STM32 재시작: SW10/SW7 또는 idx 비트를 바꾸면 STM32가
AT+RESTART로 재부팅됨. 측위 데이터 ~5~10초 끊김. - 3.3V 디커플링: 다수 보드 동시 운용 시 STM32의 플래시 쓰기/UWB TX 스파이크로 ESP32가 brownout(=POWERON 리셋)을 일으킬 수 있음. 100µF 이상 디커플링 캡 추가 권장.
8. 핀 사용 요약¶
| GPIO | 용도 |
|---|---|
| 3, 4, 5, 6, 7, 8, 9, 10, 11, 46 | DIP SW1~SW10 (순서 거꾸로) |
| 13 | LAN_SPI_MOSI (ENC28J60) |
| 14 | LAN_SPI_MISO (ENC28J60) |
| 16 | STM32 RESET (active-low, 항상 HIGH) |
| 17 | UART2 TXD → STM32 |
| 18 | UART2 RXD ← STM32 |
| 21 | LAN_SPI_SCLK (ENC28J60) |
| 38 | I2C SCL (OLED) |
| 39 | I2C SDA (OLED) |
| 43,44 | UART0 TX/RX (USB-UART 브릿지, Serial 로그) |
| 47 | LAN_INT (ENC28J60) |
| 48 | LAN_SPI_CE (ENC28J60) |