ESP8266 NodeMCU V3 에 대한 연산 처리 성능을 측정해봤습니다.

항목 내용
칩셋 Espressif ESP8266EX (Tensilica L106 32-bit RISC, 80/160 MHz)
플래시 메모리 4 MB (SPI Flash)
SRAM 약 80 KB (사용 가능 약 50 KB)
EEPROM (에뮬레이션) 512 bytes (Flash 일부 사용)
전원 공급 5 V (Micro-USB) 또는 3.3 V (핀 입력)
동작 전압 3.0 ~ 3.6 V (I/O 레벨 포함)
소비 전류 평균 70 mA, 최대 약 300 mA
CPU 코어 32-bit Tensilica L106, single-core, 80 or 160 MHz
무선 기능 Wi-Fi 802.11 b/g/n (2.4 GHz), WPA/WPA2 지원
GPIO 수 11개 (D0 ~ D8, SD2, SD3) — 단, 일부 부팅 제한 있음
ADC 1채널, 10비트, 0–1 V 입력 범위
PWM, I²C, SPI, UART 지원 (소프트웨어 방식 I²C/SPI 가능)
USB-Serial 칩 CH340G (NodeMCU V3 보드에서 주로 사용됨)
펌웨어 업로드 Micro-USB (자동 Flash/Reset 회로 내장)
보드 크기 약 58 mm × 31 mm
무게 약 8 g

 

1. GPIO 토글 주기

1-1. 함수 명령과 레지스터 제어 와의 성능 차이를 측정해봤고, 레지스터 제어 방식이 약 13배 빠릅니다.

함수 호출 레지스터 제어
void setup() {
  pinMode(0, OUTPUT);
}

void loop() {
  digitalWrite(0, HIGH);
  digitalWrite(0, LOW);
}
#define GPIO_OUT_REG        0x60000300
#define GPIO_OUT_SET_REG    0x60000304
#define GPIO_OUT_CLEAR_REG  0x60000308

volatile uint32_t *gpio_set   = (uint32_t *)GPIO_OUT_SET_REG;
volatile uint32_t *gpio_clear = (uint32_t *)GPIO_OUT_CLEAR_REG;

void setup() {

  pinMode(0, OUTPUT);
}

void loop() {
  *gpio_set = (1 << 0);    // HIGH
  *gpio_clear = (1 << 0); // LOW
}

 

*신호 분석: Logic Analyzer(LA2016) 200MHz Sampling

함수 호출
레지스터 제어

 

일반적인 Arduino(MEGA328P 16MHz)과 비교 시 함수 호출은 약 2배 빠르나 레지스터 제어는 동일합니다. 동작 클럭은 80MHz 로 Arduino 16MHz 보다 5배 빠른데도, 성능은 비슷하네요.

 

2. 연산 처리 능력

약 1초 간 루프 문 안에서 반복적으로 카운트(덧셈)하는 연산으로 시험인데, PC 에서 Serial 출력을 받기 위해서는 USB CDC on Boot 옵션을 Enable 로 설정해야 합니다.

unsigned long start, end;
volatile unsigned long count = 0;

void setup() {
  Serial.begin(9600);
  start = micros();
  while (micros() - start < 1000000) {  // 1초 동안
    count++;
  }
  end = micros();
  Serial.print("Count per second: ");
  Serial.println(count);
}

void loop() {}

 

결과는 1,403,496회 인데 의외입니다. 상위 모델인 ESP32-C3 1,152,194회 보다 높았고, Arduino Uno 203,905회 대비 약 6.8배의 성능입니다.

+ Recent posts