MENU

Raspberry Pi の GPIOをさわってみる

目次

 1. Raspberry Pi のGPIOについて

Rasiberry PiにはGPIOというトゲトゲがついているのが、普通のPCにはないところ。
これはPCしか触ってない、また大学や趣味で電子工学、工作とかをやってない人にはもう何を行っているのかさっぱりわからない。
LANも、USBも、Bluetoothも、そういうのはわかるけどこのトゲトゲは何なのかと。なんで汎用使用ができるのかと。
少しだけわかったことをまとめてみたい。
この写真の右側のトゲトゲね。古いPCの自作の人には、Floppyのケーブルか、IDEですか?プライマリとセカンダリはどこで切り替えるんですか?ってなってしまうw
このPinの意味は、公式ページで確認するのが手堅いですよね。
※製品購入したので、公式ページからの引用をさせていただきます。

Any of the GPIO pins can be designated in software as an input or output pin and used for a wide range of purposes.

つまり、GPIOってなっているところは、ソフトウェアからインプット もしくは アウトプットに使うことができるよと。

 なのでGPIOピンを出力として使う場合、3.3Vを出力したり、OFF(0V)にしたりすることができる。逆に入力として使う場合、3.3Vを入力(検出という意味?)したり、OFFにしたりすることができる。

 まだ、Raspberry Pi 5のPinoutの結果は少なかったので、同じですが以下に貼っておきます。

2. LEDチカチカとスイッチ入力を確認する

Oreillyから出版されている、Raspberry Piをはじめよう第四版にそってLEDと入力を確認してみる。
一部、、書籍通りにいかないところがあったのでそこはこの中で注記していきたい。
 
まずはそもそも電子部品が必要。LEDとジャンパーピン(オスーオス、オスーメス)、抵抗、スイッチが必要なわけだけど、めんどくさいので今後の勉強向けに以下のようなキットを購入。
 

ドサッと入っているキット。
 

2.1 LEDを光らせる

まずは配線。
GPIO25番(25番目のピンというわけでないからめんどくさい)とGNDの間にLEDを挟むだけ。
これでつまり、GPIO25を出力として使って、3.3Vをオンにすれば光るし、オフにすれば消えるというそういうことをやりたいわけですね。
 ※先にそう書いてくれればわかりやすいのに。

ちょっとわかりにくいですが。

  1. ブレッドボードのマイナスと3番ピンのGNDを接続(マイナス同士ね)
  2. GPIOの25番とLEDのプラス側を接続
  3. LEDのマイナス側とブレッドボードのマイナスを接続

これだけ。GPIO25を出力にして、3.3Vを出せば、GPIO35→LED→GNDって電気が流れるってことなんだろう。知らんけど。

 

で、これをLinuxから操作できるところが醍醐味なわけですが、書籍通りには行かない。

root@raspberrypi:/sys/class/gpio# echo 25 > /sys/class/gpio/export
bash: echo: 書き込みエラー: 無効な引数です

ってなってしまう。GPIOの番号だって書いてあるのにそうは行かない。
ちょっとよくわからないけど、

root@raspberrypi:/sys/class/gpio# cat /sys/kernel/debug/gpio | grep GPIO25
 gpio-596 (GPIO25              )

こうやってGPO25に紐づく番号を調べる必要がありそう。そのうえで、この場合だと596番を使用する。

root@raspberrypi:/sys/class/gpio# echo 596 > /sys/class/gpio/export
root@raspberrypi:/sys/class/gpio# cd /sys/class/gpio/gpio596
root@raspberrypi:/sys/class/gpio/gpio596# ls
active_low  device  direction  edge  power  subsystem  uevent  value

これで、

  • direction → このファイルに inと書けば入力、 outと書けば出力
  • value → このファイルに1と書けばON、0と書けばOFF

といったところ。

なのでdirectionをoutにした状態で、
root@raspberrypi:/sys/class/gpio/gpio596# echo 1 > value
これで光るし
root@raspberrypi:/sys/class/gpio/gpio596# echo  0 > value
これで消える。

2.2 スイッチの入力を読み取る

次に、3.3Vの常時出力のピンとスイッチとGPIOを接続し、スイッチが押されて3.3Vが入力されているかどうかを読み取る。
追加するとこんな感じ。
3.3Vの出力をブレッドボードの+にせつぞくし、そこからスイッチ→GPIO24番に接続。
スイッチが切れていれば、3.3Vを検出せず、押されていれば3.3Vを検出すると。
結局これも
root@raspberrypi:/sys/class/gpio/gpio596# cat /sys/kernel/debug/gpio | grep GPIO24
 gpio-595 (GPIO24              )
こうやって番号を調べて
root@raspberrypi:/sys/class/gpio/gpio596# echo 595 > /sys/class/gpio/export
root@raspberrypi:/sys/class/gpio/gpio596# cd /sys/class/gpio/gpio595
root@raspberrypi:/sys/class/gpio/gpio595# echo in > direction
入力に切り替える。
あとはボタンを押したり、押さなかったりしながら、
root@raspberrypi:/sys/class/gpio/gpio595# cat value
ってやると
  • スイッチを押している → 1が返される
  • スイッチを話している → 0が返される

ってなりますと。地味。

一見、無意味に思えるけど。通常のハードウェアだけの制御だと、スイッチを押す→電気が流れる→LEDが光ると物理的な制御しかできないけど。
電気回路的につながっていないスイッチであっても、スイッチの値がONになったら、Raspberry Pi側でLEDのGPIOの値を1にしてあげることで光ると。
電気回路をソフトウェアで制御することができますねと。そういうことなのかなと。
 
いったんここまで。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次