ESP32 C3 Super Mini DIP 스위치

DIP(Dual In-line Package) 스위치는 손으로 설정하는 작은 슬라이드 스위치 묶음입니다. 장치 주소, 통신 설정, 보안 코드, 동작 모드 등에 사용됩니다. 이 튜토리얼에서는 ESP32 C3 Super Mini에서 DIP 스위치를 사용하는 방법을 보여줍니다.

이 튜토리얼에서 배울 내용:

ESP32 C3 Super Mini - dip 스위치

필요한 하드웨어

1×ESP32 C3 Super Mini 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×DIP 스위치 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

DIP 스위치 소개

DIP 스위치는 하나의 패키지에 들어 있는 작은 슬라이드 스위치 묶음이며, 각각의 작은 스위치를 "포지션"이라고 부릅니다.

주요 특징:

  • 하나의 부품에 여러 스위치: 각 포지션이 독립적인 ON/OFF 스위치입니다
  • 손으로 설정: 펜 끝이나 작은 드라이버로 포지션을 밉니다
  • 설정 유지: 전원을 꺼도 값이 유지됩니다
  • 극성 없음: 한 포지션의 두 핀은 서로 바꿔 연결해도 됩니다
  • 초보자 친화적: ESP32 C3 Super Mini의 3.3V 로직과 함께 동작합니다

기술 사양:

  • 일반적인 크기: 2, 4, 5, 6, 8, 10 포지션
  • 핀 수: 포지션당 2개의 핀, 각 줄에 절반씩
  • 스위치 종류: 포지션당 기계식 SPST
  • 접촉 저항: ON일 때 거의 0옴, OFF일 때 매우 높음
  • 여기서 사용하는 로직 레벨: ESP32 C3 Super Mini의 3.3V

각 포지션은 숫자의 한 비트를 나타냅니다. 포지션을 ON과 OFF 사이로 밀어서 원하는 숫자를 설정합니다.

핀 배치

DIP 스위치에는 두 줄의 핀이 있으며, 각 줄의 핀 수는 포지션 수와 같습니다.

dip 스위치 핀 배치
image source: diyables.io
  • 위쪽 줄 핀: 각 슬라이드 스위치의 한쪽
  • 아래쪽 줄 핀: 같은 슬라이드 스위치의 다른 쪽
  • 핀 쌍: 서로 마주 보는 두 핀이 하나의 포지션을 이룹니다
  • 정해진 순서 없음: 양쪽을 서로 바꿔 사용할 수 있습니다
  • 예: 4포지션 DIP 스위치에는 총 8개의 핀이 있으며, 양쪽에 4개씩 있습니다

작동 원리

DIP 스위치의 각 포지션은 열거나 닫을 수 있는 전선처럼 동작합니다.

  • ON 포지션: 스위치가 닫혀 있어 전류가 흐를 수 있습니다
  • OFF 포지션: 스위치가 열려 있어 전류가 차단됩니다

포지션의 한쪽을 GND에, 다른 쪽을 풀업 입력으로 설정한 ESP32 C3 Super Mini 핀에 연결합니다. 아래 표는 읽히는 값을 보여줍니다:

DIP 스위치 포지션 이진 표현 회로 상태 ESP32 C3 Super Mini 핀 상태
ON 1 닫힘 LOW
OFF 0 열림 HIGH

※ 주의:

ESP32 C3 Super Mini는 3.3V 로직만 사용합니다. 어떤 GPIO 핀에도 5V 신호를 연결하지 마세요.

다음 부분에서는 4포지션 DIP 스위치를 예로 사용합니다. 같은 방법을 2포지션, 3포지션, 5포지션, 6포지션, 8포지션, 10포지션 DIP 스위치에도 적용할 수 있습니다.

배선도

각 포지션의 한쪽을 GPIO 핀에 연결하고, 모든 포지션의 다른 쪽을 GND에 연결합니다.

  • 참고: 3.3V 로직만 사용하세요. GPIO 핀에 5V를 넣지 마세요.
  • 참고: GPIO8과 GPIO9는 부트 스트래핑 핀입니다. 보드에 전원을 넣거나 리셋하기 전에 포지션 3과 4를 OFF로 밀어 두세요. 그렇지 않으면 보드가 정상적으로 시작되지 않습니다.
  • 참고: GPIO20이나 GPIO21은 사용하지 마세요 — 시리얼 모니터가 이 핀들을 사용합니다.
  • 참고: 한 포지션의 두 핀은 서로 바꿔 연결해도 됩니다.
ESP32 C3 Super Mini dip 스위치 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

DIP 스위치 핀 ESP32 C3 Super Mini 핀
포지션 1 (A쪽) GPIO6
포지션 2 (A쪽) GPIO7
포지션 3 (A쪽) GPIO8
포지션 4 (A쪽) GPIO9
포지션 1~4 (B쪽) GND

ESP32 C3 Super Mini 코드 - DIP 스위치

두 개의 코드로 배워 봅니다:

  • DIP 스위치 각 포지션의 ON/OFF 상태 읽기
  • 포지션들을 숫자로 인코딩하기

ESP32 C3 Super Mini 코드 - DIP 스위치의 ON/OFF 상태 읽기

첫 번째 스케치는 포지션마다 한 줄씩 모든 포지션의 상태를 출력합니다.

이 코드가 하는 일:

  • GPIO6, GPIO7, GPIO8, GPIO9를 내부 풀업이 켜진 입력으로 설정합니다
  • 0.5초마다 DIP 스위치의 각 포지션을 읽습니다
  • 핀이 LOW로 읽히면 스위치가 닫힌 것이므로 ON을 출력합니다
  • 핀이 HIGH로 읽히면 스위치가 열린 것이므로 OFF를 출력합니다
  • 시리얼 모니터를 읽기 쉽도록 짧은 지연을 추가합니다
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the ESP32 C3 SuperMini pins connected to the dip switch const int SWITCH_PINS[] = { 6, 7, 8, 9 }; void setup() { // initialize serial communication Serial.begin(115200); // set the dip switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { Serial.print("position "); Serial.print(i + 1); Serial.print(": "); int state = digitalRead(SWITCH_PINS[i]); if (state == ON) Serial.println("ON "); else Serial.println("OFF "); } Serial.println(); // add a delay to prevent rapid readings delay(500); }

빠른 단계

  • ESP32 C3 Super Mini가 처음이신가요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료하여 개발 환경을 설정하세요.
  • 부품 연결: 위의 배선도에 따라 DIP 스위치를 ESP32 C3 Super Mini에 연결합니다.
  • 보드 연결: USB Type-C 케이블로 ESP32 C3 Super Mini를 PC에 연결합니다.
  • Arduino IDE 열기: Arduino IDE 소프트웨어를 실행합니다.
  • 보드 선택: Tools > Board에서 ESP32 C3 Super Mini가 선택되어 있는지 확인합니다.
  • 포트 선택: Tools > Port에서 ESP32 C3 Super Mini의 COM 포트를 선택합니다.
  • 코드 업로드: 위 코드를 복사하여 Arduino IDE에 붙여넣은 다음, Upload 버튼을 클릭합니다.
  • 시리얼 모니터 열기: 보드레이트를 115200으로 설정합니다.
  • 포지션 밀기: DIP 스위치의 각 포지션을 하나씩 ON으로 옮깁니다.
  • 결과 확인: 시리얼 모니터에 새 상태가 출력되는 것을 확인합니다.
  • 전문가 팁: 어떤 포지션이 항상 ON으로 읽힌다면, 그 포지션의 GND 선이 GPIO 선에 닿아 있지 않은지 확인하세요.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
position 1: OFF position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: OFF position 4: OFF position 1: ON position 2: ON position 3: ON position 4: OFF position 1: ON position 2: ON position 3: ON position 4: ON
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

ESP32 C3 Super Mini 코드 - DIP 스위치의 상태를 숫자로 인코딩하기

두 번째 스케치는 네 개의 포지션을 하나의 십진수로 바꿉니다.

이 코드가 하는 일:

  • 같은 네 개의 핀 GPIO6, GPIO7, GPIO8, GPIO9를 읽습니다
  • 포지션 1을 최상위 비트로, 포지션 4를 최하위 비트로 사용합니다
  • 포지션이 ON이면 해당 비트를 1로 설정합니다
  • 최종 숫자를 출력하며, 4포지션 DIP 스위치의 경우 0부터 15까지입니다
  • 0.5초마다 읽기를 반복합니다
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the ESP32 C3 SuperMini pins connected to the dip switch const int SWITCH_PINS[] = { 6, 7, 8, 9 }; void setup() { // Initialize serial communication Serial.begin(115200); // Set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Serial.print("encoded state: "); Serial.println(encoded_state); // add a delay to prevent rapid readings delay(500); }

빠른 단계

  • ESP32 C3 Super Mini가 처음이신가요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료하여 개발 환경을 설정하세요.
  • 같은 배선 유지: 위의 배선도는 바뀌지 않습니다.
  • 보드 연결: USB Type-C 케이블로 ESP32 C3 Super Mini를 PC에 연결합니다.
  • Arduino IDE 열기: Arduino IDE 소프트웨어를 실행합니다.
  • 보드 선택: Tools > Board에서 ESP32 C3 Super Mini가 선택되어 있는지 확인합니다.
  • 포트 선택: Tools > Port에서 ESP32 C3 Super Mini의 COM 포트를 선택합니다.
  • 코드 업로드: 위의 두 번째 코드를 복사하여 Arduino IDE에 붙여넣은 다음, Upload 버튼을 클릭합니다.
  • 시리얼 모니터 열기: 보드레이트를 115200으로 설정합니다.
  • 포지션 밀기: DIP 스위치의 각 포지션을 하나씩 ON으로 옮깁니다.
  • 결과 확인: 포지션을 밀 때마다 출력되는 숫자가 바뀝니다.
  • 전문가 팁: 8포지션 DIP 스위치를 사용하면 0부터 255까지 얻을 수 있습니다. POSITION_NUM만 바꾸고 핀을 더 추가하면 됩니다.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
encoded state: 0 encoded state: 1 encoded state: 2 encoded state: 3 encoded state: 4 encoded state: 5 encoded state: 6 encoded state: 7 encoded state: 8 encoded state: 9 encoded state: 10 encoded state: 11 encoded state: 12 encoded state: 13 encoded state: 14 encoded state: 15
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2

값은 각 슬라이드 스위치의 위치에 따라 달라집니다. 아래 표는 4포지션 DIP 스위치에서 ON/OFF 위치와 정수 값의 대응 관계를 보여줍니다:

포지션-1 포지션-2 포지션-3 포지션-4 이진 값 십진 값
OFF OFF OFF OFF 0000 0
OFF OFF OFF ON 0001 1
OFF OFF ON OFF 0010 2
OFF OFF ON ON 0011 3
OFF ON OFF OFF 0100 4
OFF ON OFF ON 0101 5
OFF ON ON OFF 0110 6
OFF ON ON ON 0111 7
ON OFF OFF OFF 1000 8
ON OFF OFF ON 1001 9
ON OFF ON OFF 1010 10
ON OFF ON ON 1011 11
ON ON OFF OFF 1100 12
ON ON OFF ON 1101 13
ON ON ON OFF 1110 14
ON ON ON ON 1111 15

라인별 코드 설명

위의 ESP32 C3 Super Mini 코드에는 라인별 설명이 포함되어 있습니다. 코드의 주석을 읽어 보세요!

응용/프로젝트 아이디어

ESP32 C3 Super Mini에서 DIP 스위치를 활용하는 간단한 방법입니다.

  • 장치 주소: 각 보드에 번호를 부여하여 여러 보드가 하나의 버스를 공유하게 합니다.
  • 모드 선택기: 코드를 바꾸지 않고 16가지 프로그램 모드 중 하나를 선택합니다.
  • 비밀 코드 잠금: 올바른 패턴이 설정되었을 때만 릴레이를 엽니다.
  • 센서 보정: 센서 측정값의 임계값 단계를 선택합니다.
  • Wi-Fi 프로필 선택기: 보드가 연결할 저장된 Wi-Fi 네트워크를 선택합니다.
  • LED 패턴 선택기: 포지션 하나를 밀어서 조명 애니메이션을 바꿉니다.

도전해 보기

ESP32 C3 Super Mini와 DIP 스위치로 한 단계 더 나아가 보세요.

  • 쉬움: 포지션 1이 ON일 때 GPIO3에 연결된 외부 LED를 켜 보세요.
  • 쉬움: Serial.println(encoded_state, BIN)으로 값을 이진수로 출력해 보세요.
  • 보통: 인코딩된 숫자가 바뀔 때만 메시지를 출력해 보세요.
  • 보통: 숫자를 사용하여 깜박임 속도를 빠르게부터 느리게까지 설정해 보세요.
  • 어려움: GPIO2와 GPIO4에 5번째와 6번째 포지션을 추가하여 0부터 63까지의 값을 사용해 보세요.
  • 어려움: DIP 스위치 값을 Wi-Fi로 웹 페이지에 보내 보세요.

댓글