3주차_참고 : ESP32 DevKit 핀 구성 - dhryu60/SmartDevice_2025-1 GitHub Wiki

ESP32 DevKit 핀 구성

1. ESP32 DevKit 개요

ESP32 DevKit은 Wi-Fi 및 Bluetooth 기능을 내장한 강력한 마이크로컨트롤러 개발 보드로, 다양한 GPIO 핀과 통신 인터페이스를 제공합니다.

image

2. 전원 공급 핀

  • 5V: USB 또는 외부 전원 공급 가능
  • 3.3V (3V3): 내부 레귤레이터에서 출력된 안정된 전원
  • GND: 공통 접지 핀
  • 주의: 5V 및 3.3V 핀을 동시에 사용하면 보드 손상 가능

3. GPIO 핀 개요

  • 디지털 입출력(GPIO): 기본적인 HIGH/LOW 신호 출력 및 입력
  • ADC (아날로그-디지털 변환): ADC1(0~4095 범위), ADC2(Wi-Fi와 충돌 가능)
  • DAC (디지털-아날로그 변환): GPIO25(DAC1), GPIO26(DAC2)
  • 터치 센서: GPIO4, 0, 2, 15, 13, 12, 14, 27, 33, 32
  • PWM 출력: 모든 GPIO에서 사용 가능 (GPIO34~39 제외)

4. 통신 인터페이스

UART (직렬 통신)

  • UART0 (USB 연결): TX(GPIO1), RX(GPIO3)
  • UART1, UART2: 다른 GPIO로 설정 가능

SPI (고속 데이터 통신)

  • VSPI 기본 핀: MOSI(GPIO23), MISO(GPIO19), SCK(GPIO18), CS(GPIO5)
  • HSPI 핀 재설정 가능

I2C (센서 및 디바이스 연결)

  • 기본 핀: SDA(GPIO21), SCL(GPIO22)
  • 풀업 저항(4.7kΩ) 필요

5. 특수 기능 핀

  • BOOT (GPIO0): 펌웨어 다운로드 모드 진입 시 필요
  • EN (Enable 핀): 칩 활성화 및 리셋
  • JTAG 디버깅 핀: GPIO12, 13, 14, 15
  • RTC 외부 크리스탈 핀: GPIO32(XTAL_32K_P), GPIO33(XTAL_32K_N)

6. ESP32 DevKit 버전별 차이

  • DevKit V1 (30핀): 일부 핀 미제공, LED 내장
  • DevKitC V4 (38핀): 모든 핀 제공, CP2102N USB 칩 사용

7. 활용 사례

  • IoT 프로젝트: 센서 데이터 수집 및 클라우드 전송
  • 스마트 홈: BLE 기반 제어 장치 구축
  • 임베디드 시스템: RTOS 활용 로봇 제어 및 게이트웨이 장치

8. 실습 예제

1) GPIO 출력 (LED 깜박이기)

const int LED_PIN = 23;
void setup() {
  pinMode(LED_PIN, OUTPUT);
}
void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(1000);
  digitalWrite(LED_PIN, LOW);
  delay(1000);
}

2) PWM을 이용한 LED 밝기 조절

const int LED_PIN = 23;
int brightness = 0;
int fadeAmount = 5;
void setup() {
  pinMode(LED_PIN, OUTPUT);
}
void loop() {
  analogWrite(LED_PIN, brightness);
  brightness += fadeAmount;
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }
  delay(30);
}

3) ADC를 이용한 가변저항 입력 읽기

const int POT_PIN = 34;
void setup() {
  Serial.begin(115200);
}
void loop() {
  int adcValue = analogRead(POT_PIN);
  float voltage = adcValue * (3.3 / 4095.0);
  Serial.print("ADC: "); Serial.print(adcValue);
  Serial.print("  Voltage: "); Serial.print(voltage, 2);
  Serial.println(" V");
  delay(500);
}

4) I2C 장치 스캔

#include <Wire.h>
void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);
}
void loop() {
  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("Found I2C device at 0x");
      Serial.println(address, HEX);
    }
  }
  delay(2000);
}
⚠️ **GitHub.com Fallback** ⚠️