본문 바로가기
HW 프로그래밍/아두이노

아두이노 우노와 NodeMcu의 성능 비교, MCU 속도 벤치 마크

by N2info 2024. 6. 23.

퍼온글;

아두이노 우노와 NodeMcu의 성능 비교, MCU 속도 벤치 마크

출처: https://postpop.tistory.com/78 [postpop:티스토리]

 

아두이노 IDE에서 프로그래밍할 수 있는 NodeMcu는 아두이노 우노보다 저장공간, 즉 메모리가 더 클 뿐만 아니라 MCU 속도도 더욱 빠르다. NodeMcu를 아두이노 IDE에서 사용하기 위해서는 ESP8266 라이브러리를 포함하고 있는 ESP8266 아두이노 코어를 아두이노 IDE에 설치하여야만 한다. 설치 방법은 이전 글 아두이노 IDE에 ESP8266 사용 환경 설치하기 을 참조하기 바란다.  성능 테스트를 위해 이전 글에서 실행했었던 Shuffle용 코드를 아두이노 우노와 NodeMcu에서 실행하고 코드가 종료되는 시간을 5회에 걸쳐 수집하고 그 값들을 비교해 보았다. 

 

비고 아두이노  우노 NodeMcu
Microcontroller ATmega328P(8-bit) Tensilica L106(32-bit)
Operating Voltage 5V 3.3V
Input Voltage  (recommended) 7-12V 7-12V
Digital I/O Pins 14 (of which 6 provide PWM output) 9 (of which 3 provide PWM  output)
PWM Digital I/O Pins 6 3
Analog Input Pins 1
Flash Memory 32 KB (ATmega328P) of which 0.5 KB  used by  bootloader 4M
SRAM 2 KB (ATmega328P) 36 KB
EEPROM 1 KB (ATmega328P) 플래시 메모리 사용, 사용자 크기 설정
Clock Speed 16 MHz 80 MHz
1. 아두이노 우노 핀맵 2. NodeMcu 핀맵 3. NodeMcu의 아두이노 IDE 사용 디지털 핀

배열의 값을 무작위로 섞는 Shuffle 코드

 

배열의 값을 무작위로 섞는 코드이다. 구현 방법은 배열의 크기를 설정하고 배열에 1부터 순차적으로 채워져 있다고 할 때, 랜덤 함수를 통해 임의의 인덱스 값 두 개를 생성한다. 생성된 두 인덱스 값이 같은 값인지의 여부(중복 체크)를 확인하고 같은 값이면 같은 값이 아닐 때까지 계속 생성 비교한다. 같은 값이 아니면 인덱스에 해당하는 각 배열의 값을 상대측 배열에 저장한다. 이러한 과정을 배열의 크기만큼 실행한다.   

 

아두이노 우노용 shuffle 코드

 
arduino_shuffle_index.ino
0.00MB

NodeMcu용 shuffle 코드

 
NodeMcu_shuffle_index.ino
0.00MB

두 코드의 다른 점은 아두이노 우노에서 setup() 함수 내 randomSeed(analogRead(0)); 코드를 NodeMcu의 아날로그 입력 핀 A0로 변경해주고 random(0,50)을 추가해 주었다. 

 

// NodeMcu setup() 함수 수정

randomSeed(analogRead(A0)+random(0,50)); // NodeMCU 아날로그 입력 A0

 

NodeMcu 결과

uint16_t shuffle_tracks = 650;  // 2바이트 배열 650개 - 동적 메모리 34% 차지

6231 = 6.231 밀리초 = 0.006초

6229

6234

6219

6249

 

아두이노 우노 결과

uint16_t shuffle_tracks = 650;  // 바이트 배열 650개 - 동적 메모리 73%

118840 = 118.840 밀리초 = 0.12초

118452

118688

118488

118688

 

같은 코드를 실행했음에도 성능 차이가 상당함을 알 수 있다. 

출처: https://postpop.tistory.com/78 [postpop:티스토리]