GPIOとはマイコンのピンで電気を出し入れする仕組みと、3.3V の壁
GPIO(General Purpose Input/Output)は、マイコンがプログラムで自由に使えるピンです。HIGH/LOW を出力して LED を光らせたり、入力を読んでボタンの状態を知ったり。ESP32・Raspberry Pi・M5Stack、どれも考え方は同じです。
- ESP32-S3
- Raspberry Pi 5 8GB
CONTENTSこの記事の目次+
01 — OUTPUT
出力(OUTPUT)
- HIGH = 3.3V、LOW = 0V(GND)
- 1 ピンから取り出せる電流は数 mA〜十数 mA。LED 1 個なら OK、モーターは無理
- 大きな電流はトランジスタや MOSFET、モータードライバに任せる
| ボード | ロジック電圧 | 1 ピンの電流の目安 |
|---|---|---|
| ESP32-S3 | 3.3V | 10 mA 程度に抑える |
| Raspberry Pi 5 | 3.3V | 数 mA〜8 mA 程度に抑える |
| M5Stack(ESP32 系) | 3.3V | ESP32 と同じ。Grove ポートの 5V は電源用 |
正確な上限はデータシートに書かれています。目安として「1 ピン 10 mA 以下、LED は 220Ω 以上の抵抗」と考えておけば、まず壊しません。
02 — INPUT
入力(INPUT)とプルアップ
入力ピンは電圧を読んで HIGH/LOW を判定します。何もつながっていないピンは値が定まらず(フローティング)、ランダムに揺れます。そこで「プルアップ抵抗」で普段は HIGH に固定し、ボタンで GND に落として LOW にします。
プルアップ回路の仕組み。ボタン開放時は3.3V(HIGH)、押すとGNDに直結されて0V(LOW)を検出します。
マイコン内部にプルアップ抵抗が入っていて、Pin(14, Pin.IN, Pin.PULL_UP) のように有効にできます。外付け抵抗は不要です。
03 — 3.3V VS 5V
3.3V と 5V の壁
- ESP32・Raspberry Pi の GPIO は 3.3V。5V を入力すると壊れる可能性が高い
- Arduino UNO など 5V のボードや、5V 出力のセンサーとつなぐときはレベル変換(分圧またはレベルシフタ)が必要
- 5V を「供給する」のは OK(VBUS / VSYS / 5V ピン)。ただしその 5V を GPIO に入れないこと
- センサーを買うときは「3.3V 対応」か確認する。I2C センサーの多くは 3.3V で動く
04 — PERIPHERALS
GPIO の特別な機能
| 機能 | 何ができるか | 例 |
|---|---|---|
| PWM | 高速な ON/OFF で明るさ・速さを調整 | LED の調光、サーボ |
| ADC | アナログ電圧を数値で読む(ESP32 は 0〜3.3V を 0〜4095 の 12bit) | 光センサー、ボリューム |
| I2C | 2 本の線(SDA/SCL)で複数のセンサー・表示器と通信 | OLED、温湿度センサー |
| SPI | 高速な通信 | SD カード、ディスプレイ |
| UART | シリアル通信 | GPS、他のマイコンとの通信 |
どのピンがどの機能を使えるかはボードごとに決まっています。「ピン配置図(pinout)」を手元に置いて確認する習慣をつけます。
05 — WATCH OUT
注意点
いちばん確実にマイコンを壊す方法です。5V 系の部品とつなぐ前に必ず確認します。
Raspberry Pi は「物理ピン番号(1〜40)」と「GPIO 番号(BCM)」が別です。ESP32 は印字どおりの GPIO 番号ですが、ボードによって出ているピンが違います。
抜き差しの瞬間に意図しない場所へ電気が流れます。USB を抜いてから配線します。
06 — CHECK YOURSELF
理解チェック
Q1GPIO を「入力」にしたとき、何もつないでいないと値はどうなる?答えを見る
不定(フローティング)。プルアップかプルダウンで固定する。
Q25V で動くセンサーの出力を ESP32 で読みたい。どうする?答えを見る
分圧かレベルシフタで 3.3V に落としてから GPIO に入れる。
