#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