はじめての電気とIoT (5) LEDを点灯
■センサ類をつなぐGPIOを見る
40ピンのI/O(入出力)端子をGPIOと呼びます。写真はB+ですが、Raspberry Pi 3 model Bでもまったく同じです。
マイコンは、いろいろな用途に使えるようにと一つのピン(端子)に三つぐらいの機能が割り当てられていて、プログラムでどの機能を利用するかを初期設定で指定します。GPIOの青色文字は、CPU(SoC)のピンの名称が書かれています。グレーの文字は、特別の機能が割り当てられたピンです。
GPIOの各ピンは1ビットの入出力に使えます。特別にシリアル通信をするピンが用意されています。
◆I2C
物理的なピン番号 | SoCのピン名称 | 機能 |
---|---|---|
3 | GPIO2 | I2Cバス1のSDA |
5 | GPIO3 | I2Cバス1のSCL |
もう一つバスがあります。overlayというかたちで利用できます。
物理的なピン番号 | SoCのピン名称 | 機能 |
---|---|---|
27 | ID_SD | I2Cバス0のSDA |
28 | ID_SC | I2Cバス0のSCL |
◆SPI
I2Cはバスに複数のセンサ・デバイスなどをバスにつなげて利用します。SPIはMOSI、MISO、CLKは共通のバスですが、デバイスを選択する信号が別途必要で、CE0とCE1が用意されています。つまり、2個つなげれます。I2Cに比べてデータの転送速度が早いです。
物理的なピン番号 | SoCのピン名称 | 機能 |
---|---|---|
19 | GPIO10 | データ入力MOSI |
21 | GPIO9 | データ出力MISO |
23 | GPIO11 | クロックCLK |
24 | GPIO8 | チップ・セレクトCE0 |
25 | GPIO7 | チップ・セレクトCE1 |
◆1-Wire
信号線はGPIO4(物理的なピン番号は7)の1本です。上記のバスも、信号線以外に、+3.3VとGNDをつないで利用します。
●LEDをあいているピンにつなぐ
アマゾンで購入した砲弾型のLEDは4mAから20mAの電流を流して使います。GPIOは最大3.3Vの信号を扱うディジタル・ポートです。ピン1番の3.3Vは約50mAの電流を利用できます。各GPIOのpinは5mA程度の電流を扱えます。
何も機能が割り当てられていないGPIO26のピン37番とピン39番のGNDにLEDをつなぎましょう。
ブレッドボード上に次のように配線します。電流制限抵抗は、連載第2回のときに計算しました。適当な値で光るので1kΩを使います。図では1kでない値が見えていますが気にしないでください。
●Node-REDを起動する
GUIでLEDを点灯させたいので、設定メニューのProgrammingからNode-REDをクリックして起動します。特に何も設定するところはないです。
画面右上のメニュー・バーにある矢印2本のアイコンの上にマウスを持っていくと、IPアドレスが表示されます。この値をメモります。
PCのWebブラウザのURLに、http:// IPアドレス:1880/と入れます。
Node-REDのフロー・エディタ画面がでます。画面左側にノード・パレットがあります。それぞれはノードと呼ばれ、プログラムに使える機能をカプセル化した部品リストです。下のほうを見ると、Raspberry_Piという大見出しがあって、「rpi gpio」が二つあります。上が入力で下が出力です。
LEDを点灯させるので、出力用のノード「rpi gpio」をマウスでドラッグして、真ん中の広いワークスペースにドロップします。間違ったら、DeleteもしくはCtrl+xキーで削除できます。
このアイコンをダブルクリックすると、ノードの設定画面が出ます。GPIOのピン番号を指定します。「Pin 37 - GPIO26」を選びます。
Doneを押すと設定が完了し、表示が「Pin:37」と変わります。
点灯を繰り返すために、ノードの「inject」と「torigger」をドラッグ&ドロップで追加します。
injectをダブルクリックして設定画面を出します。「Repeart」の項目を「none」から「interval」に変更し、デフォルトの1秒のまま「Done」で設定を終了します。injectは繰り返し?の意味と思われます。ここでは、1秒ごとに繰り返してねという設定です。
triggerをダブルクリックして設定画面を出します。250を500msに変更します。Doneをクリックして確定します。1を0.5秒続けたら、0に戻すというトグル動作をします。このトグル動作は1回だけ実行されます。
三つのノードのそれぞれの機能が設定できました。
それぞれのノードを線で結びます。結んだものをフローと呼びます。画面右肩の「Deploy」押すと、変更内容が更新され、プログラムが動き始めます。
inject(timestamp)はinput(入力)です。つぎのtrrigerはfunction(関数)の一つで処理結果をrpi-GPIOの出力します。
プログラムでは、1秒ごとに、「0.5秒間GPIO27を'1'にしたあと'0'にする」 を繰り返すので、LEDチカチカ=Lチカが完成します。
動作しているようすです。
次回、温度センサをつないで室温を取り込みます。
温度センサは1-WireのDS18B20を使います。どちらかを入手してください。