私的AI研究会 > ラズパイ覚書 > GPIO

GPIO General Purpose Input/Output

ピンアサイン

USB/LAN コネクタを下側にした基板上のコネクタ

BCM名称PinPin名称BCM
BCM名称PinPin名称BCM
 3.3V125V
2I2C SDA (8)345V
3I2C SCL (9)56GND
4(GPIO 7)78(15) UART TxD14
GND910(16)UART RxD15
17(GPIO 0)1112(GPIO 1)18
27(GPIO 2)1314GND
22(GPIO 3)1516(GPIO 4)23
3.3V1718(GPIO 5)24
10SPI MOSI (12)1920GND
9SPI MOSO (13)2122(GPIO 6)25
11SPI SCLK (14)2324(10) SPI CE08
GND2526(11) SPI CE17
0ID SD (30)2728(31) ID SC1
5(GPIO 21)2930GND
6(GPIO 22)3132(GPIO 26)12
13(GPIO 23)3334GND
19(GPIO 24)3536(GPIO 27)16
26(GPIO 25)3738(GPIO 28)20
GND3940(GPIO 29)21
  • (  ) → wPI ピン・アサイン (WiringPiライブラリ用)
  • BCM → GPIO番号
  • Pin → 実際のピンアサイン

GPIO コマンド

 GPIOを操作する「gpio」コマンドは「Wiring Pi」ライブラリを使用する。(通常は標準実装されている。)

RPI.GPIO 制御ライブラリ ※ 2020/07/18更新

 RPI.GPIO は Python Software Foundation からリリースされている GPIO を制御するパッケージ。(Raspbian full にはインストール済、Raspbian lite にはインストールされていない。)
使用するには、Pythonのプログラムの先頭で import 宣言をする。

$ import RPi.GPIO as GPIO

RPi.GPIO を呼び出す場合、RPi.GPIO.setup() というようにドット(.)で呼び出す。毎回 RPI.GPIO と書くのは長なるので、importする際に別名を付けることができる。別名は「as 別名」で指定。

$ import RPi.GPIO as GPIO

以後、GPIO.setup() というように呼び出すことができる。

チャンネルの指定方法

RPi.GPIO では、P1から始まるボード上の物理的なピン番号、もしくはチップから見たGPIOピンの番号(GPIO12など)のいずれかをチャンネルとして抽象化して扱う。チャンネルのモード指定は必須。

デジタル出力

アナログ出力

  1. ピンに対して周波数を設定してpwmオブジェクトを取得。
    pwm = GPIO.PWM([チャンネル], [周波数(Hz)])
  2. pwmオブジェクトに対してデューティ比を指定して出力を開始。
    pwm.start([デューティ比])
    例:ピン18に周波数1KHz、デューティ比50%でPWM出力する場合
    pwm = GPIO.PWM(18, 1000)
    pwm.start(50)

GPIO入力

割り込みとエッジ検出

電気信号が LOW から HIGH (立ち上がりエッジ) または HIGH から LOW (立ち下がりエッジ) の状態に変化する瞬間の状態変化をイベントとして通知する仕組みが用意されている。

GPIO.add_event_detect([チャンネル], [検出したいエッジ], callback=[コールバック関数名], bouncetime=[バウンス時間(ミリ秒)])
 

忘れずにボードクリアを!

 RPi.GPIOのプログラムを実行するとThis channel is already in useの警告がでる場合がある。これは以前 GPIO.setup() を実行してポートのセットアップをした後、クリアしていないときに発生する。
プログラムの最後に以下を必ず記述しておく。

GPIO.cleanup()
 

参考資料

参考サイト

ドキュメント

 

Last-modified: 2020-07-18 (土) 07:24:29