今回はRaspberry Piに搭載されたハードウェアインタフェースであるGPIOについて解説したいと思います。GPIOの使用事例も公開していますので、Raspberry Pi を使って電子工作に挑戦してみたい方は、ぜひ参考にしてみてください。
また、Raspberry Piの活用事例についても以下の記事で紹介していますので、あわせてご覧ください。
Raspberry Piとは
出典:ラズベリーパイ財団
ラズベリーパイ(Raspberry Pi)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新(2022/07/現在)のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペックは以下の通りです。
CPU | Broadcom BCM2711 プロセッサクワッドコア A72 ( ARM v8 )1.5GHz 64 ビット SoC |
メモリ | 2/4/8GB LPDDR4 SDRAM |
Wifi | 2.4 GHz / 5.0 GHz IEEE 802.11ac |
USB | USB 2.0 ポート x 2 、 USB 3.0 ポート x 2 |
Bluetooth | Bluetooth 5.0 |
GPIO | 40 ピン GPIO ヘッダ |
ビデオ | micro HDMI ポート x 2(最大 4Kp60 をサポート)、 2 レーン MIPI CSI カメラポート |
オーディオ | 4 極ステレオ出力およびコンポジットビデオポート |
マルチメディア | H.265 ( 4Kp60 デコード)、 H.264 ( 1080p60 デコード、 1080p30 エンコード)、OpenGL ES 3.0グラフィックス |
今回はOpenCVを使った画像処理アプリケーションを実行するデバイスとしてRaspberry Pi 4を使用します。Raspberry Piを使用することで、場所を選ばずに設置でき、カメラなどと組み合わせてIoTやエッジAIのアプリケーションを構築できます。
Raspberry Pi本体は以下の記事でレビューをしていますので、あわせてご覧ください。
GPIOとは
GPIO(General Purpose Input Output)とはRaspberry Piを外部のハードウェアと接続するために用意されたインタフェースです。上記写真の基板上の40ピンのピンヘッダがGPIOです。このGPIOを介して外部と通信を行ったり、アクチュエータ(駆動装置)を制御することが可能になります。
Raspberry Pi 4BのGPIOには以下の表のようなピン番号と機能が割り振られています。これらのピンから入出力される信号をRaspberry Pi上のプログラムからコントロールすることができます。
上のRaspberry Pi 4の基板画像の左上からPin No 1となり、右下がPin No 40の並びとなります。これらのPin Noが下記表に対応しています。
今回はRaspberry Pi 4BのGPIOを紹介しましたが、Raspberry Pi のバージョンによりピンNoや機能が異なりますのでご注意ください。
電源ピンとGNDピン
電源ピン
Raspberry Pi 4の電源ピンは5V、3.3Vの電源を外部に供給することができるピンとなります。
写真は冷却ファンの電源をRaspberry Pi 4のGPIOから供給しています。
また、以下のページで紹介したようなDACなど外部に接続して動作するデバイスに対して使用できます。
必要な電源がRaspberry Pi 4から供給できる定格電流を超えるデバイスを接続したり、3.3V、5V以外の電圧を必要とする回路を接続する場合は、別途電源回路を用意する必要があります。
GND(グランド)ピン
グランドは電子回路で扱う電気の電位基準点で0Vを示します。アースとか接地とも呼ばれ基本は大地の電位のことですが、一般的にはプリント基板のグランドパターンや筐体のケースそのものを大地の代わりとして扱います。
例えば、外部にSPIやI2Cで通信を行う機器を接続した場合、GNDを接続することで基準となる0Vを元にHi、Lowを判定します。そのため、GNDを接続していない場合はHi、Lowが正しく判定できずにうまく通信を行うことができません。
GPIOの活用法
ここからは実際にGPIOを使ってハードウェアを制御した活用例を紹介していきます。
ハードウェアPWMを出力する
外部ハードウェアをON/OFFではなく、リニアに制御したい場合に役立つPWM信号をGPIOから出力する方法です。Raspberry PiのGPIO制御ライブラリpigpioを使ってPWM信号を出力し、オシロスコープで波形を計測してみました。
pigpioではハードウェアPWMとソフトウェアPWMが使用できますが、こちらの記事ではハードウェアPWMを使用しました。PWMの周波数やデューティー比の指定方法についても、ソースコードと合わせて解説していますので是非ご活用ください。
DCモーターを制御する
Raspberry PiでDC(ブラシ)モーターを制御した事例です。
以下の記事ではRapsberry PiからのPWM信号を受けて、モーターに電流を流すためのモータドライバIC、L298Nについて解説しています。
モータドライバIC、L298Nを使って実際にDCを駆動している方法を解説しています。GPIOとモータードライバIC、モーターを接続する方法とソースコードを公開しています。
サーボモーターを制御する
駆動する位置を指定して制御することができるサーボモーターをGPIOを使って制御する方法を解説しています。
出力するPWMのデューティーによりモーターの停止位置を決められるらめ、ロボットの手足やラジコンのステアリングなどに活用できるモーターです。
今回は小型のモーターで負荷も取り付けていないため(軽量の負荷であれば同様の構成で行けると思います)、モーターの駆動用電源もRaspberry Pi 4のGPIOから取っています。
リレー回路を制御する
Raspberry Piから出力できる電流は小さいため、大電流を必要とするアプリケーションを直接制御することができません。大電流を扱いたい場合は、GPIOでリレー回路を介して制御してやることで実現できます。
以下の記事ではリレー回路をGPIOから制御する方法を解説しています。
ウォーターポンプを制御する
水をくみ上げることができる電動ウォーターポンプは大電流を必要とするため、先ほど説明したリレー回路を介して制御します。
以下の記事では、電動ウォーターポンプを使って自動で植物に水を供給する自動水やり器の構築方法を解説しています。
アナログ信号を入力する
Raspberry PiのGPIOで扱える信号はデジタル信号のみとなっています。しかし、GPIOのシリアル通信ポート等を使ってADコンバータを接続することでアナログ信号を読み取ることができます。
以下の記事ではTI製のADC、ADS1015を使ってRaspberry Piにアナログ信号を入力する方法を解説しています。
GPIOを扱う際に押さえておきたい基礎知識
Raspberry PiのGPIOを使用する際に押さえておきたい基礎知識を以下の記事で解説していますので、あわせてご覧ください。
まとめ
今回はRaspberry Pi のGPIOについて解説してみました。電子工作には必須となりますので、ぜひGPIOへアクセスするプログラムの作成にも挑戦してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント