メインコンテンツまでスキップ

「RaspberryPi」タグの記事が1件件あります

全てのタグを見る

RaspberryPiのGPIOを利用した電子工作学習

近藤
ディアシステム(株)開発一部第5課

数年前に購入して、そのまま放置してしまっていた、RaspberryPi B3 と、電子工作キットを使ってプログラミング学習をしていきたいと思います。 今回は、外部装置とデジタル信号のやり取りを行う GPIO について解説します。

GPIO について

GPIO(General Purpose Input/Output)は、デジタル信号を入力にも出力にも使える汎用 I/O ポートで、設定によって様々なデバイスやセンサーの制御、信号の送受信に利用することができます。

RaspberryPi の GPIO ポートの構成について

RaspberryPi に基板上に 40 本のピンヘッダがあり、その端子に配線することで GPIO を使用することができます。

RaspberryPi の GPIO GPIO

GPIO の制御方法

仮想ファイルシステムで制御

Raspberry Pi では仮想ディレクトリ/sys/class/gpio を通して GPIO にアクセス出来ます。 仮想ファイルシステムを読み書きして制御するようになっています。

/sys/class/gpio/export

仮想ファイル「/sys/class/gpio/export」にポート番号を書き込むと「/sys/class/gpio」内に"gpio"にポート番号が付いた仮想ディレクトリが作成されます。

$ echo ポート番号 > /sys/class/gpio/export

例えば、仮想ファイル「/sys/class/gpio/export」にポート番号"2"書き込むと、「/sys/class/gpio/」内に「gpio2」という仮想ディレクトリが作成されます。

この仮想ディレクトリ内に GPIO の入出力方向を設定する仮想ファイル「direction」と、入出力値を読み書きする仮想ファイル「value」が作成されます。

/sys/class/gpio/gpio2/direction
/sys/class/gpio/gpio2/value

仮想ファイル「/sys/class/gpio/gpio2/direction」に"out"を書き込むと出力、"in"を書き込むと入力になります。

$ echo 入出力方向 > /sys/class/gpio/gpio2/direction

ポート GPIO2 を出力に設定した場合は以下のコマンドで仮想ファイル/sys/class/gpio/gpio2/value に出力値を書くと、その値が GPIO2 に出力されます。

$ echo 出力値 > /sys/class/gpio/gpio2/value

ポート GPIO2 を入力に設定した場合、以下のコマンドで仮想ファイル/sys/class/gpio/gpio2/value から GPIO2 の入力値を取得することが出来ます。

$ echo /sys/class/gpio/gpio2/value

プログラムからのアクセス(C 言語)

C 言語で仮想ファイルシステムで GPIO を制御して、LED 点灯 ⇒ 消灯するプログラムの例です。

led.c
#include <fcntl.h>
#include <unistd.h>

int main (void)
{
int fd;

fd = open("/sys/class/gpio/export", O_RDWR);
write(fd, "17", 2);
close(fd);
sleep(1);

fd = open("/sys/class/gpio/gpio2/direction", O_RDWR);
write(fd, "out", 3);
close(fd);

fd = open("/sys/class/gpio/gpio2/value", O_RDWR);
write(fd, "1", 1);
close(fd);
sleep(2);

fd = open("/sys/class/gpio/gpio2/value", O_RDWR);
write(fd, "0", 1);
close(fd);

fd = open("/sys/class/gpio/unexport", O_RDWR);
write(fd, "17", 2);
close(fd);

return 0;
}

ライブラリで制御

プログラムからのアクセス(Python)

Python で GPIO を制御するためのライブラリとして、RPi.GPIO、gpiozero がよく使われています。

RPi.GPIO

  • Raspberry Pi の GPIO ピンを制御するための低レベルライブラリ
  • より細かい制御が可能で、高度な設定や特定のハードウェアの制御に適している

Python で RPi.GPIO を使用して、LED 点灯 ⇒ 消灯するプログラムの例です。

led.py
import RPi.GPIO as GPIO
import time

GPIO_PORT=17

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PORT, GPIO.OUT, initial=GPIO.LOW)

GPIO.output(GPIO_PORT, 1)
time.sleep(2)
GPIO.output(GPIO_PORT, 0)

GPIO.cleanup()

gpiozero

  • 初心者向けに設計された、より高レベルな GPIO ライブラリ
  • LED やボタンなどの一般的なデバイスを簡単に制御するためのクラスや関数を提供
  • 自動的にプルアップ抵抗を設定するなど、使いやすさに重点を置いています

Python で gpiozero を使用して、LED 点灯 ⇒ 消灯するプログラムの例です。

led.py
from gpiozero import LED
import time

GPIO_PORT=17

led = LED(GPIO_PORT)

led.on()
time.sleep(2)
led.off()

以上、GPIO とその制御方法(の一部分ですが)について紹介いたしました。

次回は、実際に電子工作キットを使用して、プログラミング学習していきたいと思います。

未経験から始める
システムエンジニア

一生モノのITスキルを身につけよう

あなたの経験とスキルを
ディアシステムで発揮してください!