GPIO(General Purpose Input/Output)とは、マイコンが外部の部品と信号をやり取りするための汎用入出力端子です。
たとえば、GPIOを使うことで次のようなことができます。
- LEDを点灯・消灯する
- スイッチが押されたことを検出する
- センサーから信号を読み取る
- モーターを制御する回路へ信号を送る
ESP32やArduinoなどを使った電子工作でも、GPIOは最初に理解しておきたい基本機能のひとつです。
この記事では、「GPIOとは何か?」から、入力と出力、HIGHとLOW、プルアップ・プルダウン、GPIOを使用するときの注意点まで、初心者向けに解説します。
GPIOとは?

GPIOはGeneral Purpose Input/Outputの略で、日本語では「汎用入出力」と呼ばれます。
簡単に言えば、マイコンと外部の電子部品との間でデジタル信号をやり取りするための端子です。
GPIOは主に、次の2つの使い方があります。
- 出力:マイコンから外部へHIGH/LOWの信号を出す
- 入力:外部から入ってきた信号がHIGHかLOWかを読み取る
たとえばLEDを光らせる場合はGPIOを出力として使い、スイッチが押されたことを調べる場合はGPIOを入力として使います。
GPIOで何ができる?
GPIOを理解するには、実際の使用例を見るのが分かりやすいでしょう。
GPIO出力:LEDを点灯する
GPIOを出力に設定すると、マイコンからHIGHまたはLOWの信号を出すことができます。
たとえば、GPIOにLEDを接続して、GPIOをHIGHにするとLEDを点灯、LOWにすると消灯するといった制御ができます。
GPIO入力:スイッチの状態を読み取る
GPIOを入力に設定すると、外部から入力された電圧を読み取ることができます。
スイッチをGPIOに接続すれば、スイッチが「押されている」「押されていない」といった状態をマイコンで判定できます。
GPIOのHIGHとLOWとは?
GPIOで扱うデジタル信号には、基本的にHIGHとLOWの2つの状態があります。
- HIGH:電源電圧に近い状態
- LOW:GND(0V)に近い状態
たとえば3.3Vで動作するマイコンでは、GPIOをHIGHにすると3.3V付近、LOWにすると0V付近になります。
ただし、入力された電圧を何VからHIGHまたはLOWと判断するかはマイコンによって異なります。正確な値については、使用するマイコンのデータシートを確認する必要があります。
GPIOを実際に使ってみよう
ここからは、ESP32-C3を搭載した電子工作・プログラミング学習用ボード 「KUMITATE-C3」 を使って、GPIOを実際に動かしてみます。
KUMITATE-C3には基板上にLEDとスイッチが搭載されているため、ブレッドボードや外付け部品を用意しなくてもGPIOの入力・出力を試すことができます。
GPIO出力でLEDを点滅させる
KUMITATE-C3のLEDはGPIO0に接続されています。
const int LED_PIN = 0;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
}
pinMode()でGPIO0を出力に設定し、digitalWrite()でHIGHとLOWを交互に出力しています。
このプログラムでは、1秒ごとにGPIOの状態が切り替わり、LEDが点滅します。
GPIO入力でスイッチを読み取る
KUMITATE-C3のSW1はGPIO21に接続されています。
const int SW_PIN = 21;
void setup() {
Serial.begin(115200);
pinMode(SW_PIN, INPUT_PULLUP);
}
void loop() {
if (digitalRead(SW_PIN) == LOW) {
Serial.println("スイッチが押されました");
}
delay(100);
}
ここではINPUT_PULLUPを指定して、マイコン内部のプルアップ抵抗を有効にしています。
そのため通常はHIGHとなり、スイッチを押すとLOWになります。
プルアップ・プルダウンとは?

GPIOを入力として使うときに重要なのが、プルアップとプルダウンです。
プルアップ
抵抗を介して入力を電源側につなぎ、何も入力されていないときの状態をHIGHにします。
プルダウン
抵抗を介して入力をGND側につなぎ、何も入力されていないときの状態をLOWにします。
フローティングとは?
入力ピンが電源にもGNDにも接続されず、電圧が定まっていない状態をフローティングと呼びます。
フローティング状態では周囲のノイズなどによってHIGHとLOWが不安定に変化することがあります。そのため、デジタル入力ではプルアップまたはプルダウンを利用して状態を確定させるのが基本です。
GPIO入力は電圧をHIGHまたはLOWとして判定する

GPIO入力では、入力された電圧をそのまま数値として読み取るのではなく、一定のしきい値を基準にHIGHまたはLOWとして判定します。
どの電圧からHIGHまたはLOWとして認識されるかはマイコンによって異なるため、正確な値はデータシートで確認します。
また、多くのマイコンではGPIOの状態がLOWからHIGH、またはHIGHからLOWへ変化したことを利用して割り込みを発生させることもできます。
GPIOピンは他の機能と兼用されている
マイコンのピンは、GPIOだけに使われるとは限りません。
1本のピンに複数の機能が割り当てられており、設定によって使用する機能を切り替えるマイコンが一般的です。
- UART
- I²C
- SPI
- PWM
- ADC(A/Dコンバータ)
たとえば、あるピンを通常のGPIOとして使うことも、I²CのSDAやUARTのTXとして使うこともあります。
このように1本のピンに複数の機能を割り当てる仕組みは、マイコンを扱ううえで非常に重要です。
GPIOから流せる電流には限界がある

GPIOを出力として使うときに注意したいのが、GPIOから流せる電流には上限があることです。
許容される電流はマイコンによって異なるため、使用するマイコンのデータシートを確認する必要があります。
LEDなどの小電流負荷は、適切な電流制限抵抗を使用してGPIOから制御できます。
一方で、次のような大きな電流を必要とする部品をGPIOへ直接接続してはいけません。
- DCモーター
- ソレノイド
- リレー
これらを制御するときは、トランジスタ、MOSFET、モータードライバなどを介してGPIOから制御します。
GPIOは内部のレジスタで制御されている

ArduinoではpinMode()やdigitalWrite()を使うだけでGPIOを簡単に操作できます。
しかし、その内部ではマイコンのレジスタを書き換えることでGPIOを制御しています。

マイコンによってレジスタの名称や構成は異なりますが、GPIOでは主に次のような設定を行います。
- 方向設定:入力として使うか、出力として使うか
- 出力値:HIGHまたはLOWを出力する
- 機能選択:GPIO、UART、I²Cなど、どの機能としてピンを使うか
- 内部抵抗:プルアップ・プルダウンなどを設定する
GPIOをより深く理解したい場合は、Arduinoの関数だけでなく、使用しているマイコンのデータシートやリファレンスマニュアルでGPIOレジスタを確認してみると理解が深まります。
GPIOとは?まとめ
GPIOは、マイコンと外部の電子部品をつなぐための基本的な機能です。
- GPIOはGeneral Purpose Input/Output(汎用入出力)の略
- GPIOは入力と出力として使用できる
- デジタル信号ではHIGHとLOWを扱う
- 入力ではプルアップ・プルダウンが重要
- GPIOピンはUART・I²C・SPIなどの機能と兼用されることがある
- GPIOから流せる電流には上限があり、モーターなどを直接駆動してはいけない
- 内部ではレジスタを使ってGPIOが制御されている
GPIOを理解したら、次はLEDやスイッチを実際に動かしてみると理解が深まります。
KUMITATE-C3にはLEDとスイッチがあらかじめ搭載されているため、GPIOの入力・出力をすぐに試すことができます。GPIOを理解するところから始めて、I²C、SPI、UART、センサー制御などへ少しずつステップアップしていきましょう。

