はじめに
知人よりSDS1104オシロスコープを借りたので、ノーウエイトのLチカの周波数を測定してみた。
Arduino
対決に使用したArduinoボードは、次の3つ。
-
Arduino Uno R3
-
Arduino Uno R4 minima
-
ESP32-D0WDQ6 (revision v1.0)(Arduino環境)
Lチカプログラム
対決に使用したSketchは、次のとおり。
Arduino Uno R3とR4はD8ポート、ESP32はGPIO18を使用。
#include <Arduino.h>
#define LED (8) // for Arduino Uno R3 / R4
//#define LED (18) // for esp32
void setup() {
pinMode(LED, OUTPUT);
while (1) {
digitalWrite(LED, HIGH);
digitalWrite(LED, LOW);
}
}
void loop() {
}
結果
# | ボード | Lチカ周波数 | CPUクロック |
---|---|---|---|
1 | Arduino Uno R3 | 150.8KHz | 16MHz |
2 | Arduino Uno R4 minima | 686.8KHz | 48MHz |
3 | ESP32-D0WDQ6 | 1.495MHz | 240MHz |
まとめ
順位は測定前から想定していた通りであった。
しかし、Arduino Uno R4 と ESP32 は、CPUクロック差ほどの差がないのは意外だった。
ESP32が遅い? ESP-IDF環境なら、もっと早いのだろうか?
追試
ESP32のESP-IDF環境のノーウエイトLチカを測定した。
blink_example_main.c(ESP-IDF環境)
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "sdkconfig.h"
#define BLINK_GPIO GPIO_NUM_18
static void configure_led(void)
{
gpio_reset_pin(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}
void app_main(void)
{
configure_led();
while (1) {
gpio_set_level(BLINK_GPIO, 1);
// vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
gpio_set_level(BLINK_GPIO, 0);
// vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
}
}
性能は、Arduino環境より若干低い、1.441MHzと想定外の結果であった。
↓レジスタを直接いじれば、3.5MHzほどに高速化できます。
おしまい