ESP32를 통해 LED를 켜거나, 센서 값을 받기 위해선 아래 각 Pin 마다 역할을 확인하고 사용해야한다.
접지, 전원을 제외하면 모두 GPIO로 되어 있으어 ESP32 ↔ 장치 간 데이터 통신에 필요한 기능들을 사용할 수 있다.
다만 일부 핀들은 입력만 받는다거나, 터치패드에 사용한다던지 하는데, 우선 기본적인 것들만 알면 될 것 같다.

핀 기본
GPIO(General Purpose Input/Output) : 범용 입출력 핀
VCC(Voltage common collector) : 전원
GND(GROUND) : 접지
INPUT/OUTPUT 통신방식과 신호
:GPIO 핀에서 어떤 역할을 할지 소스코드 단에서 아래와 같은 역할을 셋팅해줘야 한다. 주로 라이브러리에서 각 역할을 어떻게 수행할지 소스가 짜져 있고, 우린 역할마다 어떤 핀에 역할을 배부해줄지 핀맵을 보고 결정한다고 보면 됨
(예 : #define STB 18 <= 18번 핀에 STB 신호를 쏠거니깐, 변수로 저장해둬라)
- CLK(CLOCK) : ESP32와 장치 간 정보를 주고받을 때 사용하는 박자를 보내는 신호
- CLK의 Low → High 또는 High → Low 상하강에 맞춰서 DIO(딸깍 할 때 Data Input/Ouput)
- RTC(Real-Time Clock) : 전원이 연결되어 있지 않더라도, ESP32 내장 배터리로 시간을 추적할 수 있음
- 내장된 RTC 성능을 신뢰하긴 어려울 것 같고, 외부 RTC 모듈을 사용할 수 있다.
- 위에 핀맵 상 RTC_GPIO00로 적혀 있음
- STB(STROBE) : 전자 신호에서 특정 타이밍을 알려주는 신호
- EPS32가 STB 핀에 Low(0V)를 주면, 통신시작.
- EPS32가 STB 핀에 High(3.3V)를 주면, 통신 종료.
- DIO(Data Input Output) : 데이터를 주거나 받거나할 PIN 정보를 표시할 때 씀
- ADC(Analog to Digital Converter) : 아날로그 신호를 디지털로 변환해줄 수 있는 핀. 아날로그만 할 수 있는건 아니고 아날로그도 가능하다는거라, 디지털 신호도 가능
- WIFI모듈과 ADC2 블록이 ESP32 칩 내부 자원을 공유해서, WIFI쓸 때 ADC2채널로 된 핀을 쓰면 오류가 날 수 있음
- WIFI를 쓴다면 ADC1 채널을 활용해야 함
CLK, STB 를 통해 장치와 흐름을 맞추고, DIO 핀을 통해 데이터를 주고 받는다고 보면 될 것 같다.
| 흐름 | STB | CLK | DIO |
| 통신 시작 | Low | Low | 통신 시작 신호 |
| 1박 | Low | Low → (DIO) → High | 데이터 입력/출력 |
| 2박 | Low | Low → (DIO) → High | 데이터 입력/출력 |
| 3박 | Low | Low → (DIO) → High | 데이터 입력/출력 |
| 4박 | Low | Low → (DIO) → High | 데이터 입력/출력 |
| 통신 종료 | High | 상관없음 | 통신 종료 신호 |
CLK 딸깍한다 치면 딸(0) → 정보가져가거나 줌(0110110) → 깍(1) 이런 식
위처럼 Low High로 신호를 보내는 방식은 디지털 방식이라고 한다. 물리적으로 0V(Low)를 주면 논리값이 0이고, 3.3V(High)를 주면 1인 방식. 즉 STB, CLK는 디지털 신호이고 DIO는 상황에 따라 아날로그일 수 있겠다.
- I2C(Inter-Integrated Circuit) : 버스 방식으로 한개의 포트에 여러 개의 장치(마스터-N개 슬레이브)를 연결할 때 사용한다. 핀맵을 보면 I2C_SDA, I2C_SCL이 있다.

앞서 설명했던 STB, CLK, DIO 3가지로 통신과 데이터 정보를 주고 받았던 것과 다르게, I2C방식은 CLK과 DIO 로만 통신과 데이터를 주고 받는 것으로 보인다.

- SCL(Serial Clock) : 마스터, 슬레이브 간 CLK역할을 수행하면서, SDA와 박자가 맞을 때 START, END 상태를 만들 수 있다.
- SDA(Serial Data) : 시리얼 데이터로 통신하고자 하는 데이터. 각 통신에는 ACK가 포함된다.
- SCL이 High일 때, SDA가 High → LOW로 내려가면 START, SCL이 High일 때 SDA가 LOW → High로 올라가면 STOP
- 마찬가지로 START와 STOP 사이에 SDA에서 데이터를 전송한다. 8개 데이터를 보내며 1개의 ACK를 수신한다.
- SPI(Serial Peripheral Interface) : 순서대로 각 장치들과 통신하는 방식으로 MOIS(송신), MISO(응답), SCK(STB와 비슷) SS(어떤 장치와 통신할지)로 이루어짐
- UART(Universal Asynchronous Receiver/Transmitter) : TX(전송), RX(수신) 핀으로 1:1 통신. 한개 장치와 간단한 통신을 할 때 쓴다.
핀 번호 별 참고
| 핀 | 용도 | 비고 |
| GPIO 0 | 입력/출력 | 부트모드 결정용, 외부 풀업 필요 |
| GPIO 1 | TX0 | 기본 UART TX (USB 통신 시 사용됨) |
| GPIO 3 | RX0 | 기본 UART RX (USB 통신 시 사용됨) |
| GPIO 2 | LED_BUILTIN | 기본 내장 LED 핀 (모듈에 따라 다름) |
| GPIO 4~19 | 일반 I/O | 대부분 자유롭게 사용 가능 |
| GPIO 21, 22 | I2C (SDA, SCL) | 기본 I2C로 많이 사용 |
| GPIO 23, 18, 19, 5 | SPI용 | SPI 버스 기본 설정으로 많이 사용됨 |
| GPIO 34~39 | 입력 전용 | 출력 불가 센서 입력 등에 사용 |
| GPIO 6~11 | 내부 플래시 사용 중 | 사용 주의 (SPI 플래시와 연결됨) |
'Logistics IoT > DAS-PJT' 카테고리의 다른 글
| [DAS-PJT-005] ESP-NOW 브로드캐스팅 방식으로 N개 노드 점멸 (0) | 2025.06.17 |
|---|---|
| [DAS-PJT-004] ESP-NOW 활용 SubMaster-Slave 노드 구조 정리 (1) | 2025.06.08 |
| [DAS-PJT-002]ESP32 개발 환경 셋팅 (0) | 2025.06.02 |
| [DAS-PJT-001] 노드를 활용한 물류 분류 시스템 만들기 (0) | 2025.05.18 |