
マイコンやRaspberry PiでLEDを点灯させたり、スイッチの状態を読み取ったりするとき、必ず登場するのがGPIOです。
一見すると単なる端子の名前に見えますが、GPIOを正しく理解していないと、入力と出力の設定ミス、電圧違い、過電流、チャタリング、ノイズ誤動作などのトラブルにつながります。
GPIOとは、プログラムから入出力方向を切り替えて使える汎用のデジタル端子です。マイコンやラズパイが外部のセンサー、スイッチ、LED、リレー、通信モジュールとやり取りするための最も基本的な接点といえます。
本記事では、GPIOの意味、入力・出力の使い方、プルアップ・プルダウン、Raspberry Piでの注意点、マイコン設計での失敗例までを実務目線で解説します。
- 1. GPIOとは何か
- 2. GPIOが必要になる理由
- 3. GPIOの入力とは
- 4. GPIOの出力とは
- 5. プルアップとプルダウンの意味
- 6. GPIOとピンの違い
- 7. Raspberry PiでGPIOを使うときの注意点
- 8. GPIOとマイコンの関係
- 9. GPIOとPWM・I2C・SPI・UARTの違い
- 10. GPIOで起こりやすいトラブル
- 11. GPIOを設計で使うときの確認項目
- 12. よくある質問
- 13. まとめ
1. GPIOとは何か
GPIOとは、General Purpose Input/Outputの略で、日本語では「汎用入出力」と訳されます。
名前の通り、特定の用途に固定されていない入出力端子であり、プログラムの設定によって入力端子にも出力端子にも使えるのが特徴です。
たとえば、同じピンでも、ある製品ではスイッチ入力として使い、別の製品ではLED出力として使うことがあります。
この柔軟性があるため、GPIOはマイコン、組込み機器、Raspberry Pi、産業用コントローラなどで広く使われています。
GPIOを一言で言うと
GPIOは、CPUやマイコンが外の世界と直接やり取りするためのデジタル端子です。
内部ではプログラムが動いていても、現実の装置を動かすには外部との接点が必要です。その接点の代表がGPIOです。
| 項目 | 内容 |
|---|---|
| 正式名称 | General Purpose Input/Output |
| 日本語 | 汎用入出力 |
| 主な役割 | デジタル信号の入力・出力を行う |
| 代表例 | LED点灯、スイッチ入力、リレー駆動、センサー信号の読み取り |
| 注意点 | 電圧、電流、入力設定、ノイズ、保護回路を確認する |
GPIOは「何でもつなげる便利な端子」と考えたくなりますが、実際には電圧や電流の制限があります。
特にRaspberry Piや低電圧マイコンでは、5V信号を直接入力すると破損につながる場合があるため注意が必要です。
2. GPIOが必要になる理由
コンピュータは、CPU、メモリ、ストレージだけでは現実世界の状態を知ることができません。
温度が高いのか、ボタンが押されたのか、扉が閉まっているのか、モーターを動かすべきかを判断するには、外部信号の入出力が必要です。
入力と出力があるから機械を制御できる
GPIOの役割は、大きく分けると「入力」と「出力」の2つです。
入力では外部の状態を読み取り、出力では外部の部品に指令を出します。
| 方向 | 役割 | 具体例 |
|---|---|---|
| 入力 | 外部状態を読み取る | 押しボタン、リミットスイッチ、センサーのON/OFF信号 |
| 出力 | 外部機器を制御する | LED、ブザー、リレー、トランジスタ、ドライバIC |
| 割り込み入力 | 変化をきっかけに処理を開始する | エンコーダパルス、非常停止、通信完了通知 |
この入力と出力の組み合わせにより、組込みシステムは「状態を読み取る」「判断する」「動かす」という一連の制御を実現します。
GPIOは地味な存在ですが、装置の動作ロジックを外部の現象と結びつける重要なインターフェースです。
3. GPIOの入力とは
GPIOの入力とは、外部から入ってくる電圧レベルを読み取り、プログラム上で0または1として扱う使い方です。
一般的には、Lowを0、Highを1として読み取ります。
スイッチ入力の基本
最も身近な例は、押しボタンスイッチです。
ボタンが押されていないときは0、押されたときは1として読み取れば、プログラム側で「押されたらLEDを点灯する」といった処理ができます。
ただし、スイッチをGPIOに直接つなぐだけでは、入力が不安定になることがあります。
端子がどこにも接続されていない浮いた状態になると、周囲のノイズを拾って0と1が勝手に変化するためです。
入力判定にはしきい値がある
GPIOはアナログ値をそのまま読んでいるわけではありません。
入力電圧が一定以上ならHigh、一定以下ならLowとして判定します。
| 状態 | 意味 | 注意点 |
|---|---|---|
| High | 論理1として扱われる | 電源電圧に応じた上限を超えないこと |
| Low | 論理0として扱われる | GND基準が共通であること |
| 不定 | 0か1か安定しない | プルアップ・プルダウンで防止する |
電圧のしきい値はマイコンやボードによって異なります。
データシートを確認せずに外部回路をつなぐと、読み取り不良や素子破損の原因になります。
4. GPIOの出力とは
GPIOの出力とは、プログラムから端子をHighまたはLowに設定し、外部回路にデジタル信号を出す使い方です。
LEDを点灯させる、トランジスタをONする、リレー駆動回路に信号を送る、といった用途で使われます。
GPIOは大きな電力を直接扱えない
GPIOは制御信号を出す端子であり、モーターやソレノイドを直接駆動する電源端子ではありません。
出力できる電流には上限があるため、負荷を直接つなぐとマイコンやRaspberry Piを破損する可能性があります。
LED程度でも、電流制限抵抗を入れずに接続すると過電流になる場合があります。
リレーやモーターのような負荷では、トランジスタ、MOSFET、ドライバIC、フォトカプラなどを介して駆動するのが基本です。
| 負荷 | GPIO直結の可否 | 推奨される接続 |
|---|---|---|
| 小型LED | 条件付きで可能 | 電流制限抵抗を入れる |
| ブザー | 種類による | 必要に応じてトランジスタ駆動 |
| リレー | 基本的に不可 | トランジスタ+逆起電力対策 |
| モーター | 不可 | モータードライバを使う |
| 産業用24V入力 | 不可 | 絶縁入力回路やレベル変換を使う |
GPIO出力は「外部機器に命令する信号」と考えると理解しやすくなります。
実際の電力を扱う部分は、別の駆動回路に任せるのが安全です。
5. プルアップとプルダウンの意味
GPIO入力で非常に重要なのが、プルアップとプルダウンです。
これは、スイッチがOFFのときに入力端子の状態を安定させるための仕組みです。
プルアップとは
プルアップとは、抵抗を介してGPIO入力を電源側に引き上げることです。
スイッチが押されていないときはHigh、押されたときにGNDへ落ちてLowになる回路でよく使われます。
プルダウンとは
プルダウンとは、抵抗を介してGPIO入力をGND側に引き下げることです。
スイッチが押されていないときはLow、押されたときに電源側へつながってHighになる回路で使われます。
| 方式 | 未操作時 | 特徴 |
|---|---|---|
| プルアップ | High | スイッチONでLowになる。ノイズに比較的強く、よく使われる。 |
| プルダウン | Low | スイッチONでHighになる。直感的に理解しやすい。 |
| 未設定 | 不定 | 入力が浮き、誤動作の原因になりやすい。 |
多くのマイコンやRaspberry Piには、内部プルアップ・内部プルダウンを設定できる機能があります。
ただし、外部ノイズが大きい環境や配線が長い場合は、外付け抵抗やフィルタ回路を検討したほうが安定します。
6. GPIOとピンの違い
初心者が混同しやすいのが、GPIO番号と物理ピン番号の違いです。
特にRaspberry Piでは、この違いを理解していないと、別の端子に信号を出してしまうことがあります。
物理ピン番号とは
物理ピン番号とは、基板上のピンヘッダを端から数えた番号です。
コネクタの何番ピンかを示すもので、電源ピンやGNDピンも含まれます。
GPIO番号とは
GPIO番号とは、SoCやマイコン内部で管理されるGPIOの番号です。
プログラムで指定する番号は、ライブラリや設定方式によって物理ピン番号と異なることがあります。
| 番号の種類 | 意味 | 注意点 |
|---|---|---|
| 物理ピン番号 | コネクタ上の位置番号 | 電源やGNDも含まれる |
| GPIO番号 | チップ内部のGPIO番号 | プログラム指定で使われることが多い |
| ボード独自番号 | ライブラリ独自の指定方法 | 資料やサンプルコードごとに確認が必要 |
GPIOの記事やサンプルコードを見るときは、どの番号体系で説明しているのかを必ず確認しましょう。
「GPIO18」と「18番ピン」は同じ意味とは限りません。
7. Raspberry PiでGPIOを使うときの注意点
Raspberry PiはGPIOを手軽に扱えるため、電子工作や教育用途で広く使われています。
一方で、マイコン評価ボードの感覚で扱うと、電圧や保護回路の違いで壊してしまうことがあります。
基本は3.3V系として扱う
Raspberry PiのGPIOは、基本的に3.3V系のデジタル信号として扱います。
5Vのセンサー出力や産業用24V信号を直接入力してはいけません。
5V機器と接続する場合は、レベル変換回路を使う必要があります。
産業用センサーやPLC信号と接続する場合は、フォトカプラや絶縁I/Oボードを使う方が安全です。
起動時の端子状態に注意する
Raspberry Piに限らず、GPIOは電源投入直後やOS起動中に意図しない状態になることがあります。
外部回路がその瞬間のHighやLowに反応すると、リレーが一瞬ONする、モーターが動く、アラームが鳴るといった問題が起きます。
| 注意点 | 対策 |
|---|---|
| 5V入力 | レベル変換や分圧回路を使い、GPIO定格を超えないようにする |
| 過電流 | 負荷を直結せず、抵抗やドライバ回路を入れる |
| 起動時の不定状態 | 外部プルアップ・プルダウンや安全側の回路設計を行う |
| 誘導性負荷 | リレーやコイルには逆起電力対策を入れる |
| 長距離配線 | ノイズ対策、シールド、絶縁、低インピーダンス化を検討する |
Raspberry PiのGPIOは便利ですが、産業用I/O端子のような保護が標準で十分に入っているとは限りません。
実験では動いても、製品や設備に使う場合は保護回路とフェールセーフ設計が必要です。
8. GPIOとマイコンの関係
マイコンでは、GPIOは最も基本的な周辺機能の一つです。
CPUコアが直接ピンを操作しているように見えますが、実際にはGPIOポートという周辺回路を介して入出力を行います。
レジスタで入出力方向を設定する
マイコンでは、GPIOの方向や状態をレジスタで設定します。
たとえば、あるビットを1にすると出力、0にすると入力といった形で、ポート単位またはピン単位で制御します。
最近の開発では、直接レジスタを操作するだけでなく、メーカーが用意したHALやドライバライブラリを使うことも一般的です。
ただし、最終的に何が起きているかを理解するには、GPIOレジスタの考え方を知っておくと役立ちます。
| 設定項目 | 意味 |
|---|---|
| 方向設定 | 入力として使うか、出力として使うかを決める |
| 出力値 | 出力ピンをHighまたはLowにする |
| 入力値 | 外部端子の状態を読み取る |
| プル設定 | 内部プルアップ・プルダウンを有効にする |
| 割り込み設定 | 立上り・立下り・両エッジで処理を起動する |
| 代替機能 | UART、SPI、I2C、PWMなど別機能に切り替える |
マイコンのGPIOは、単純なON/OFF端子であると同時に、さまざまな周辺機能の入り口にもなっています。
ピンの設定を間違えると、通信が動かない、PWMが出ない、入力が読めないといった問題につながります。
9. GPIOとPWM・I2C・SPI・UARTの違い
GPIOは汎用入出力ですが、マイコンやRaspberry PiのピンはGPIO以外の機能にも切り替えられる場合があります。
このような機能を代替機能、ピン多重化、ピンmuxなどと呼ぶことがあります。
GPIOは単純なON/OFFを扱う
GPIOの基本は、HighかLowかのデジタル信号です。
LEDのON/OFFやスイッチ入力のように、単純な状態を扱うのに向いています。
通信や波形出力は専用機能を使う
一定周期で信号を出すPWM、複数ビットの通信を行うSPI、2線式通信のI2C、シリアル通信のUARTは、GPIOそのものではなく周辺機能として扱うのが一般的です。
ただし、これらの信号も外部から見ると同じピンに出てくるため、初心者には混同されやすい部分です。
| 機能 | 役割 | GPIOとの関係 |
|---|---|---|
| GPIO | 単純な入力・出力 | 任意のON/OFF制御に使う |
| PWM | デューティ比で擬似的なアナログ制御を行う | 専用タイマ機能をピンに割り当てる |
| I2C | 2本の信号線で複数デバイスと通信する | 通信機能としてピンを使用する |
| SPI | 高速な同期シリアル通信を行う | 複数本の専用信号を使う |
| UART | 送信線・受信線でシリアル通信する | TX/RX機能をピンに割り当てる |
GPIOとして使うつもりのピンが、初期設定で別機能に割り当てられていることもあります。
開発時は、ピン配置表とソフトウェア設定をセットで確認することが重要です。
10. GPIOで起こりやすいトラブル
GPIOは単純な機能に見えますが、実務では小さな見落としが大きな不具合につながります。
特に、電気的な制約とソフトウェア設定の両方を見ないと原因を特定しにくい点に注意が必要です。
入力が勝手に変わる
入力端子が浮いている、プルアップ・プルダウンが弱い、配線が長い、ノイズ源が近い場合に起こりやすい症状です。
対策として、プル抵抗の見直し、配線短縮、シールド、フィルタ、ソフトウェアの安定判定を検討します。
出力しているのに動かない
GPIO出力はHighになっていても、負荷を動かすだけの電流が足りない場合があります。
また、GNDが共通になっていない、トランジスタの向きが違う、ドライバ電源が入っていないといった回路側の問題もよくあります。
一瞬だけ誤動作する
電源投入直後、リセット直後、プログラム起動前のGPIO状態が原因で起こることがあります。
安全側の外部プル抵抗、ハードウェアインターロック、遅延起動、出力許可信号の追加などで対策します。
| 症状 | 主な原因 | 対策 |
|---|---|---|
| 入力が不安定 | 端子が浮いている、ノイズを拾う | プル抵抗、フィルタ、配線見直し |
| 出力負荷が動かない | 電流不足、GND不一致、駆動回路ミス | ドライバ回路と共通GNDを確認 |
| ピンを間違える | GPIO番号と物理ピン番号の混同 | 番号体系を統一して図面化する |
| ボードが壊れる | 過電圧、過電流、逆起電力 | レベル変換、抵抗、保護素子を入れる |
| 起動時に誤動作 | 初期状態が不定、安全側でない | 外部プル抵抗と出力許可回路を設計する |
GPIOのトラブルは、「ソフトが悪い」と決めつけると遠回りになります。
電圧、電流、GND、配線、初期状態、ソフト設定を順番に確認するのが基本です。
11. GPIOを設計で使うときの確認項目
製品や設備でGPIOを使う場合、サンプルコードが動くだけでは不十分です。
量産、保守、ノイズ、誤配線、異常時の挙動まで考えて設計する必要があります。
入力側の確認項目
入力では、信号電圧、しきい値、プル抵抗、チャタリング、ノイズ、絶縁の必要性を確認します。
スイッチやリレー接点を扱う場合は、機械接点特有のバウンスも考慮が必要です。
出力側の確認項目
出力では、GPIOが直接流せる電流、負荷の電流、負荷電圧、逆起電力、初期状態、異常時の安全状態を確認します。
特に外部機器を動かす場合、GPIOのHigh/Lowだけでなく、電源系と保護回路を含めた全体設計が重要です。
| 確認項目 | 確認内容 |
|---|---|
| 電圧レベル | 接続先のHigh/Low電圧がGPIOの許容範囲に入っているか |
| 電流容量 | GPIOが直接駆動できる範囲か、ドライバ回路が必要か |
| GND基準 | 信号の基準電位が共通か、絶縁が必要か |
| 初期状態 | 電源投入時・リセット時に危険な出力にならないか |
| ノイズ環境 | モーター、インバータ、リレー、長距離配線の影響を受けないか |
| 保護回路 | 過電圧、逆接続、静電気、逆起電力への対策があるか |
| ソフト設定 | 入力、出力、プル抵抗、割り込み、代替機能の設定が正しいか |
GPIO設計では、データシートの絶対最大定格だけでなく、推奨動作条件を見ることが重要です。
壊れない範囲と、安定して使える範囲は同じではありません。
12. よくある質問
Q1. GPIOとI/Oは同じ意味ですか?
完全に同じではありません。I/Oは入出力全般を指す広い言葉で、GPIOはその中でも汎用的に使えるデジタル入出力端子を指します。
UART、I2C、SPI、ADCなども広い意味ではI/Oですが、通常はGPIOとは区別して扱います。
Q2. GPIOでアナログ入力はできますか?
通常のGPIOはデジタル入力なので、アナログ電圧をそのまま数値として読むことはできません。
アナログ値を読みたい場合は、ADC機能を持つピンや外付けADCを使います。
Q3. Raspberry PiのGPIOに5Vを入れてもよいですか?
基本的には避けるべきです。Raspberry PiのGPIOは3.3V系として扱う必要があり、5V信号を直接入力すると破損の原因になります。
5V機器と接続する場合は、レベル変換回路や絶縁回路を使います。
Q4. GPIOでモーターを直接回せますか?
基本的に直接は回せません。GPIOの出力電流は小さいため、モーターの駆動にはモータードライバやMOSFET回路が必要です。
また、モーターはノイズや逆起電力を発生するため、保護回路も重要です。
Q5. GPIO番号とピン番号はなぜ違うのですか?
物理ピン番号はコネクタ上の位置を示し、GPIO番号はチップ内部で管理される端子番号を示すためです。
サンプルコードを使うときは、どの番号体系で指定しているかを必ず確認しましょう。
13. まとめ
GPIOとは、マイコンやRaspberry Piが外部機器とやり取りするための汎用デジタル入出力端子です。
入力ではスイッチやセンサーの状態を読み取り、出力ではLED、ブザー、リレー、ドライバ回路などを制御します。
GPIOを安全に使うには、プログラムだけでなく電気的な制約を理解することが欠かせません。
電圧、電流、GND、プルアップ・プルダウン、起動時の状態、ノイズ対策を確認することで、誤動作や破損を防げます。
特にRaspberry Piでは、GPIOを3.3V系として扱い、5V信号や大電流負荷を直接つながないことが重要です。
GPIOはシンプルな端子ですが、組込み開発の入り口であり、実務では信頼性を左右する重要な設計要素です。