ESP32 ソフトウェア 回路設計

ESP32とArduino UNOの違い|どちらを選ぶ?

投稿日:

電子工作やマイコン開発を始めるとき、

「ESP32とArduino UNOは何が違う?」
「初心者ならどちらを選べばいい?」
「Arduino UNOからESP32へ移行するメリットは?」

と迷うことがあります。

どちらもArduino IDEから開発できるため似たようなマイコンボードに見えますが、中身は大きく異なります。

ESP32はWi-FiやBluetoothを内蔵し、高い処理性能と大容量メモリを持っています。

一方、Arduino UNO R3は8bit AVRマイコンを搭載したシンプルな構成で、5V系の電子工作でも扱いやすいボードです。

単純にスペックだけを比較するとESP32が圧倒的に高性能ですが、

高性能だからESP32を選べばよい

とは限りません。

この記事ではESP32とArduino UNO R3について、

CPU性能
メモリ容量
GPIO
3.3Vと5Vの違い
Wi-Fi・Bluetooth
ADCやPWM
開発環境
どちらを選べばよいか

を比較します。

さらに、Arduino UNOからESP32へ移行するときに注意したいポイントも、回路設計とFirmwareの両面から解説します。

この記事ではArduino UNO R3と比較する

最初に比較対象を明確にしておきます。

この記事で「Arduino UNO」と表記する場合、基本的にはArduino UNO R3を指します。

UNO R3はATmega328Pを搭載した、長く使われているArduinoの代表的なボードです。

現在はUNO R4 MinimaやUNO R4 WiFiも販売されていますが、UNO R4ではMCUがRenesas RA4M1へ変更され、32bit ARM Cortex-M4となっています。

そのため、

UNO R3
ATmega328P
8bit AVR
16MHz

に対して、

UNO R4
RA4M1
32bit Cortex-M4
48MHz

と、内部構成は大きく異なります。

Arduino公式によるとUNO R4 MinimaはFlash 256KB、SRAM 32KBを搭載しながら、UNO R3との互換性を意識して5V動作を維持しています。

したがって、

Arduino UNOはすべて8bit・16MHz

というわけではありません。

今回はESP32との違いが分かりやすく、広く使われてきたUNO R3を主な比較対象とします。

ESP32とArduino UNO R3の違いを比較

まず代表的な仕様を比較してみます。

項目Arduino UNO R3ESP32
MCUATmega328PESP32
CPU8bit AVR32bit Xtensa LX6
CPU Clock16MHz最大240MHz
CoreSingle CoreDual Core
SRAM2KB520KB
Flash32KBModuleに数MB搭載
I/O電圧5V系3.3V系
Wi-Fiなし2.4GHz Wi-Fi
BluetoothなしBluetooth Classic / BLE
EEPROM1KB専用EEPROMなし
ADC6ch複数ch
開発環境Arduino IDEなどArduino / PlatformIO / ESP-IDFなど

Arduino UNO R3はATmega328Pを搭載し、16MHzで動作します。Flash Memoryは32KB、SRAMは2KB、EEPROMは1KBです。

一方、従来ESP32ではXtensa LX6 Dual Core CPUを搭載し、最大240MHzで動作します。内部SRAMは520KBあり、ESP32-WROOM-32Eでは数MBのSPI Flashを搭載したModuleが用意されています。

数字だけを見ると、かなり大きな差があります。

CPU性能はESP32が圧倒的に高い

Arduino UNO R3のATmega328Pは、8bit AVR CPUを16MHzで動作させます。

一方ESP32は32bit CPUで、従来ESP32では最大240MHzのDual Core構成です。

単純なClockだけでも、

Arduino UNO R3
16MHz

ESP32
最大240MHz

と大きな違いがあります。

もちろんCPU性能はClock周波数だけで決まるものではありません。

CPU Architectureも異なるため、

240 ÷ 16 = 15

だから「ESP32はUNOの15倍速い」と単純に比較することはできません。

それでも、

  • 通信処理
  • 複数Task
  • Display制御
  • JSON処理
  • Web Server
  • 暗号化通信
  • Wi-Fi
  • Bluetooth

など、多くの処理を同時に行う用途ではESP32の処理能力が有利です。

メモリ容量は大きく違う

個人的には、CPU Clock以上に実際のFirmware開発で差を感じやすいのがRAM容量です。

Arduino UNO R3のSRAMは、

2KB

です。

ESP32は、

520KB SRAM

を搭載しています。

UNO R3では2KBしかないため、大きな配列や文字列Bufferを使用すると、すぐにRAM容量を意識する必要があります。

たとえば、

char buffer[1024];

だけでも1KBです。

UNO R3ではSRAM全体の半分に相当します。

一方ESP32では、より大きなBufferを扱えるため、

HTTP
JSON
Wi-Fi
BLE
Display
File System

などを組み合わせたApplicationを作りやすくなります。

ただし、

ESP32ならRAMを気にしなくてよい

という意味ではありません。

Wi-FiやBluetooth Stackなどもメモリを使用するため、大規模なFirmwareではESP32でもHeapやStackの管理が必要です。

ESP32にはWi-FiとBluetoothがある

ESP32を選ぶ大きな理由の一つが無線通信です。

従来ESP32には、

2.4GHz Wi-Fi
Bluetooth Classic
Bluetooth Low Energy(BLE)

が内蔵されています。

Arduino UNO R3にはWi-FiやBluetooth機能はありません。

そのためUNO R3で無線通信を行う場合は、

Arduino UNO
     │
Wi-Fi Module

など、外部Moduleを追加する必要があります。

ESP32なら、

ESP32
├─ MCU
├─ Wi-Fi
└─ Bluetooth

が一つのSoCに統合されています。

スマートフォン連携やCloud通信、IoT機器などではESP32を選ぶ大きなメリットになります。

ESP32は3.3V、Arduino UNO R3は5V

ここはArduino UNOからESP32へ移行するときに特に注意したいポイントです。

Arduino UNO R3は5V系のボードです。

そのため5Vで動作するSensorやModuleを接続して使った経験がある人も多いでしょう。

一方、ESP32は基本的に3.3V系です。

ESP32-WROOM-32Eの推奨電源条件は3.0~3.6Vです。

したがって、

Arduino UNOで使えた
      ↓
ESP32でも同じように接続

とは考えない方がよいでしょう。

特に外部回路からGPIOへ入力される信号電圧には注意が必要です。

5V信号をESP32 GPIOへそのまま入れない

たとえばUNO R3で、

5V Sensor
   │
   └── Signal → Arduino UNO

としていた回路があるとします。

ESP32へ変更するときに、

5V Sensor
   │
   └── Signal → ESP32

とそのまま置き換えるのは避けます。

外部デバイスが5V Logicを出力する場合は、

抵抗分圧
Level Shifter
適切なInterface IC

などを使用し、ESP32側の入力条件に合わせます。

「Arduino IDEで同じコードが動く」ということと、

Hardwareをそのまま接続できる

ということは別です。

これはUNOからESP32へ移行するときに非常に重要な違いです。

逆にESP32の3.3V出力で5V回路を動かせる?

今度は反対方向です。

ESP32のGPIO HIGHは3.3V系です。

5Vで動作する外部ICへ信号を入力するとき、

ESP32 3.3V HIGH
       ↓
5V IC Input

で正しくHIGHとして認識されるかは、接続先ICの入力電圧仕様によります。

「5V電源で動いているICだから3.3VではHIGHにならない」とも、「3.3Vなら必ずHIGHになる」とも一律には言えません。

確認すべきなのはDatasheetの、

VIH:High-level Input Voltage

です。

ESP32と5V系回路を接続するときは、

電源電圧ではなく、実際の入出力Logic Levelを確認する

ことが重要です。

GPIOの本数だけでは比較できない

Arduino UNO R3にはDigital I/Oが14本あり、そのうち6本をPWM出力として利用できます。またAnalog Inputは6本です。

ESP32にはより多くのGPIOがあります。

ただしESP32では、

GPIO番号が存在する=すべて自由に同じ用途で使える

とは限りません。

ESP32ではPinによって、

  • Input Only
  • Boot Strap
  • Flashとの接続
  • ADC
  • Touch Sensor
  • RTC GPIO

など、機能や制約が異なります。

そのため単純に、

UNO:14本
ESP32:もっと多い

→ ESP32の方が全部自由に使える

とは考えない方がよいでしょう。

ESP32では、必要なPeripheralと使用可能GPIOを確認してPin Assignmentを決めることが重要です。

ここは既存のESP32ピン関連の記事へ内部リンクできるポイントでもあります。

Arduino UNOにはEEPROMがある

Arduino UNO R3のATmega328Pには1KBのEEPROMがあります。

そのため、

設定値
Calibration値
動作モード

など、電源OFF後も残したいデータをEEPROMへ保存できます。

ESP32にはUNO R3と同じような専用EEPROMはありません。

代わりに、Flash Memory上の**NVS(Non-Volatile Storage)**などを利用して設定値を保存できます。

Arduino-ESP32ではPreferences LibraryからNVSを扱うこともできます。

つまり、

Arduino UNO R3
     ↓
EEPROM

ESP32
     ↓
NVS / Preferences
     ↓
Flash

という違いがあります。

ESP32へ移行するときに、

「EEPROMがないから設定を保存できない」

というわけではありません。

保存方法が変わる、と考えると分かりやすいでしょう。

ここから、前回公開した「ESP32のFlashにデータを保存する方法|NVS・Preferencesを解説」へ自然に内部リンクできます。

ADCにも違いがある

SensorのAnalog値を読み取る場合も注意が必要です。

Arduino UNO R3には10bit ADCがあり、Analog InputとしてA0~A5を利用できます。

ESP32にもADCがありますが、UNOとまったく同じ感覚で使えるわけではありません。

ESP32ではADC ChannelやAttenuation、入力範囲、ADC特性などを考える必要があります。

またWi-Fi使用時など、使用するESP32やADC Unitによって注意すべき条件があります。

そのため、

analogRead();

という同じようなAPIが使えたとしても、

Hardware内部までArduino UNOと同じ

ではありません。

特にSensorの測定精度が重要な用途では、使用するESP32シリーズのADC仕様を確認する必要があります。

「Arduino IDEが使える」=Arduino UNOと同じではない

ESP32ではArduino Coreを利用することで、Arduino IDEからFirmwareを開発できます。

そのため、

pinMode();
digitalWrite();
digitalRead();
analogRead();
delay();

など、Arduino経験者には馴染みのあるAPIを使用できます。

これはESP32へ移行しやすい大きなメリットです。

しかし、

Arduino IDEで書けるからArduino UNOと同じマイコン

ではありません。

CPU Architectureも違えば、

Memory
Peripheral
Interrupt
Timer
ADC
GPIO
Wireless

なども異なります。

Arduino APIは違いの一部を隠してくれますが、Hardwareそのものを同じにするものではありません。

ここを理解しておくと、UNOからESP32へ移行したときのトラブルをかなり減らせます。

PWMの仕組みも異なる

Arduino UNO R3では、Digital I/Oのうち6本をPWM出力として利用できます。

Arduinoでは、

analogWrite(pin, value);

を使ったPWM制御に慣れている人も多いでしょう。

ESP32でもPWM出力は可能ですが、内部の仕組みはUNO R3とは異なります。

ESP32にはLEDC(LED Control)Peripheralがあり、PWMの周波数やDutyを設定して使用できます。

そのため、

Arduino UNO R3
    ↓
Timerを利用したPWM

ESP32
    ↓
LEDCなどを利用したPWM

という違いがあります。

ESP32ではPWM周波数や分解能を用途に応じて設定できますが、周波数とDuty Resolutionには関係があります。

「分解能を高くして、周波数もいくらでも高くできる」というわけではありません。

LEDの調光、Motor制御、Buzzerなど、用途に合わせてPWM条件を決める必要があります。

UART・SPI・I2CはESP32の方が柔軟

外部Deviceとの通信では、

UART
SPI
I2C

などをよく使用します。

Arduino UNO R3にもこれらのPeripheralがありますが、ESP32ではより複雑なApplicationを想定した構成になっています。

特にESP32にはGPIO Matrixという仕組みがあります。

Peripheral Signalを特定の固定Pinだけでなく、さまざまなGPIOへRoutingできるため、Pin Assignmentの自由度が高くなっています。

たとえば基板設計で、

UART TX
UART RX
SPI MOSI
SPI MISO
SPI CLK

などを配置するとき、UNOより柔軟にPinを選択できる場合があります。

これは自作基板では非常に便利です。

ただし自由度が高い分、

どのGPIOを使っても同じ

というわけではありません。

Boot Strap PinやInput Only Pin、Flashなどで使用されるPin、Peripheral固有の制約を確認する必要があります。

ESP32の方が消費電力は大きい?

これは使い方によって変わります。

ESP32は高性能CPUに加えてWi-FiやBluetoothを搭載しているため、無線通信中には相応の電流を消費します。

そのため、

単純な処理だけを常時実行するなら、ESP32の方が必ず省電力

とは言えません。

一方、ESP32にはLight SleepやDeep Sleepなどの省電力機能があります。

たとえばBattery駆動Sensorなら、

Deep Sleep
    ↓
TimerでWake-up
    ↓
Sensor測定
    ↓
Wi-Fi接続
    ↓
Data送信
    ↓
再びDeep Sleep

という動作ができます。

つまり消費電力を比較するときは、

MCUの通常動作電流

だけを見るのではなく、

製品が1日を通して
どの状態で何時間動作するか

を見る必要があります。

ESP32のDeep Sleepについては、既存の「ESP32 Deep Sleep完全ガイド」へ内部リンクできます。

リアルタイム制御ならArduino UNOの方がいい?

「ESP32はWi-FiやRTOSが動いているから、Arduino UNOの方がリアルタイム制御に向いている」

という話を見かけることがあります。

これは用途を分けて考える必要があります。

Arduino UNO R3では、基本的に非常にシンプルなFirmware構成になります。

setup()
  ↓
loop()
  ↓
Interrupt

という構成を把握しやすく、

いつ、どの処理が実行されるのか

を比較的追いやすいというメリットがあります。

一方ESP32では、FreeRTOSをベースとしたSoftware環境が使われ、Wi-FiやBluetoothなど複数の処理も動作します。

そのため、厳密なTimingが必要な処理を、

delayMicroseconds();

だけに頼って実装するのではなく、

Hardware Timer
Peripheral
Interrupt
Task Priority

などを適切に使う必要があります。

ただし、

ESP32ではリアルタイム制御ができない

という意味ではありません。

重要なのは、必要なTiming精度に応じてHardware PeripheralやSoftware構成を選ぶことです。

Dual Coreなら処理能力が2倍になる?

従来ESP32はDual Core CPUを搭載しています。

そこで、

「Arduino UNOがSingle Coreなら、ESP32はDual Coreだから単純に2倍?」

と思うかもしれません。

これも単純には比較できません。

Dual Coreだからといって、一つの処理が自動的に2倍の速度で実行されるわけではありません。

ESP32では複数Taskを別Coreで実行する構成も可能ですが、Application側の設計が必要です。

たとえば、

Task A
Sensor処理

Task B
通信処理

のように役割を分けることができます。

一方、ESP32-C3やESP32-C5など、Single CoreのESP32シリーズも存在します。

したがって、

ESP32=すべてDual Core

と覚えないようにしましょう。

使用するESP32シリーズによってCPU構成は異なります。

ESP32はシリーズによる違いも大きい

ここもArduino UNOとの比較で注意したいところです。

「ESP32」と一言で呼んでいますが、現在は複数のシリーズがあります。

たとえば、

ESP32
ESP32-S2
ESP32-S3
ESP32-C3
ESP32-C5
ESP32-C6
ESP32-H2

などです。

シリーズによって、

CPU Architecture
Core数
Wi-Fi
Bluetooth
USB
GPIO
Memory

などが異なります。

そのため、

「ESP32を使いたい」

と決めた後にも、

どのESP32シリーズを選ぶか

という選定があります。

ESP32を選んだ後に「どのシリーズを選べばよいか」で迷った場合は、「ESP32シリーズの選び方」で用途別に詳しく比較しています。

Arduino UNOからESP32へコードはそのまま移植できる?

簡単なSketchであれば、そのまま動く場合もあります。

たとえば、

pinMode(2, OUTPUT);

digitalWrite(2, HIGH);
delay(1000);

digitalWrite(2, LOW);
delay(1000);

のような基本的なArduino APIを使ったコードなら、Pin番号などを修正するだけで移植できることがあります。

しかしFirmwareが複雑になるほど注意点が増えます。

1.GPIO番号をそのまま使わない

UNOで、

digitalWrite(13, HIGH);

としていたからといって、ESP32でもGPIO13を同じ用途にそのまま割り当てる必要はありません。

使用するESP32 BoardやModuleのPin配置を確認して決めます。

2.5V前提の外部回路を確認する

Firmwareが移植できてもHardwareが対応しているとは限りません。

特に、

Sensor Output
UART
I2C Pull-up
SPI Device

などのLogic Voltageを確認します。

UNO R3の5V環境からESP32の3.3V環境へ変更するときには、ここを最優先で確認した方がよいでしょう。

3.Arduino LibraryがESP32に対応しているか確認する

Arduinoには非常に多くのLibraryがあります。

しかし、

Arduino用LibraryだからESP32でも必ず動く

とは限りません。

Library内部で、

AVR固有Register
Timer
Interrupt
Pin構成

などへ直接アクセスしている場合、ESP32ではそのまま使用できないことがあります。

反対にArduino APIだけで実装されているLibraryなら、比較的移植しやすい場合があります。

使用前にESP32対応状況を確認しましょう。

4.EEPROM処理を見直す

UNO R3で、

EEPROM.read();
EEPROM.write();

などを使用していた場合、ESP32では保存方法を見直します。

ESP32ではNVSを利用でき、Arduino-ESP32ならPreferences Libraryを使用できます。

単にAPIを置き換えるだけでなく、

保存するデータ
書き込み頻度
Factory Reset
Firmware Update後の互換性

まで整理すると、より製品向けの設計になります。

5.TimerやInterrupt処理を確認する

Arduino UNO R3のATmega328PとESP32ではTimerやInterrupt Controllerの構造が異なります。

そのため、AVR固有のRegisterを直接操作しているコードは、そのまま移植できません。

たとえば、

TCCR1A
TCCR1B
OCR1A

などATmega328P固有Registerを操作している場合は、ESP32のPeripheralに合わせて実装し直す必要があります。

Arduino UNO R3を選ぶメリット

ここまで読むと、

「それならESP32を選べばいいのでは?」

と思うかもしれません。

しかしUNO R3にもメリットがあります。

まず構成が非常にシンプルです。

8bit MCU、少ないMemory、基本的なPeripheralという構成なので、マイコンの基本を学ぶには分かりやすいBoardです。

また5V系であるため、5V LogicのDeviceを扱う用途では接続しやすい場合があります。

さらに長年使われてきたため、TutorialやLibrary、作例などの情報量も非常に多くあります。

ESP32を選ぶメリット

ESP32の大きなメリットは、やはり機能の多さです。

Wi-Fi
Bluetooth
高いCPU性能
大容量Memory
豊富なPeripheral
省電力機能

を一つのSoCで利用できます。

特に、

スマートフォン連携
Cloud通信
Web Server
OTA
BLE
Wi-Fi Sensor
IoT Device

などを作るなら、ESP32は非常に有力な選択肢です。

またArduino Frameworkから始めて、必要になればESP-IDFへ移行できることもメリットです。

初心者ならどちらを選ぶ?

「初心者にはArduino UNO」と一律に決める必要はないと思います。

作りたいものによって選ぶ方がよいでしょう。

LEDを点滅させたり、SwitchやSensorを接続したりして、

まずマイコンの基本を学びたい

のであればArduino UNO R3は分かりやすい選択です。

一方、

最初からWi-Fiやスマートフォン連携をやりたい

のであれば、ESP32から始めても問題ありません。

Arduino-ESP32を利用すれば、ESP32でもArduino IDEから、

setup()
loop()

という馴染みやすい形で開発できます。

重要なのは、

初心者だから低性能なマイコンを選ぶ

ことではなく、

作りたいものに必要な機能を持ったマイコンを選ぶ

ことです。

製品開発ならどちらを選ぶ?

製品開発では、さらに判断基準が増えます。

単純な性能だけでなく、

必要なI/O
通信Interface
消費電力
部品コスト
基板面積
供給性
開発環境
Software資産
認証

などを考えます。

Wi-FiやBLEが必要ならESP32は非常に魅力的です。

一方、無線通信が不要で、

Switch入力
Sensor入力
Relay制御
UART通信

程度のシンプルな制御なら、ESP32ほどの性能が必要ない場合もあります。

その場合はArduino UNOそのものを製品へ搭載するという意味ではなく、要求仕様に合った別のMCUを選ぶという判断もあります。

製品設計では、

高性能なMCUを選ぶ

ことより、

必要十分なMCUを選ぶ

ことが重要です。

ESP32とArduino UNO R3、どちらを選ぶ?

用途別に整理すると、次のようになります。

用途・条件ESP32UNO R3
Wi-Fiを使いたい△ 外部Module
Bluetoothを使いたい△ 外部Module
高い処理性能が必要
大きなRAMが必要
Web Serverを作りたい
5V系回路を扱いたい△ 要確認
シンプルな電子工作
マイコンの基本学習
複数Taskを動かしたい
Battery機器○ 設計次第○ 設計次第
IoT機器
Arduino資産を使いたい

単純な勝ち負けではなく、必要な機能によって選択するのがよいでしょう。

Arduino UNOからESP32へ移行するときのチェックリスト

最後に、UNO R3からESP32へ移行するときに確認したいポイントをまとめます。

確認項目内容
Logic Voltage5V → 3.3Vの違いを確認したか
GPIOPin番号・Pin機能を確認したか
Sensor3.3V Logicに対応しているか
Pull-upI2CなどのPull-up電圧を確認したか
ADC入力条件・ADC特性を確認したか
PWMESP32のPWM方式に合わせたか
EEPROMNVS / Preferences等へ変更したか
LibraryESP32対応を確認したか
TimerAVR固有処理が残っていないか
InterruptESP32向けに確認したか
MemoryESP32だから無制限と考えていないか
Wi-Fi/BLE通信時のCPU・Memory・電源負荷を考慮したか

特にHardwareでは、5Vと3.3Vの違いを最初に確認しましょう。

SoftwareがBuildできたからといって、Hardwareまで互換とは限りません。

まとめ|性能ではなく「何を作るか」で選ぶ

ESP32とArduino UNO R3は、どちらもArduino IDEから開発できますが、中身は大きく異なります。

Arduino UNO R3は、

8bit AVR
16MHz
SRAM 2KB
5V系

というシンプルな構成です。

ESP32は、

32bit CPU
高いClock周波数
大容量Memory
Wi-Fi
Bluetooth

など、多くの機能を搭載しています。

性能だけを見ればESP32が大きく上回ります。

しかし、

ESP32の方が高性能だから、常にESP32を選ぶべき

というわけではありません。

シンプルな電子工作や5V系回路の扱いやすさを重視するなら、Arduino UNO R3にもメリットがあります。

一方、

Wi-Fiを使いたい
BLEを使いたい
Web通信をしたい
より複雑なFirmwareを動かしたい

のであれば、ESP32が有力です。

そしてArduino UNOからESP32へ移行するときに最も注意したいのは、

同じArduino APIが使えることと、Hardwareが互換であることは別

という点です。

GPIO電圧、Pin機能、ADC、Timer、EEPROMなど、それぞれの違いを確認して移植する必要があります。

マイコン選定ではスペック表の数字だけを見るのではなく、

自分が何を作りたいのか

から必要な機能を決めることが、最も重要です。

スポンサーリンク

スポンサーリンク

-ESP32, ソフトウェア, 回路設計

Copyright© 江藤良樹の仕事は物づくり , 2026 All Rights Reserved.