GPIOというのはGeneral Programmable IOという意味でつまりは、用途に合わせて設定できる入出力ピンということだ。 ソフトウエアで設定すれば入力ピンにも出力ピンにもなるという便利もので、40年前に電気工学を勉強した自分にとっては夢みたいなハードウエアなのだ。
BeagleboneBlackにはこのGPIOピンが69pinも用意されている。(とはいうもののHDMIとeMMC support用にリザーブされているピンもあるので全部が即使える、というわけではない. それでも30本以上はありそうだ) デジタル入出力のほかにもアナログ入力や出力に使えるピンも何本か用意されている。
ただ、出力ピンにした場合、その出力電流はソースで4ミリアンペア、シンクで6ミリアンペアとなっており、それほど大きな電流が流せるわけではない。 ちなみにArduino は 各ピン20mA、ピントータルで400mA。 Derek Molloy さんのyoutube ビデオでは、これを鑑み、LEDを点灯させるのに小さなトランジスタをかましている。(http://www.youtube.com/watch?v=wui_wU1AeQc)
これが正解だと思うのだが、 Adafruitのサイトのチュートリアルでは初心者を考えたのか、トランジスタを省略し、470オームの抵抗をLEDに直列にいれて、これを直接駆動している。 あのSimon Monk氏が書いているTutorialで、470オーム以下の抵抗値は使わないように、という指示がある。 この場合、 普通に売っているLEDのフォワード電圧が20mA通電時で1.85V~2.5Vと考えると(3.3-2.0)/470~(3.3-1.85)/470=1.7mA~3.08mA. 一応4mA以下となるので、OKということらしい。写真を見ると、これでも結構明るく点灯している。
最近みたこのサイトの場合はもっと過激で、50~100オームの抵抗を指定している。 (ちなみに作者はMaker: からRaspberry PiやBBBの入門書も出版していて、ちらっと見た限りではこの書籍の中でも100オームを指定していた。)
100オームを使った場合だと、電流量は 最悪 12mA程度になる。 50オームだとその倍で、20mAになる。さらに、100オームの場合だとフォワード電圧が飽和しないので、実際には12mA以上になるはずで、当然ICメーカーの指定仕様は超えている。 平気なのか、と思うが、実際に数分だけやってみたところ平気だった(おい) ただし、これはTIのチップの設計および現物が仕様に対してマージンを持っている、ということで、、LED1個点灯くらいならまだしも複数個点灯させるのはやはりまずいだろ。
20年前の電気屋の頭でLEDには20mAとはいかなくてもその半分くらいは流したいとおもっっているので、出力ピンにはNPNトランジスタをかませる、というのが、今の自分の結論。