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이 있다.

출처 : 처음 배우는 Arm Cortex-M 마이크로컨트롤러:STM32F103

 

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

출처 : 처음 배우는 Arm Cortex-M 마이크로컨트롤러:STM32F103

 

- 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 플래시와 연결됨)

 

+ Recent posts