GPIO HIGH/LOW¶
GPIOとは¶
GPIO(General Purpose Input/Output:汎用入出力)は、マイコンボードにある「電気のやり取りをする端子」です。
GPIOでできること¶
- デジタル出力: LEDをオンオフしたり、モーターを制御したりする
- デジタル入力: ボタンの押下やセンサーの信号を読み取る
- アナログ入力: 温度や光の量など、段階的に変わる値を読み取る
物理的なイメージ¶
マイコンボード
├── GPIO0
├── GPIO1
├── GPIO2
├── GPIO3
└── ... その他のGPIOピン
マイコンボードには複数のGPIOがあります。 プログラムで「GPIO2をON/OFFにする」というように、ピンごとに制御できます。
GPIO電圧とは¶
GPIOの状態は、実際には「電圧」で表現されています。
2つの基本状態¶
| 状態 | 意味 |
|---|---|
| HIGH(高) | スイッチがON、電気が流れている状態 |
| LOW(低) | スイッチがOFF、電気が流れていない状態 |
重要: 実際の電圧値は、マイコンの種類によって異なります。
プログラムでの表現¶
Arduinoやプログラミング言語では、「HIGH」と「LOW」という単語で指定します:
digitalWrite(GPIO_PIN, HIGH); // 高い電圧を出力(つまりON)
digitalWrite(GPIO_PIN, LOW); // 低い電圧を出力(つまりOFF)
内部的には、HIGH = 1、LOW = 0という数値で扱われています。
実際の例¶
// LED をつける
digitalWrite(LED_PIN, HIGH); // LED が光る
// LED を消す
digitalWrite(LED_PIN, LOW); // LED が消える
// ボタン入力を読む
int state = digitalRead(BUTTON_PIN);
// state が HIGH なら押されている
// state が LOW なら押されていない
電圧の国際規格について¶
なぜ規格が必要?¶
マイコン同士やセンサーなど、異なるデバイスを接続するとき、 「どのくらいの電圧をHIGHと判定するのか?」を決める必要があります。
そうしないと、メーカーごとに判定が違い、動作が不安定になります。
主な規格¶
1. TTL規格(5V系/古い規格)¶
昔のマイコンボード(Arduino Unoなど)で使用されていました。
| 状態 | 電圧範囲 |
|---|---|
| HIGH | 2.7V以上 |
| LOW | 0.8V以下 |
2. CMOS規格(汎用規格)¶
電源電圧の何パーセント以上/以下かで判定する方式です。
| 状態 | 判定基準 |
|---|---|
| HIGH | 電源電圧の70%以上 |
| LOW | 電源電圧の30%以下 |
例:電源電圧が5Vの場合
- HIGH:3.5V以上
- LOW:1.5V以下
3. LVCMOS規格(3.3V系/低電圧)¶
低電圧で動作する最新のマイコンで使用されます。
| 状態 | 電圧範囲 |
|---|---|
| HIGH | 2.4V以上 |
| LOW | 0.8V以下 |
プログラムからの利用¶
ここが便利¶
重要: マイコンのプログラムでは、電圧の値を直接指定する必要はありません!
// 単純にHIGH/LOWを指定するだけ
digitalWrite(GPIO_PIN, HIGH); // マイコンが自動で高い電圧に変換
digitalWrite(GPIO_PIN, LOW); // マイコンが自動で低い電圧に変換
マイコンが内部で「HIGH=高い電圧」「LOW=低い電圧」と自動変換してくれます。
規格の違いを意識する場面¶
異なる規格のマイコンを接続するときだけ気をつけます:
// 例:5V系のマイコンと3.3V系のマイコンを接続する場合
// 5V側の出力を3.3V側に直接つなぐと、
// 3.3V側が壊れる可能性があります。
// → 電圧変換回路が必要になります
ESP32でのGPIO¶
ESP32の仕様¶
OSECHIに搭載されているESP32は、以下の仕様でGPIOを実装しています:
電圧仕様¶
| 項目 | 値 |
|---|---|
| 採用規格 | LVCMOS規格(3.3V系) |
| 出力時(HIGH) | 3.3V |
| 出力時(LOW) | 0V |
| 入力判定(HIGH) | 2.4V以上 |
| 入力判定(LOW) | 0.8V以下 |
GPIO数¶
ESP32には30個以上のGPIOピンがあります。 すべてのピンを同時に使える訳ではなく、一部はボード内の機能に予約されています。
注意点:他のマイコンとの接続¶
ESP32は3.3V系ですが、古いArduinoボード(Arduino Uno)は5V系です。
// 危険:5Vのピンから出力された5Vを直接ESP32に接続
// → ESP32の GPIO が壊れる可能性あり
// → 電圧変換回路を使う必要があります
まとめ¶
| 項目 | 説明 |
|---|---|
| GPIO | マイコンの電気的な入出力端子 |
| HIGH状態 | 高い電圧 |
| LOW状態 | 低い電圧 |
| 国際規格 | デバイス間の接続時に、電圧判定の基準を統一するため |
| LVCMOS | ESP32が採用している規格(3.3V系) |
| プログラムでは | HIGHとLOWを指定するだけ、電圧変換は自動 |
プログラマーは通常、電圧の詳細を意識する必要はありません。 ただし、異なるマイコンやセンサーを接続するときは、規格の違いに注意が必要です。