公開:

GPIO(General Purpose Input/Output、汎用入出力)とは?意味をわかりやすく簡単に解説

text: XEXEQ編集部


GPIO(General Purpose Input/Output、汎用入出力)とは

GPIOとはGeneral Purpose Input/Output(汎用入出力)の略称であり、マイクロコントローラやシングルボードコンピュータなどのデバイスに搭載されているピンのことを指します。GPIOピンはデジタル信号の入力や出力に使用されるインターフェースです。

GPIOピンはプログラムによって制御することができ、さまざまな用途に利用されています。例えば、LEDの点灯や消灯、スイッチやセンサーからの入力の検出、モーターの制御などに使用されます。

GPIOピンは通常3.3Vまたは5Vの電圧レベルで動作します。また、各ピンには入力モードと出力モードがあり、プログラムによって切り替えることが可能です。

GPIOピンの数や配置はデバイスによって異なります。例えば、Raspberry Piには40個のGPIOピンが搭載されていますが、Arduinoは14個のデジタルピンと6個のアナログピンを持っています。

GPIOを使用する際はピンの最大定格電流や電圧に注意する必要があります。過電流や過電圧を流すと、デバイスが破損する可能性があるためです。

GPIOピンの入力と出力

GPIOピンの入力と出力に関して、以下3つを簡単に解説していきます。

  • GPIOピンのデジタル入力
  • GPIOピンのデジタル出力
  • GPIOピンのプルアップとプルダウン

GPIOピンのデジタル入力

GPIOピンをデジタル入力として使用する場合、ピンの状態を読み取ることができます。つまり、ピンに接続されたスイッチやセンサーなどの状態を検出できるのです。

デジタル入力ではピンの電圧レベルが閾値以上であればHIGH(1)、閾値未満であればLOW(0)と認識されます。一般的に、3.3Vシステムでは1.8V以上がHIGH、1.8V未満がLOWとなります。

GPIOピンをデジタル入力として設定するにはプログラム内でピンのモードを入力に設定する必要があります。これにより、ピンの状態を読み取ることが可能になります。

GPIOピンのデジタル出力

GPIOピンをデジタル出力として使用する場合、ピンの状態を制御することができます。つまり、LEDの点灯や消灯、モーターのオン/オフなどを行えます。

デジタル出力ではピンの電圧レベルをHIGH(1)またはLOW(0)に設定します。HIGHに設定すると、ピンは3.3Vまたは5Vの電圧を出力し、LOWに設定すると、ピンは0Vの電圧を出力します。

GPIOピンをデジタル出力として設定するにはプログラム内でピンのモードを出力に設定し、ピンの状態をHIGHまたはLOWに設定する必要があります。これにより、接続されたデバイスを制御できます。

GPIOピンのプルアップとプルダウン

GPIOピンにはプルアップ抵抗とプルダウン抵抗を内蔵しているものがあります。これらの抵抗はピンの状態を安定させるために使用されます。

プルアップ抵抗はピンを高電位(通常はVCC)に接続する抵抗のことです。これにより、ピンが何にも接続されていない場合でも、ピンの状態はHIGHに保たれます。

一方、プルダウン抵抗はピンを低電位(通常はGND)に接続する抵抗のことです。これにより、ピンが何にも接続されていない場合でも、ピンの状態はLOWに保たれます。

GPIOを使ったプログラミング

GPIOを使ったプログラミングに関して、以下3つを簡単に解説していきます。

  • Pythonを使ったGPIOプログラミング
  • C言語を使ったGPIOプログラミング
  • GPIOライブラリの使用

Pythonを使ったGPIOプログラミング

PythonはGPIOプログラミングに適した言語の一つです。PythonにはGPIOを制御するためのライブラリが用意されており、比較的簡単にGPIOを制御するプログラムを作成できます。

PythonではRPi.GPIOやgpiozeroなどのライブラリを使用してGPIOを制御します。これらのライブラリにはピンのモード設定や、ピンの状態の読み取り・設定などの関数が用意されています。

以下はRPi.GPIOを使用してLEDを点滅させるPythonプログラムの例です。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

while True:
GPIO.output(18, GPIO.HIGH)
time.sleep(1)
GPIO.output(18, GPIO.LOW)
time.sleep(1)

C言語を使ったGPIOプログラミング

C言語もGPIOプログラミングに適した言語の一つです。C言語ではGPIOを直接制御するためのレジスタにアクセスすることができます。

C言語でGPIOを制御するにはまずGPIOのベースアドレスを取得し、各ピンに対応するレジスタにアクセスする必要があります。レジスタへのアクセスにはメモリマップドI/Oという手法が使われます。

以下はC言語を使用してLEDを点滅させるプログラムの例です。

#include 
#include 
#include 
#include 
#include 

#define BCM2708_PERI_BASE 0x20000000
#define GPIO_BASE (BCM2708_PERI_BASE + 0x200000)
#define GPIO_SIZE (0xB4)

volatile unsigned *gpio;

void setup_io();

int main(int argc, char **argv)
{
int g, rep;

setup_io();

for (rep = 0; rep < 10; rep++) {
gpio[7] = 1 << 18;
sleep(1);

gpio[10] = 1 << 18;
sleep(1);
}

return 0;
}

void setup_io()
{
int mem_fd;
void *gpio_map;

if ((mem_fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0) {
printf("can't open /dev/mem 
");
exit(-1);
}

gpio_map = mmap(NULL, GPIO_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, GPIO_BASE);

close(mem_fd);

if (gpio_map == MAP_FAILED) {
printf("mmap error %d
", (int)gpio_map);
exit(-1);
}

gpio = (volatile unsigned *)gpio_map;
}

GPIOライブラリの使用

GPIOを制御するためのライブラリは各言語ごとに用意されています。これらのライブラリを使用することで、GPIOの制御を簡単に行うことができます。

例えば、C言語ではWiringPiやlgpioなどのライブラリが、Pythonではgpiozeroなどのライブラリが用意されています。これらのライブラリにはピンのモード設定や、ピンの状態の読み取り・設定などの関数が用意されているため、簡単にGPIOを制御できます。

以下はWiringPiを使用してLEDを点滅させるC言語のプログラムの例です。

#include 

#define LED 18

int main(void)
{
wiringPiSetupGpio();
pinMode(LED, OUTPUT);

while (1) {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}

return 0;
}

GPIOの注意点とベストプラクティス

GPIOの注意点とベストプラクティスに関して、以下3つを簡単に解説していきます。

  • GPIOピンの過電流・過電圧防止
  • GPIOピンのノイズ対策
  • GPIOピンの設定とクリーンアップ

GPIOピンの過電流・過電圧防止

GPIOピンには最大定格電流と最大定格電圧が定められています。これらの値を超えると、デバイスが破損する可能性があるため、注意が必要です。

過電流を防ぐためにはGPIOピンに接続するデバイスの消費電流を確認し、GPIOピンの最大定格電流以下に抑える必要があります。また、過電圧を防ぐためにはGPIOピンに接続するデバイスの動作電圧を確認し、GPIOピンの最大定格電圧以下に抑える必要があります。

さらに、誤ってGPIOピンをショートさせないように、ピンの配線には十分注意が必要です。ショートが発生すると、大電流が流れ、デバイスが破損する可能性があります。

GPIOピンのノイズ対策

GPIOピンは外部のノイズの影響を受けやすいため、ノイズ対策が必要です。特に、長い配線を使用する場合や、ノイズの多い環境で使用する場合はノイズ対策が重要になります。

ノイズ対策としては配線の長さを最小限に抑えること、シールドケーブルを使用すること、適切なバイパスコンデンサを使用することなどが挙げられます。また、プルアップ抵抗やプルダウン抵抗を使用することで、ピンの状態を安定させることもできます。

さらに、ソフトウェア的なノイズ対策として、デバウンス処理を行うことも重要です。スイッチやセンサーからの入力は接点のバウンスによりノイズが発生することがあるため、適切にデバウンス処理を行う必要があります。

GPIOピンの設定とクリーンアップ

GPIOピンを使用する前にはピンの設定を適切に行う必要があります。具体的にはピンのモードを入力または出力に設定し、必要に応じてプルアップ抵抗やプルダウン抵抗を有効にします。

また、GPIOピンの使用が終了したら、適切にクリーンアップを行う必要があります。クリーンアップを行わないと、次回のプログラム実行時に予期しない動作をする可能性があります。

クリーンアップでは使用したピンのモードを入力に戻し、プルアップ抵抗やプルダウン抵抗を無効にします。また、オープンドレインで使用していたピンはハイインピーダンス状態に戻します。

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「ハードウェア」に関するコラム一覧「ハードウェア」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。