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