- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-02-18T00:56:02+00:00","default:mizutu","mizutu")
[[私的AI研究会]] > [[ラズパイ覚書]] > GPIO
* GPIO General Purpose Input/Output [#k811322a]
#contents
** ピンアサイン [#x9ab71a9]
> USB/LAN コネクタを下側にした基板上のコネクタ
|CENTER:COLOR(red):BCM|CENTER:名称|CENTER:Pin|CENTER:Pin|CENTER:名称|CENTER:COLOR(red):BCM|h
|RIGHT: |RIGHT:BGCOLOR(#FF9933):3.3V |BGCOLOR(#FF9933):RIGHT:1 |LEFT:BGCOLOR(#FF3333): 2 |LEFT:BGCOLOR(#FF3333): 5V |RIGHT: |
|RIGHT:2 |RIGHT:I2C SDA (8) |RIGHT:3 |LEFT:BGCOLOR(#FF3333): 4 |LEFT:BGCOLOR(#FF3333): 5V |RIGHT: |
|RIGHT:3 |RIGHT:I2C SCL (9)|RIGHT:5 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): 6 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): GND |RIGHT: |
|RIGHT:4 |RIGHT:(GPIO 7) |RIGHT:7 |LEFT: 8 |LEFT: (15) UART TxD |RIGHT:14 |
|RIGHT: |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):GND |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):9 |LEFT:10 |LEFT: (16)UART RxD |RIGHT:15 |
|RIGHT:17 |RIGHT:(GPIO 0) |RIGHT:11 |LEFT:12 |LEFT: (GPIO 1)|RIGHT:18 |
|RIGHT:27 |RIGHT:(GPIO 2) |RIGHT:13 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000):14 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): GND|RIGHT: |
|RIGHT:22 |RIGHT:(GPIO 3) |RIGHT:15 |LEFT:16 |LEFT: (GPIO 4)|RIGHT:23 |
|RIGHT: |RIGHT:BGCOLOR(#FF9933):3.3V |RIGHT:BGCOLOR(#FF9933):17 |LEFT:18 |LEFT: (GPIO 5)|RIGHT:24 |
|RIGHT:10 |RIGHT:SPI MOSI (12) |RIGHT:19 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000):20 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): GND|RIGHT: |
|RIGHT:9 |RIGHT:SPI MOSO (13) |RIGHT:21 |LEFT:22 |LEFT: (GPIO 6)|RIGHT:25 |
|RIGHT:11 |RIGHT:SPI SCLK (14) |RIGHT:23 |LEFT:24 |LEFT: (10) SPI CE0|RIGHT:8 |
|RIGHT: |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):GND |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):25 |LEFT:26 |LEFT: (11) SPI CE1|RIGHT:7 |
|RIGHT:0 |RIGHT:ID SD (30) |RIGHT:27 |LEFT:28 |LEFT: (31) ID SC|RIGHT:1 |
|RIGHT:5 |RIGHT:(GPIO 21) |RIGHT:29 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000):30 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): GND|RIGHT: |
|RIGHT:6 |RIGHT:(GPIO 22) |RIGHT:31 |LEFT:32 |LEFT: (GPIO 26)|RIGHT: 12|
|RIGHT:13 |RIGHT:(GPIO 23) |RIGHT:33 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000):34 |LEFT:COLOR(#FFFFFF):BGCOLOR(#000000): GND|RIGHT: |
|RIGHT:19 |RIGHT:(GPIO 24) |RIGHT:35 |LEFT:36 |LEFT: (GPIO 27)|RIGHT: 16|
|RIGHT:26 |RIGHT:(GPIO 25) |RIGHT:37 |LEFT:38 |LEFT: (GPIO 28)|RIGHT: 20|
|RIGHT: |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):GND |RIGHT:COLOR(#FFFFFF):BGCOLOR(#000000):39 |LEFT:40 |LEFT: (GPIO 29)|RIGHT: 21|
|CENTER:COLOR(red):BCM|CENTER:名称|CENTER:Pin|CENTER:Pin|CENTER:名称|CENTER:COLOR(red):BCM|f
- ( ) → wPI ピン・アサイン (C言語ライブラリ用 ?)~
- COLOR(red){BCM → GPIO番号}
- Pin → 実際のピンアサイン
** GPIO コマンド [#h19da230]
GPIOを操作する「gpio」コマンドは「Wiring Pi」ライブラリを使用する。(通常は標準実装されている。)
- コマンドのバージョンを調べる~
&color(green){gpio -v};
$ gpio -v
ここでの出力に Type: Unknown が表示されている場合古いライブラリの可能性あり。~
参照 → [[GPIO エラー:配線ライブラリの古いバージョン?>ラズパイ覚書]]
- GPIOポートの状態を調べる~
&color(green){gpio readall};
$ gpio readall
+-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | IN | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 4B--+---+------+---------+-----+-----+
-- "Physical"は物理的な番号
-- 両端の"BCM"は GPIO番号
-- "Mode"は現在のピンのモード(IN/OUT)~
初期状態ではすべてのピンは入力に設定されている。
-- "V"はピンの値(1ならON、0ならOFF)
- GPIOからの入力~
&color(green){gpio -g read (GPIO番号)};
$ gpio -g read 16
-- ON であれば 1 OFF であれば 0 が出力される。
- GPIO のモード変更~
&color(green){gpio -g mode (GPIO番号) in/out};
$ gpio -g mode 16 out
- GPIOへの出力~
- &color(green){gpio -g write (GPIO番号) 0/1};
$ gpio -g write 16 1
** RPI.GPIO 制御ライブラリ [#wd773735]
> RPI.GPIO は [[Python Software Foundation>https://www.python.org/]] からリリースされている 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 関数 [#v6a89423]
- GPIO番号指定モードの設定~
GPIO番号の指定方法の設定 (GPIO番号/基板の物理ピン番号) を設定する。~
&color(green){GPIO.setmode(モード)};
$ GPIO.setmode(GPIO.BCM) # GPIO番号を設定
$ GPIO.setmode(GPIO.BOARD) # 基板の物理ピン番号を設定
- GPIO の入出力の設定~
GPIO端子の入力/出力設定、プルアップ、プルダウン抵抗の設定。~
&color(green){GPIO.setup(ピン番号,モード)};
$ GPIO.setup(ピン番号, GPIO.OUT) # 出力指定
$ GPIO.setup(ピン番号, GPIO.IN) # 入力指定
例: GPIO 21ピンを出力に設定~
$ GPIO.setup(21, GPIO.OUT) # GPIO21番ピンを出力に設定
- GPIO の出力制御~
GPIOピンを出力モードに設定すると、出力を 0 か 1 を指定することにより、0V、3.3V に制御できる。~
&color(green){GPIO.output(ピン番号,出力)};
$ GPIO.output(ピン番号, 1) # ピンの出力を3.3Vにする
$ GPIO.output(ピン番号, 0) # ピンの出力を0Vにする
例: GPIO 21ピンを3.3V出力に設定^
$ GPIO.output(21, 1) # GPIO21番ピンに3.3V出力する
- GPIO の入力読み取り~
GPIOピンを入力モードに設定すると、ピンの電圧状態を 0 か 1 で読み取ることができる。~
&color(green){GPIO.input(ピン番号)};
$ GPIO.input(ピン番号) # ピンの電圧状態読み取る
実際にはピンの電圧状態が返るので、結果を変数に入れたり表示する。
$ print GPIO.input(ピン番号) # ピンの電圧状態を得る
- GPIO の設定リセット
GPIO を使い終わったら、GPIO の設定をリセットする。~
&color(green){GPIO.cleanup()};
$ GPIO.cleanup() # GPIO設定をリセット
#br
** 忘れずにボードクリアを! [#kcc08f88]
> RPi.GPIOのプログラムを実行するとThis channel is already in useの警告がでる場合がある。これは以前 GPIO.setup() を実行してポートのセットアップをした後、クリアしていないときに発生する。~
''プログラムの最後に以下を必ず記述しておく。''
GPIO.cleanup()
#br
* 参考資料 [#g1bb8cc0]
** 参考サイト [#md690c61]
- [[コマンドラインからGPIOを操作する>+http://tomaberry.hatenablog.com/entry/2017/02/12/155910]]
- [[Raspberry PiでPythonのRPi.GPIOを使ってLチカする>+https://qiita.com/masato/items/715e28e0c0c945a54297]]
** ドキュメント [#z6e6f5c4]
- [[公式ドキュメント>+https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md]]
- [[Python ライブラリ RPi.GPIO オフィシャルページ>+https://pypi.org/project/RPi.GPIO/]]~
- [[公式ドキュメント raspberry-gpio-python>+https://sourceforge.net/p/raspberry-gpio-python/wiki/Examples/]]
#br