PUBLIC
MICROCONTROLLERSGPIO9 MIN READ

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-S33.3V10 mA 程度に抑える
Raspberry Pi 53.3V数 mA〜8 mA 程度に抑える
M5Stack(ESP32 系)3.3VESP32 と同じ。Grove ポートの 5V は電源用

正確な上限はデータシートに書かれています。目安として「1 ピン 10 mA 以下、LED は 220Ω 以上の抵抗」と考えておけば、まず壊しません。

02 — INPUT

入力(INPUT)とプルアップ

入力ピンは電圧を読んで HIGH/LOW を判定します。何もつながっていないピンは値が定まらず(フローティング)、ランダムに揺れます。そこで「プルアップ抵抗」で普段は HIGH に固定し、ボタンで GND に落として LOW にします。

3.3V (VCC)10kΩGPIO 入力ピンタクトスイッチGND・ボタン離す (OFF) → HIGH (3.3V)・ボタン押す (ON) → LOW (0V)
DIAGRAM

プルアップ回路の仕組み。ボタン開放時は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)光センサー、ボリューム
I2C2 本の線(SDA/SCL)で複数のセンサー・表示器と通信OLED、温湿度センサー
SPI高速な通信SD カード、ディスプレイ
UARTシリアル通信GPS、他のマイコンとの通信

どのピンがどの機能を使えるかはボードごとに決まっています。「ピン配置図(pinout)」を手元に置いて確認する習慣をつけます。

05 — WATCH OUT

注意点

5V を GPIO に入れない

いちばん確実にマイコンを壊す方法です。5V 系の部品とつなぐ前に必ず確認します。

ピン番号の種類に注意

Raspberry Pi は「物理ピン番号(1〜40)」と「GPIO 番号(BCM)」が別です。ESP32 は印字どおりの GPIO 番号ですが、ボードによって出ているピンが違います。

電源を入れたまま配線を変えない

抜き差しの瞬間に意図しない場所へ電気が流れます。USB を抜いてから配線します。

06 — CHECK YOURSELF

理解チェック

Q1GPIO を「入力」にしたとき、何もつないでいないと値はどうなる?

不定(フローティング)。プルアップかプルダウンで固定する。

Q25V で動くセンサーの出力を ESP32 で読みたい。どうする?

分圧かレベルシフタで 3.3V に落としてから GPIO に入れる。