콘텐츠로 이동

DIP 스위치 설정 가이드

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

DIP 스위치 위치

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 = SW1 + (SW2 × 2) + (SW3 × 4) + (SW4 × 8) + (SW5 × 16) + (SW6 × 32)
원하는 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와 별도로 시리얼에 다음 형식으로 찍힘:

[dip] Tag 6.8M idx=0 | SW1..6(idx)=000000  SW7(freq)=0  SW8(LAN)=0  SW9(GW)=0  SW10(role)=0

게이트웨이 모드면 GW 접두사가 붙음:

[dip] GW Tag 6.8M idx=0 | ...

스위치 변경 직후엔 추가로:

dip->A5 6.8M
[provision] A5 6.8M
AT+SETCFG=5,1,1,1
...

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)