Raspberry PiのGPIOを制御するための回路を組み立てます。
GPIOとは
Raspberry Piに限らず、BeagleBone BlackやArduinoなどでも「GPIO」という言葉がでてきます。電子工作が初めての方から、このGPIOという言葉がわかったような、わからないような、ということをよく聞きます。Raspberry PiのGPIO制御方法を確認する前に「GPIO」という言葉について簡単に説明しておきます。
よく、「GPIOとは『General Purpose Input/Output』の略で、汎用入出力のことです」という説明がされています。まず「入出力」ということは電気信号を入力したり出力したりできるんだろうな、ということは想像つきそうです。でも「汎用」って具体的にどういう意味かわかりづらいですよね。「汎用」というぐらいなので「専用」がありそうですが、「専用ピン」という言葉はあまり聞きません。そこで、具体例を挙げて、どのような機能を持つピンが汎用で、どのようなピンが汎用ではないのか(専用ピンなのか)という説明をしてみます。余計にわからなくなったら、、、ゴメンナサイ。
突然ですが、ステッピングモータってご存知でしょうか。
おもちゃでよく使われているモータは一般にDCモータと呼ばれているもので、
このように2つの端子が付いています。この2つの端子に電池のプラスとマイナスをつなぐとモータが回ります。電池で走る車や電車のおもちゃをつくる場合はこのようなモータが使われています。でも組み立てロボットのアームなど、正確な動作が必要な時に使用するモータはどうでしょうか。上のモータは電池をつなぐと回り始め、回転速度や回転角度の制御をするのはかなり困難です、というかほぼ無理です。ロボットアームでは、どのくらいの速度でどのくらい回転して、というような細かい制御をしたいですよね。そこでこのような目的に使用する、回転を正確に制御できるモータがあります。それがステッピングモータです。
上のリンクにあるステッピングモータは1.8度単位で回転を制御できます。1.8度というステップ単位で回転を制御できるのでステッピングモータと呼ばれています。ステップ単位で回転が制御できますので、例えば90度ちょうど回転させたいなどの制御ができます。ただ、このステッピングモータは電池をそのままつないでも動きません。モータの画像を見ていただければわかると思いますが、線がたくさん出ていますよね。実はそれぞれの線に加える電圧をうまい具合に制御すると回転します。制御方法自体の詳細な説明はしませんが、以下のリンクにあるように、各線にかける電圧を順番にずらしながらON/OFF制御すると回転します。また、このON/OFF制御する時間間隔を変えることにより回転速度も正確に制御できます。
このような制御はマイコンなどを使ってブログラムを組めば制御できますが、ステッピングモータを制御するのであれば、制御信号はいつも決まったパターンになりますので、もっと手軽に制御したいと思いますよね。ということで、ステッピングモータ制御専用の部品が売られています。以下は一例です。
ステッピングモータを制御する場合、このICに回転方向や回転ステップ数、回転速度などを設定すると、上のリンクにあるようなステッピングモータを制御する信号を生成してくれます。上のICでは、4, 9, 16, 21番ピンからステッピングモータを制御するための信号が出ていて、これらをステッピングモータのそれぞれの線に接続すると回転制御できます。
かなり長い説明になってしまいましたが、このICの例では、4, 9, 16, 21番ピンは、ステッピングモータを制御するためだけに用意された「専用」のピンですよね。
このような特定用途のピンはGPIOとは呼びません。かといってわざわざ専用ピン、とも呼ばないのでGPIOが理解しづらくなっているのかもしれません。
では、どのようなものがGPIOなのでしょうか。
Raspberry Piにはいろいろな機能を持ったピンがあり、ひとつは0Vか3.3Vのどちらかを入出力するピンです。これは出力を0Vにするのか3.3Vにするのかプログラムで制御できます。また今、ピンにかかっている電圧(入力の電圧)が0Vか3.3Vなのか調べることもできます。
0Vか3.3Vというピンの状態を入出力に使えるということは、例えばそのピンにLEDをつなぎ、ピンの電圧を制御するプログラムを動作させればクリスマスツリーの電飾をつくることができます。また、赤外線LEDをつないでうまくピンの電圧を制御すれば特定のリモコン信号を発生させることができ、家電をリモコン制御できます。さらにスイッチを接続すればONがOFFかの信号を入力することができます。このように入出力ピン自体は0Vか3.3Vのどちらかの出力をしたり、入力をしたりする機能を持っているだけで、どのような目的に使うのかというのは予め決められていません。使いようによっていろいろな目的で使用できるわけです。このようなピンを、汎用的に使用できる、という意味で「汎用入出力」ピン、つまり「GPIO」ピン、と呼んでいます。
Raspberry PiではGPIOピンが17本用意されています。また17本のGPIOピンのうち、特定のピンはデータ通信を行うピンと兼用になっています。これについては後ほど説明します。
Raspberry PiのGPIOピン構成
それではRaspberry PiのGPIOピン構成を確認してみましょう。まずRaspberry Piのコネクタピンは全部で26本あります。この26本には1から26まで物理的な「ピン番号」が振られています。いろいろな電子部品はピンが複数ある場合、1番ピンがわかるように何らかの目印が付いています。Raspberry Piでは以下のように「P1」と書かれていて、ピンの一番左下が1番ピンになります。
2番から26番までは以下のように振られています。
先ほどRaspberry Piでは17本のGPIOピンを持っている、と説明しました。Raspberry PiのGPIOコネクタは全部で26本ありますが、26本のうち電源やグランドのピンが9本あります。そのため26-9=17、ということで17本がGPIOに使用できます。
GPIOピンは17本もありますので、それぞれを区別するために番号が付いています。例えば、”GPIO 3″ピン、などです。ここから先がかなりややこしい話になります。GPIOピンが17本あるので、”GPIO 0″ 〜 “GPIO 16″というようにGPIO番号は順番に振られてはいるのですが、同じピンにそれとは別のGPIO番号が振られていて、そちらの番号は飛び飛びなんです。この理由を説明します。
MacやWinPC本体を開けて中身を見たことがある方はわかると思いますが、本体の中には、CPUがあって、メモリがあって、ビデオカードがあって、という感じでいろいろな部品が別々に組み込まれています。一方でRaspberry Piなど小さなコンピュータの場合は、CPUやメモリなどなどいろいろな部品を別々に置くスペースがほとんどありませんので、ひとつの部品にCPU、メモリなど多くの機能を詰め込んでいます。このような部品をSoC(Sillicon on Chip)などと呼んでいます。この部品はひとつでさまざまな機能を対応しているため、多くの機能のピンを持っていて、このSoCがGPIOピンも持っています。Raspberry Piの基板にあるGPIOコネクタはこのSoCのGPIOピンに接続されているのですが、SoCのGPIO番号とRasberry PiのGPIOコネクタの番号が違うのです。以下に例を示します。
SoCには多くのGPIOピンがあり、そのうち例えば”GPIO 11″はRaspberry PiのGPIOコネクタの物理ピン番号23番ピンに接続されています。SoCでは”GPIO 11″ですが、GPIOコネクタ側ではこれを”GPIO 14″と呼んでいます。同じような感じで、SoCの”GPIO 27″ピンはGPIOコネクタの物理ピン番号13番に接続されていて、GPIOコネクタ上では”GPIO 2″ピンと呼んでいます。
このような背景があり、Raspberry PiのGPIOコネクタの物理ピンには、2通りのGPIO番号の呼び方があります。プログラムでGPIOピンを制御する場合、このGPIO番号を指定しますが、どちらの呼び方なのか注意する必要があります。なんかややこしいですね。
ということで、Raspberry PiのGPIOコネクタの物理ピン番号、SoCでのGPIO番号の呼び方、GPIOコネクタでのGPIO番号の呼び方をまとめておきます。
なお、SoCでの呼び方は、ネットや書籍をいくつか調べたところ、単に「ピン名」などと呼ばれていました。また当初のRasberry Piでは、このSoCはBroadcom社製の部品だっため「Broadcom名」と呼んでいるところもありました。
GPIOコネクタでの呼び方は、「Raspberry Pi名」という呼び方をしているところもありました。また、プログラムでの制御方法を説明する際にでてきますが、WiringPiというツールで制御する場合、GPIOコネクタでの番号で指定するため、「WiringPi番号」と呼んでいるケースもありました。
なんか長くなってしまいましたので、ここで一旦区切ります。次回「その2」では、回路図、ブレッドボードでの組み立て、動作確認を行います。
その3の記事はないのですか?
ご質問どうもありがとうございます。
回路組み立てについては、その1、その2の記事で完成していますので、特にその3以降の記事はありませんが、もしわからないことなどありましたらご質問いただければと思います。