はじめての電気と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を使います。どちらかを入手してください。