頑張らないために頑張る

ゆるく頑張ります

Raspberry PiのGPIO基礎

Posted at — Sep 13, 2023

概要

Raspberry PI(以下、ラズパイ)には「GPIO」と呼ばれるコネクタが搭載されており、そこに接続した外部機器と簡単に信号をやりとりできるよう設計されています。今回は、GPIOに接続したボタンが押されると特定のプログラムが実行されるような仕組みの構築を通じて、ラズパイのGPIOにちょっと触れてみようという話です。

GPIOとは

GPIOの概要

ラズパイのGPIO(General-Purpose Input/Output)は、ラズパイボード上に備わっている汎用入出力ピンのことを指しています。GPIOピンは、ユーザーがデジタル信号を入出力するためのピンで、ラズパイにさまざまな信号を入出力させるのが目的です。

ラズパイのGPIOピンは、ユーザーがデジタル信号を制御するために使用できる40本のピンから構成されています。これらのピンは、低電圧(0V)と高電圧(3.3Vまたは5V、モデルに依存)の2つの電圧レベルで動作します。

GPIOピン

GPIOピンの主要な用途には以下のものがあります。

電源ピン(Power Pins)

下記の2つが存在します。

GNDピン(Ground Pins)

DNC(Do Not Connect)

古いラズパイにはDNCというピンがありました。最近のモデルにはないはずです。

I/Oピン(Input/Output Pins)

残りのGPIOピンは、デジタル入出力ピンとして使用されます。これらのピンは、ユーザーがデジタル信号の入力と出力を制御するために利用できます。各ピンには固有の番号(BCM番号と物理ピン番号)が割り当てられています。使用例に応じて、これらのピンを制御するためのPythonコードを書くことができます。

GPIOピンで何ができるのよ

どんな信号を入力したり出力したりするかにより、さまざまな利用用途が考えられます。

実装方法

必要な機器、デバイスなど

今回の実装に必要な機器やデバイスを考えます。

  1. ラズパイ本体
  2. ブレッドボード
  3. タクトスイッチ
  4. ジャンパーワイヤー

ラズパイ本体

ラズパイ本体は任意のモデルで問題ありません。新しい方がもちろん良いですが、今回動かす処理はさほど重くないので、ラズパイZeroなんかでも多分大丈夫だと思います。

$ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
$ python3 --version
Python 3.7.3
$ pip3 --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

自分は上記の環境で実装しました。Pythonのバージョンが若干古いですが、これはbuster版Raspbianをインストールしてから、とくにアップデートしていないためです。

ブレッドボード

ブレッドボードとは、本来はんだ付けが必要なLEDやセンサ、スイッチなどのデバイスを、はんだ付けなしで利用できるようにする、規則的に穴の空いた板のことです。

ブレッドボードとは電子回路の実験や試作をするための板のことである。「プロトタイプ基板」や「プロトタイピング基板」とも。

いくつか種類があるものの、現在ではブレッドボードといったら差し込み式のものを指すと思います。その名の通り、ジャンパピンやLED、抵抗などの足を差し込んで回路を作るものです。これのおかげで、誤った回路にしてしまっても、別の場所に差し替えるだけですぐ修正できます。トライアンドエラーしやすく、デバッグがすこぶる簡単になります。はんだ付けしてしまうケースだと、こういう修正が非常に面倒なんですね。

タクトスイッチ

タクタイルスイッチとも(どっちが一般的かは不明)言う、要は「ボタン」です。

プリント基板上に設置され、人が操作部を押し込むことで電気回路を通電させる小形のスイッチです。操作部を押すとオン、離すとオフになる「モーメンタリ動作」をします。 タクタイルスイッチは「感触のあるスイッチ」という意味です。

今回は、このボタンを押すと特定のプログラムが開始されるような仕組みを目指します。

ジャンパーワイヤー

差し込み式のブレッドボードを利用する場合、抵抗やボタンなどの機器を指してもそれが直接ラズパイのGPIOと接続されるわけではありません。じゃあどうやって機器とGPIOと接続するかというと、それぞれをジャンパーワイヤーという線で交互に接続します。

オスメスがありますが、ここではブレッドボードで利用するため基本的に両端がオス、あるいは「オス・メス」であるジャンパーワイヤーを利用します。ブレッドボード上では両端がオスのジャンパーワイヤーを利用しますが、GPIOとブレッドボードを接続する場合のみ、「オス・メス」のジャンパーワイヤーが必要になります。

その他

T型拡張ボード

ラズパイのGPIOはボードから直接突き出ています。つまり、活電部がそのまま露出していることになるので、誤ってショートさせたりする危険があります。また、ブレッドボードと接続する際に「ラズパイのGPIOの位置を確認してからジャンパーワイヤーで接続して、ブレッドボード側で機器を接続。うまく動作しなければGPIOを再度確認して、ブレッドボードを確認して・・・」という感じで、まあまあ面倒です。

このT型拡張ボードを利用すると、活電部の露出をなくしつつ、すべてブレッドボード上で完結できるようになります。大して高くないので買っておくと、とくにデバッグ時に幸せになれます。

機器のセットアップ

ここでは詳細な機器のセットアップは割愛します。

まずはLピカ

まずはラズパイとブレッドボードなどの機器が確実に接続できたか確認するために、「Lピカ」をやってみます。

わりとよくGPIO制御のチュートリアルとして出てくる「Lチカ」は、PythonコードなどによりLEDを点滅させるよう制御することです。が、ここでは単純に接続ができたか否かを確認できればいいので、GPIOから電源を取って単純にLEDを光らせる「Lピカ」をやってみます。

といっても、方法は特定の回路をブレッドボード上に構築するだけです。回路はこのあたりを参考にすればいいかと思います。

ここでLEDが光らない場合、いくつか原因が考えられます。

また、T型拡張ボードを利用している場合、ラズパイと拡張ボードの方向が正しく装着されているか確認してください。T型拡張ボード側のコネクタには凹部があるので、これがケーブルを指す手がかりになります。コネクタの凹部とケーブルの凸部がハマるよう、ケーブルを差し込んで接続すればいいので簡単です。

問題はラズパイのGPIO側です。GPIO側は差し込む方向の手がかりがなく、とりあえず指してみて確認するしかありません。が、GPIOに差し込む方向が誤っていると、拡張ボードに記述してあるPINがGPIOのPINが正しく対応しません。とりあえず正しいと思われる方向で指してみて、「Lピカ」で動作を確認するのが、回り道ですが確実だと思います。ここでLEDが光らなければケーブルを逆に挿している可能性がありますので、GPIO側のケーブルを指し直して再度Lピカをやってみましょう。今度はLEDが光るはずです。

まとめ

Raspberry PiのGPIOピンは、電子プロジェクトや制御システムの構築に非常に役立ちます。電源ピン、GNDピン、I/Oピンの機能を理解し、適切に使用することで、Raspberry Piをさまざまなアプリケーションに適用できます。

今回はだいぶ簡単な制御を実装しました。が、多くのセンサーだったりボタンなどの入力措置、アクチュエータやディスプレイなどの出力装置をGPIOピンで活用することにより、さまざまなデジタルデバイスと連携して、ラズパイをベースにした複雑なシステムを構築できます。電源とかラズパイ自身の処理能力って問題もあるけどね!

GPIOピンの入出力は、ラズパイによる機器制御の基礎になる必須の知識です。色々試して、電子工作に活用してみます。

参考

  1. GPIO and the 40-pin Header
  2. ラズパイ(Raspberry Pi)のGPIOを再確認!
  3. 第9回「ラズベリーパイで電子工作!Lチカ…の前にLピカ!」
  4. 【 第2回 】T型GPIO拡張ボードで、先ずはLピカ!
comments powered by Disqus