본문 바로가기
카테고리 없음

ESP32 / ESP8266 란

by SuldenLion 2026. 4. 10.
반응형
ESP32 / ESP8266 — 임베디드 & IoT | 하드웨어 플랫폼
임베디드 & IoT · 하드웨어 플랫폼 #03

// Hardware Platform — Wi-Fi SoC Microcontroller

ESP32 / ESP8266

$2짜리 Wi-Fi 칩이 IoT 시장을 뒤흔들다 — Espressif의 저가 고성능 무선 MCU 완전 정복

Wi-Fi 내장 MCU 읽는 데 약 15분 초급~중급
Section 01

Espressif와 ESP 시리즈의 탄생

중국 상하이의 반도체 기업 Espressif Systems는 2014년 ESP8266을 출시하며 IoT 시장에 일대 충격을 가했습니다. 당시 Wi-Fi 모듈은 수십 달러였는데, ESP8266은 $2 이하의 가격에 완전한 Wi-Fi 스택을 내장한 MCU를 제공했습니다.

2016년 출시된 ESP32는 듀얼코어 CPU, Bluetooth, 더 많은 주변장치를 추가하며 ESP8266의 한계를 극복했습니다. 현재 ESP32 계열은 전 세계 IoT 기기에서 가장 많이 쓰이는 무선 MCU 플랫폼 중 하나입니다.

📡
시장 임팩트: ESP8266 출시 이후 메이커 커뮤니티는 이를 Arduino와 결합해 수천 개의 IoT 프로젝트를 만들었습니다. "Cheap Wi-Fi for Arduino"로 시작된 인식이 지금은 독립적인 메인 플랫폼으로 자리잡았습니다.
Section 02

ESP32 vs ESP8266 — 핵심 비교

ESP32

CPUXtensa LX6 듀얼코어
클럭최대 240 MHz
RAM520 KB SRAM
Flash4~16 MB (외장)
Wi-Fi802.11 b/g/n
BluetoothBT 4.2 + BLE
GPIO최대 34핀
ADC12-bit × 18채널
DAC8-bit × 2채널
가격~$2~4 (모듈)

ESP8266

CPUXtensa LX106 싱글코어
클럭최대 160 MHz
RAM80 KB SRAM
Flash1~4 MB (외장)
Wi-Fi802.11 b/g/n
Bluetooth없음
GPIO최대 17핀
ADC10-bit × 1채널
DAC없음
가격~$1~2 (모듈)
💡
선택 기준: 신규 프로젝트라면 ESP32를 강력 권장합니다. 가격 차이가 $1~2에 불과하지만 성능·기능 차이는 매우 큽니다. ESP8266은 극단적 단가 절감이나 레거시 프로젝트 유지보수에만 사용합니다.
Section 03

ESP32 상세 하드웨어 스펙

CPU 코어

Xtensa LX6 × 2

PRO_CPU + APP_CPU

클럭

80 / 160 / 240 MHz

동적 주파수 조절

SRAM

520 KB

+ 4MB PSRAM 옵션

RTC 메모리

16 KB SRAM

딥슬립 중 유지

Wi-Fi

802.11 b/g/n

Station / AP / AP+STA

Bluetooth

BT Classic + BLE 4.2

A2DP, SPP, BLE GATT

ADC

12-bit SAR × 18ch

Wi-Fi 활성 시 ADC2 불가

DAC

8-bit × 2채널

GPIO25, GPIO26

Touch 센서

정전식 × 10채널

슬립 웨이크업 트리거

통신

UART×3, SPI×4
I²C×2, I²S×2

CAN, IR, PWM, PCNT

Section 04

ESP32 변형 모델 라인업

칩/모듈CPU주요 특징용도
ESP32 원조 LX6 듀얼 240MHz BT 4.2, 범용, 가장 풍부한 예제 일반 IoT, 학습
ESP32-S2 LX7 싱글 240MHz BT 제거, USB OTG 추가, 보안 강화 USB HID, 보안 기기
ESP32-S3 AI 추천 LX7 듀얼 240MHz BLE 5.0, 벡터 명령어(AI 가속), USB OTG 엣지 AI, 카메라
ESP32-C3 RISC-V 싱글 160MHz Wi-Fi 6, BLE 5.0, 초저가, 오픈소스 ISA 단순 IoT 노드
ESP32-C6 RISC-V 싱글 160MHz Wi-Fi 6, BLE 5, Zigbee, Thread(Matter) 스마트홈 Matter 기기
ESP32-H2 RISC-V 싱글 96MHz Wi-Fi 없음, BLE 5.3 + Zigbee + Thread 저전력 메시 네트워크
ESP32-P4 2024 신형 RISC-V 듀얼 400MHz 고성능, AI 가속기, MIPI CSI/DSI HMI, 카메라, 미디어
Section 05

개발 환경

환경특징난이도추천 대상
Arduino IDE + ESP32 보드팩 가장 쉬운 시작, Arduino 라이브러리 그대로 사용 쉬움 입문자, 빠른 프로토타입
ESP-IDF (공식 SDK) FreeRTOS 기반, 모든 기능 접근, C/C++ 어려움 전문 개발, 상용 제품
MicroPython Python 문법, REPL 인터랙티브 쉘 쉬움 Python 개발자, 교육
PlatformIO VS Code 통합, 의존성 관리, CI/CD 보통 팀 개발, 프로젝트 관리
Micropython + Thonny 초보 친화적 IDE + Python 쉬움 교육, 스크립팅
Section 06

Wi-Fi와 Bluetooth 프로그래밍

Wi-Fi Station 모드 + HTTPS 요청

Arduino (ESP32) — Wi-Fi + HTTPSClient
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

const char* SSID     = "YourSSID";
const char* PASSWORD = "YourPassword";
const char* API_URL  = "https://api.open-meteo.com/v1/forecast?latitude=37.5&longitude=127.0¤t_weather=true";

void setup() {
  Serial.begin(115200);
  WiFi.begin(SSID, PASSWORD);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("\nConnected! IP: " + WiFi.localIP().toString());
}

void loop() {
  HTTPClient http;
  http.begin(API_URL);
  int code = http.GET();
  
  if (code == 200) {
    JsonDocument doc;
    deserializeJson(doc, http.getString());
    float temp = doc["current_weather"]["temperature"];
    Serial.printf("현재 기온: %.1f°C\n", temp);
  }
  http.end();
  delay(60000);  // 1분 간격
}

BLE 서버 (센서 데이터 전송)

Arduino (ESP32) — BLE GATT Server
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>

#define SERVICE_UUID  "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHAR_UUID     "beb5483e-36e1-4688-b7f5-ea07361b26a8"

BLECharacteristic *pChar;
bool deviceConnected = false;

class ServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer* s)    { deviceConnected = true;  }
  void onDisconnect(BLEServer* s) { deviceConnected = false; s->startAdvertising(); }
};

void setup() {
  BLEDevice::init("ESP32-Sensor");
  BLEServer *srv = BLEDevice::createServer();
  srv->setCallbacks(new ServerCallbacks());
  BLEService *svc = srv->createService(SERVICE_UUID);
  pChar = svc->createCharacteristic(CHAR_UUID,
    BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY);
  svc->start();
  BLEDevice::startAdvertising();
}

void loop() {
  if (deviceConnected) {
    float temp = 25.3;  // 실제 센서 값으로 대체
    char buf[10]; sprintf(buf, "%.1f", temp);
    pChar->setValue(buf);
    pChar->notify();
  }
  delay(1000);
}
Section 07

저전력 모드 완전 이해

ESP32의 가장 강력한 기능 중 하나는 세밀한 전력 관리입니다. 배터리 IoT 기기 설계의 핵심입니다.

Active (Wi-Fi TX)
~240 mA
Active (CPU 동작)
~80 mA
Modem Sleep
~20 mA
Light Sleep
~0.8 mA
Deep Sleep (RTC 활성)
~10 μA
Hibernation
~2.5 μA
Arduino (ESP32) — Deep Sleep + 타이머 웨이크업
#include <esp_sleep.h>

#define uS_PER_S 1000000ULL
#define SLEEP_SEC 30  // 30초 딥슬립

// RTC 메모리 — 딥슬립 중에도 유지!
RTC_DATA_ATTR int bootCount = 0;

void setup() {
  Serial.begin(115200);
  bootCount++;
  Serial.printf("Boot #%d\n", bootCount);
  
  // 센서 읽기, 데이터 전송 작업 수행
  doWork();
  
  // 타이머 웨이크업 설정 후 딥슬립 진입
  esp_sleep_enable_timer_wakeup(SLEEP_SEC * uS_PER_S);
  Serial.println("Entering deep sleep...");
  Serial.flush();
  esp_deep_sleep_start();
  // 이 아래 코드는 절대 실행되지 않음
}

void loop() {}  // 딥슬립 패턴에서 loop() 미사용
Section 08

실전 예제 — MQTT IoT 센서 노드

Arduino (ESP32) — DHT22 + MQTT 발행
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>

const char* MQTT_HOST   = "192.168.1.100";
const int   MQTT_PORT   = 1883;
const char* TOPIC       = "home/sensors/living";

WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);
DHT dht(4, DHT22);

void connectMQTT() {
  while (!mqtt.connected()) {
    if (mqtt.connect("ESP32-Living")) {
      Serial.println("MQTT connected");
    } else { delay(5000); }
  }
}

void loop() {
  if (!mqtt.connected()) connectMQTT();
  mqtt.loop();
  
  static unsigned long prev = 0;
  if (millis() - prev >= 10000) {
    prev = millis();
    JsonDocument doc;
    doc["temp"] = dht.readTemperature();
    doc["humi"] = dht.readHumidity();
    doc["rssi"] = WiFi.RSSI();
    char payload[128];
    serializeJson(doc, payload);
    mqtt.publish(TOPIC, payload);
  }
}
Section 09

장단점과 선택 가이드

// 장점

압도적 가성비

Wi-Fi+BT 내장 MCU를 $2~4에. 상용 IoT 기기 원가 절감의 핵심

// 장점

풍부한 생태계

Arduino, ESP-IDF, MicroPython, Tasmota, ESPHome 등 다양한 옵션

// 장점

강력한 저전력

딥슬립 10μA — AA 배터리로 수개월 동작하는 IoT 노드 구현 가능

// 주의

ADC 품질

Wi-Fi 동작 시 ADC2 사용 불가. ADC1도 Wi-Fi 노이즈 영향. 정밀 측정에는 외부 ADC 권장

// 주의

3.3V 로직

모든 GPIO 3.3V. 5V 신호 직결 금지. 일부 핀은 입력 전용 또는 부팅 시 특수 역할

// 주의

실시간성 한계

Wi-Fi 스택이 한 코어를 점유. 하드 실시간 요구에는 별도 MCU 병용 고려

// Quick Reference — ESP32

CPUXtensa LX6 듀얼코어 @ 최대 240MHz
무선Wi-Fi 802.11 b/g/n + BT 4.2 / BLE
메모리520KB SRAM + 외장 Flash 4~16MB
GPIO최대 34핀, 3.3V 로직
딥슬립~10 μA (RTC 타이머 웨이크업)
가격$2~4 (ESP32 모듈 기준)
개발 환경Arduino IDE / ESP-IDF / MicroPython
추천 대상배터리 IoT, 스마트홈, MQTT 노드
반응형

댓글