퍼온글;
아두이노 우노와 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 | 6 | 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 |
배열의 값을 무작위로 섞는 Shuffle 코드
배열의 값을 무작위로 섞는 코드이다. 구현 방법은 배열의 크기를 설정하고 배열에 1부터 순차적으로 채워져 있다고 할 때, 랜덤 함수를 통해 임의의 인덱스 값 두 개를 생성한다. 생성된 두 인덱스 값이 같은 값인지의 여부(중복 체크)를 확인하고 같은 값이면 같은 값이 아닐 때까지 계속 생성 비교한다. 같은 값이 아니면 인덱스에 해당하는 각 배열의 값을 상대측 배열에 저장한다. 이러한 과정을 배열의 크기만큼 실행한다.
아두이노 우노용 shuffle 코드
NodeMcu용 shuffle 코드
두 코드의 다른 점은 아두이노 우노에서 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:티스토리]