組み込み開発やIoTプロジェクトを始めたいと思った時、まず悩むのが「どのマイコンボードを選べばいいのか」ということです。市場には数多くの選択肢がありますが、特に人気が高く、初心者にもおすすめなのがArduino、Raspberry Pi、ESP32の3つです。
この記事では、プログラミング経験は少しあるけれど組み込み開発は初めてという方に向けて、これら3つのマイコンボードを徹底比較します。それぞれの特徴、メリット・デメリット、適用分野、実際のプロジェクト例まで詳しく解説しますので、あなたのプロジェクトに最適な選択ができるはずです。
1. 各マイコンボードの基本概要
Arduino(アルドゥイーノ)
Arduinoは2005年にイタリアで生まれたオープンソースのマイコンボードです。「誰でも簡単に電子工作ができる」をコンセプトに設計されており、世界中で最も愛用されているマイコンボードの一つです。
主な特徴:
- シンプルな開発環境(Arduino IDE)
- 豊富なライブラリとコミュニティサポート
- 低消費電力
- リアルタイム処理が得意
Raspberry Pi(ラズベリーパイ)
Raspberry Piは2012年にイギリスのRaspberry Pi財団が開発したシングルボードコンピューターです。教育目的で作られましたが、その高い性能と拡張性から、様々な分野で活用されています。
主な特徴:
- Linux OSが動作する本格的なコンピューター
- 豊富なI/Oポート
- ネットワーク機能(Wi-Fi、Bluetooth、Ethernet)
- カメラモジュール対応
ESP32(イーエスピー32)
ESP32は中国のEspressif Systems社が開発したマイコンチップです。Wi-Fi・Bluetooth機能を内蔵していながら低価格を実現し、IoTプロジェクトで急速に普及しています。
主な特徴:
- Wi-Fi・Bluetooth内蔵
- 低価格
- 低消費電力
- Arduino IDEで開発可能
2. 詳細スペック比較
基本スペック
項目 | Arduino Uno R3 | Raspberry Pi 4B | ESP32-WROOM-32 |
---|---|---|---|
CPU | ATmega328P (16MHz) | ARM Cortex-A72 (1.5GHz) × 4 | Xtensa LX6 (240MHz) × 2 |
メモリ | SRAM 2KB, Flash 32KB | RAM 4GB, microSD | RAM 520KB, Flash 4MB |
動作電圧 | 5V | 5V | 3.3V |
デジタルI/O | 14ピン | 26ピン | 34ピン |
アナログ入力 | 6ピン | 0ピン(要ADC) | 18ピン |
PWM | 6ピン | 2ピン | 16ピン |
通信インターフェース | UART, SPI, I2C | UART, SPI, I2C, USB | UART, SPI, I2C |
ネットワーク | なし(別途シールド必要) | Wi-Fi, Bluetooth, Ethernet | Wi-Fi, Bluetooth内蔵 |
価格比較(2024年現在の目安)
- Arduino Uno R3: 2,000〜3,000円
- Raspberry Pi 4B(4GB): 7,000〜9,000円
- ESP32開発ボード: 1,000〜2,000円
ESP32が最も安価で、Raspberry Piが最も高価です。ただし、Raspberry Piは完全なコンピューターとしての機能を持つことを考えると、コストパフォーマンスは非常に高いと言えます。
3. 開発環境の比較
Arduino
開発環境: Arduino IDE(統合開発環境) 言語: Arduino言語(C/C++ベース)
Arduino IDEは初心者にとって最も使いやすい開発環境です。インストールも簡単で、サンプルプログラムも豊富に用意されています。
// LED点滅の基本プログラム
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
メリット:
- シンプルで直感的
- 豊富なサンプルコード
- ライブラリ管理が簡単
デメリット:
- 機能が限定的
- デバッグ機能が基本的
Raspberry Pi
開発環境: Raspberry Pi OS(Linux)上で各種エディタ・IDE 言語: Python, C/C++, Java, Node.jsなど多言語対応
Raspberry Piは本格的なLinuxコンピューターなので、通常のPC開発と同じ環境が利用できます。
# LED点滅のPythonプログラム(RPi.GPIOライブラリ使用)
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
try:
while True:
GPIO.output(18, GPIO.HIGH)
time.sleep(1)
GPIO.output(18, GPIO.LOW)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
メリット:
- 多言語対応
- 本格的なデバッグ環境
- Linuxコマンドが使用可能
- 豊富な開発ツール
デメリット:
- 学習コストが高い
- 設定が複雑な場合がある
ESP32
開発環境: Arduino IDE、PlatformIO、ESP-IDFなど 言語: Arduino言語(C/C++)、MicroPython
ESP32はArduino IDEで開発できるため、Arduinoユーザーには馴染みやすい環境です。
// Wi-Fi接続とLED制御のサンプル
#include <WiFi.h>
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
void setup() {
Serial.begin(115200);
pinMode(2, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected!");
}
void loop() {
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
メリット:
- Arduino IDEが使用可能
- Wi-Fi機能が簡単に利用できる
- MicroPythonも選択可能
デメリット:
- 高度な機能を使う場合は専用IDEが必要
- ドキュメントが英語中心
4. 学習コストと習得の難易度
初心者の学習順序(推奨)
- Arduino(最も簡単)
- 基本的な電子回路の知識
- C言語の基礎
- デジタル・アナログ入出力の理解
- ESP32(中程度)
- Arduinoの知識(移行しやすい)
- Wi-Fi/Bluetooth通信の理解
- より高度なマルチタスク処理
- Raspberry Pi(最も複雑)
- Linuxの基本操作
- Python等のプログラミング言語
- ネットワーク設定
- システム管理の知識
学習時間の目安
- Arduino: 基本操作まで2-4週間、応用まで2-3ヶ月
- ESP32: Arduino経験者なら1-2週間、初心者なら1-2ヶ月
- Raspberry Pi: Linux未経験者なら3-6ヶ月、経験者なら1ヶ月
5. 適用分野と用途別比較
Arduino が適している用途
センサー制御・データ収集
// 温湿度センサーDHT22を使用した例
#include <DHT.h>
DHT dht(2, DHT22);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print("°C, Humidity: ");
Serial.print(humidity);
Serial.println("%");
delay(2000);
}
- 適用例: 温度計、湿度計、土壌水分計
- メリット: 低消費電力、安定動作、リアルタイム処理
- プロジェクト: 植物自動水やりシステム、気象観測装置
モーター制御・ロボット
- 適用例: サーボモーター制御、ステッピングモーター制御
- メリット: 正確なタイミング制御、PWM出力
- プロジェクト: 二足歩行ロボット、自動掃除機
Raspberry Pi が適している用途
画像処理・AI
# OpenCVを使用した簡単な画像処理例
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# エッジ検出
edges = cv2.Canny(gray, 50, 150)
cv2.imshow('Original', frame)
cv2.imshow('Edges', edges)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- 適用例: 顔認識システム、物体検出、監視カメラ
- メリット: 高い処理能力、豊富なライブラリ
- プロジェクト: スマートドアベル、防犯システム
Webサーバー・データベース
- 適用例: IoTデータの収集・表示、Webアプリケーション
- メリット: 本格的なサーバー機能、多言語対応
- プロジェクト: 家庭環境監視システム、スマートホームコントローラー
ESP32 が適している用途
IoT・無線通信
// MQTTを使用したセンサーデータ送信例
#include <WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Wi-Fi・MQTT接続設定
WiFi.begin(ssid, password);
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
// センサー値を読み取り
float sensorValue = analogRead(A0) * 3.3 / 4096;
// MQTTで送信
String payload = String(sensorValue);
client.publish("sensor/data", payload.c_str());
client.loop();
delay(5000);
}
- 適用例: センサーデータのクラウド送信、リモート制御
- メリット: Wi-Fi内蔵、低消費電力、低価格
- プロジェクト: スマート温度計、リモート監視システム
BLE(Bluetooth Low Energy)デバイス
- 適用例: フィットネストラッカー、ビーコン
- メリット: 超低消費電力、スマホ連携
- プロジェクト: 紛失防止タグ、健康管理デバイス
6. 実際のプロジェクト例で比較
プロジェクト例:「スマート植物管理システム」
同じ機能を3つのプラットフォームで実装した場合の違いを見てみましょう。
要件:
- 土壌水分センサーで測定
- 乾燥時に自動水やり
- データをスマホで確認
Arduino版
#include <Servo.h>
const int moisturePin = A0;
const int pumpPin = 9;
Servo pumpServo;
void setup() {
Serial.begin(9600);
pumpServo.attach(pumpPin);
}
void loop() {
int moisture = analogRead(moisturePin);
Serial.print("Moisture: ");
Serial.println(moisture);
if (moisture < 300) { // 乾燥している場合
pumpServo.write(90); // ポンプ動作
delay(2000);
pumpServo.write(0); // ポンプ停止
}
delay(10000); // 10秒待機
}
特徴: シンプルで確実、電池駆動可能、但しスマホ連携には別途モジュールが必要
Raspberry Pi版
import RPi.GPIO as GPIO
import time
import sqlite3
from flask import Flask, render_template, jsonify
app = Flask(__name__)
moisture_pin = 18
pump_pin = 24
def setup_database():
conn = sqlite3.connect('plant_data.db')
conn.execute('''CREATE TABLE IF NOT EXISTS moisture_data
(timestamp DATETIME, moisture_level INTEGER)''')
conn.close()
@app.route('/')
def index():
return render_template('dashboard.html')
@app.route('/api/moisture')
def get_moisture_data():
conn = sqlite3.connect('plant_data.db')
data = conn.execute('SELECT * FROM moisture_data ORDER BY timestamp DESC LIMIT 24').fetchall()
conn.close()
return jsonify(data)
def main_loop():
while True:
# センサー読み取り(ADC使用)
moisture = read_moisture_sensor()
# データベースに保存
conn = sqlite3.connect('plant_data.db')
conn.execute('INSERT INTO moisture_data VALUES (datetime("now"), ?)', (moisture,))
conn.commit()
conn.close()
# 水やり判定
if moisture < 300:
GPIO.output(pump_pin, GPIO.HIGH)
time.sleep(2)
GPIO.output(pump_pin, GPIO.LOW)
time.sleep(600) # 10分待機
if __name__ == '__main__':
setup_database()
app.run(host='0.0.0.0', port=5000)
特徴: データベース機能、Webダッシュボード、高度な分析が可能、但し消費電力大
ESP32版
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const int moisturePin = A0;
const int pumpPin = 2;
const char* server = "http://your-server.com/api/moisture";
void setup() {
Serial.begin(115200);
pinMode(pumpPin, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
void loop() {
int moisture = analogRead(moisturePin);
// データをサーバーに送信
HTTPClient http;
http.begin(server);
http.addHeader("Content-Type", "application/json");
DynamicJsonDocument doc(200);
doc["moisture"] = moisture;
doc["device_id"] = "plant_sensor_01";
String jsonString;
serializeJson(doc, jsonString);
int httpCode = http.POST(jsonString);
http.end();
// 水やり制御
if (moisture < 300) {
digitalWrite(pumpPin, HIGH);
delay(2000);
digitalWrite(pumpPin, LOW);
}
// ディープスリープで省電力
esp_deep_sleep_start(10 * 60 * 1000000); // 10分スリープ
}
特徴: Wi-Fi内蔵でクラウド連携、超低消費電力(ディープスリープ)、適度な価格
7. 用途別おすすめチャート
初心者向け学習用途
1位: Arduino – 学習リソースが豊富、シンプルな構造
2位: ESP32 – Arduino互換で無線機能も学べる
3位: Raspberry Pi – 本格的だが学習コストが高い
電池駆動・省電力用途
1位: ESP32 – ディープスリープ機能で超低消費電力
2位: Arduino – 元々低消費電力設計
3位: Raspberry Pi – 常時500mA以上消費
IoT・クラウド連携
1位: ESP32 – Wi-Fi/Bluetooth内蔵、クラウドSDK豊富
2位: Raspberry Pi – 本格的なサーバー機能
3位: Arduino – 別途通信モジュールが必要
AI・画像処理
1位: Raspberry Pi – 豊富なAIライブラリ、GPU対応
2位: ESP32 – 基本的なAI処理は可能
3位: Arduino – 処理能力不足
リアルタイム制御
1位: Arduino – ハードウェア割り込み、正確なタイミング
2位: ESP32 – リアルタイムOS搭載
3位: Raspberry Pi – Linux OSによる遅延あり
8. コスト面での総合比較
初期コスト(スターターキット含む)
Arduino: 5,000〜8,000円
- Arduino Uno R3: 3,000円
- ブレッドボード: 500円
- ジャンパー線: 500円
- 基本センサー類: 2,000円
Raspberry Pi: 12,000〜15,000円
- Raspberry Pi 4B: 8,000円
- microSDカード: 1,500円
- 電源アダプタ: 1,500円
- ケース: 1,000円
- 基本センサー類: 2,000円
ESP32: 3,000〜5,000円
- ESP32開発ボード: 1,500円
- ブレッドボード: 500円
- ジャンパー線: 500円
- 基本センサー類: 2,000円
学習リソースコスト
- Arduino: 日本語書籍・Webサイト豊富(追加コスト少)
- Raspberry Pi: 英語リソース中心(書籍代2,000〜5,000円)
- ESP32: Arduino知識が流用可能(追加コスト少)
9. まとめ:あなたに最適な選択は?
Arduino を選ぶべき人
- 電子工作・組み込み開発が初めて
- 確実に動作するシステムを作りたい
- 電池駆動での長時間動作が必要
- リアルタイム性を重視する制御システム
- 学習コストを抑えたい
Raspberry Pi を選ぶべき人
- 本格的なアプリケーション開発がしたい
- AI・機械学習を組み込みたい
- Webサーバー機能が必要
- 複雑なデータ処理を行いたい
- Linux環境での開発経験がある
ESP32 を選ぶべき人
- IoTデバイスを作りたい
- Wi-Fi/Bluetooth機能が必要
- コストを抑えつつ高機能を求める
- クラウド連携を前提とする
- 省電力性能を重視する
最終推奨ルート
完全初心者の場合:
Arduino → ESP32 → Raspberry Pi の順序で学習
プログラミング経験ありの場合:
目的に応じて直接選択、または Arduino で基礎を固めてから専門分野へ
どのマイコンボードを選んでも、現代の組み込み開発・IoT分野で活用できる素晴らしいプラットフォームです。まずは興味のあるプロジェクトから始めて、実際に手を動かしながら学んでいくことが最も重要です。
この記事が、あなたの組み込み開発の第一歩を踏み出すきっかけになれば幸いです。どのプラットフォームを選んでも、きっと楽しい開発体験が待っています!