ESP32¶
ESP32 とは¶
ESP32は、中国のEspressif社が製造する小型のマイコンボード(マイクロコントローラー)です。
主な特徴¶
- 低コスト: 数百円で購入できる
- 高性能: 240MHzデュアルコアCPU、豊富なメモリ
- WiFi・Bluetooth対応: インターネット接続やワイヤレス通信が可能
- GPIOが豊富: 30以上のデジタル入出力ピンを搭載
- 小さい: 指の爪くらいのサイズ
OSECHI宇宙線検出器もESP32ベースで設計されています。
Arduino 互換とは¶
Arduinoってなに?¶
Arduinoは、マイコンの開発を簡単にするためのプラットフォームです。 プラットフォームには3つの層があります:
- ハードウェア - マイコンボード
- ソフトウェア - IDE(開発環境)とライブラリ
- プログラミング言語 - Arduino言語(C++ベース)
Arduino 互換の意味¶
「Arduino互換」とは、以下を意味します:
- Arduinoと同じプログラミング言語が使える
- Arduino IDEで開発できる
- Arduinoライブラリをそのまま使える
つまり、Arduino向けに書かれたプログラムが、ほぼそのままESP32でも動作するということです。
メリット¶
- 学習曲線が緩い:Arduinoの知識が直接活かせる
- ライブラリが豊富:既存のコード資産を再利用できる
- コミュニティが大きい:困ったときに情報が見つかりやすい
具体例¶
// Arduino互換なコード(ArduinoとESP32の両方で動作)
void setup() {
Serial.begin(115200); // シリアル通信を初期化
pinMode(LED_BUILTIN, OUTPUT); // LEDピンを出力に設定
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // LEDを点灯
delay(1000);
digitalWrite(LED_BUILTIN, LOW); // LEDを消灯
delay(1000);
}
ESP32の開発方法¶
必要なツール¶
- PlatformIOまたはArduino IDE
- マイコンのプログラムを書いて、ボードに書き込むためのツール
-
OSECHIではPlatformIOを使用しています
-
USBケーブル
- パソコンとESP32を接続するため
-
データ転送と電力供給の両方を行う
-
テキストエディター
- プログラムを書くのに使う
- VS Code推奨
開発の流れ¶
1. ソースコードを書く (.cppや.hファイル)
↓
2. コンパイル(ビルド)
コンピュータが理解できる機械語に変換
↓
3. ファームウェアの書き込み
USBケーブルでESP32にアップロード
↓
4. 実行・テスト
ESP32がプログラムを実行
↓
5. デバッグ(問題があれば修正)
シリアルモニタで動作確認
OSECHIでの開発例¶
OSECHIでは以下のタスクを使用します:
# ビルド(コンパイル)
task build
# ボードに書き込み
task upload
# シリアルモニタを開いて動作確認
task monitor
プログラミングの基本¶
ESP32はスケッチ(Arduinoプログラム)を実行します。 最小限のプログラムは次のようになります:
void setup() {
// 起動時に1回だけ実行
Serial.begin(115200); // パソコンとの通信を開始
}
void loop() {
// ずっと繰り返し実行
Serial.println("Hello ESP32!");
delay(1000); // 1秒待つ
}
ESP32のハードウェアの特徴¶
ESP32は30個以上のGPIOピンを搭載しています また、WiFiとBluetoothを内蔵しています。
GPIOピンの分類¶
すべてのピンが同じ用途で使える訳ではありません。 ピンの種別と用途を以下にまとめました。
| ピン種別 | 説明 | 用途 |
|---|---|---|
| デジタルI/O | 通常のGPIO | LED制御、ボタン読み取り |
| アナログ入力(ADC) | アナログセンサー値を読む | 温度、光量、距離センサー |
| SPI/I2C | 通信プロトコル用 | センサーデバイスとの通信 |
| UART | シリアル通信 | パソコンとの通信 |
よく使うピン¶
ESP32 Dev Board
├── GPIO0: ブート選択用(通常は使わない)
├── GPIO2: LED制御、デジタル出力
├── GPIO4 / 5 / 12-15: 汎用GPIO
├── GPIO32 / 33: ADC専用
├── GPIO21 / 22: I2C通信
└── ... その他多数
注意: ピンによって機能が限定されているため、用途に応じて適切なピンを選ぶ必要があります。
ADC(アナログデジタル変換)¶
ESP32は2つのADCチャンネルを搭載しており、アナログセンサーから値を読み込めます。
ADC1とADC2の違い¶
| 特性 | ADC1 | ADC2 |
|---|---|---|
| ピン数 | 8ピン | 10ピン |
| 利用可能ピン | GPIO32-39 | GPIO0, 2, 4, 12-15, 25-27 |
| WiFi使用時 | 常に使える | WiFi使用時は使えない |
| 推奨 | WiFi併用時 | WiFiを使わない場合 |
ADC値の読み込み関数¶
ESP32では、ADC値を読み込むための2つの関数があります。
analogRead() - デジタル値で読み込む
// 12ビット(0-4095)のデジタル値を返す
int rawValue = analogRead(GPIO32);
// rawValue: 0-4095 の整数値
analogReadMilliVolts() - ミリボルト値で読み込む
// ミリボルト(0-3300mV)の物理値を返す
// 内部キャリブレーション済み
int millivolts = analogReadMilliVolts(GPIO32);
// millivolts: 0-3300 (単位:mV)
ADC内部キャリブレーション¶
ESP32は出荷時に内部キャリブレーション値が記録されており、analogReadMilliVolts()はこの値を使って自動補正します。
- analogRead(): 補正なし、速度優先
- analogReadMilliVolts(): キャリブレーション適用、精度優先
推奨:
精密な測定が必要な場合はanalogReadMilliVolts()を使用してください。
OSECHIの宇宙線検出では精度が重要なため、適切なキャリブレーション方法を選択する必要があります。
使用例¶
#include <driver/adc.h>
void setup() {
Serial.begin(115200);
analogSetAttenuation(ADC_11db); // 入力範囲設定(0-3.3V対応)
}
void loop() {
// 方法1:デジタル値(速度優先)
int raw = analogRead(GPIO32);
Serial.print("Raw: ");
Serial.println(raw);
// 方法2:ミリボルト値(精度優先、キャリブレーション済み)
int mv = analogReadMilliVolts(GPIO32);
Serial.print("mV: ");
Serial.println(mv);
delay(100);
}
OSECHI での使用: OSECHIは宇宙線検出器の信号記録にADCを使用しています。 環境センサー(温度、湿度、気圧)はBME280を使ってI2C通信で読み込みます。
WiFi機能¶
#include <WiFi.h>
void setup() {
// WiFiネットワークに接続
WiFi.begin("SSID", "PASSWORD");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected!");
}
用途:
- インターネット接続
- クラウド連携
- リモート制御
- ルーター経由のデータ送信
Bluetooth機能¶
#include <BluetoothSerial.h>
BluetoothSerial SerialBT;
void setup() {
SerialBT.begin("ESP32"); // Bluetooth デバイス名
}
void loop() {
if (SerialBT.available()) {
char c = SerialBT.read();
Serial.println(c);
}
}
用途:
- スマートフォンとの通信
- ワイヤレス周辺機器
- IoTデバイス間通信
WiFiとADC2の注意点¶
重要な制限:
- WiFiを使用中は、ADC2が使えません
- ADC2が必要な場合は、WiFiを使わないか、ADC1を使う必要があります
// 危険:以下のコードはWiFi使用時に問題が発生します
WiFi.begin("SSID", "PASSWORD");
int value = analogRead(GPIO_ADC2_CH0); // ← WiFi使用時は読値が不安定
まとめ¶
| 項目 | 説明 |
|---|---|
| ESP32 | 小型で安い、WiFi・Bluetooth対応のマイコンボード |
| Arduino互換 | Arduinoのプログラムがそのまま使える |
| 開発方法 | PlatformIOやArduino IDEでプログラムを書いて、USBで転送 |
| GPIO | 30個以上のピン、用途に応じて機能が異なる |
| ADC | アナログセンサー対応、ADC1はWiFi併用可 |
| 通信 | WiFi、Bluetooth内蔵でインターネット連携が容易 |
| 学習コスト | 低い:Arduinoの知識があれば始められる |
ESP32は初心者から上級者まで幅広く使われている、非常に人気のあるマイコンボードです。