前回の記事では単にLEDを点灯させただけでした。今回はNode-REDを使用してLEDのON/OFF制御をしてみます。
GPIOピン
前回の記事では、ラズベリーパイのGPIOコネクタにある「3.3V」ピンと「Ground」ピンを使用してフルカラーLEDを点灯させてみました。
今回はいよいよNode-REDでON/OFFを制御できるGPIOピンを使用してフルカラーLEDのON/OFF制御してみます。
そもそも「GPIOピン」とはどういう意味か忘れてしまった場合は「第2回 ラズベリーパイの特徴」の記事を確認してみてください。
最初に、ラズベリーパイGPIOピンの電気的仕様について重要なことを2点説明しておきます。
一点目はGPIOピン1ピンあたりの最大出力電流についてです。
GPIOピン1ピン当たりの最大出力電流は16mAです
前回製作した回路では、各色LEDに流れる電流は5mA程度です。最大電流16mAに対して十分余裕があります。
二点目はGPIOピンの合計出力電流の仕様です。
GPIOピンの合計の最大電流は50mAです
例えば、GPIOピン1ピンあたり最大16mAだからといって、1ピン当たり10mAで10本のGPIOピンを使用すると合計100mAになってしまい、50mAを大幅に超えてしまいます。
GPIOピンを使用する場合、1ピン当たりの最大電流と、合計の電流を合わせて考える必要があります。
前回製作した回路では、緑色、青色、赤色のLEDそれぞれに5mA流しますので、同時に点灯すると合計15mAになります。
回路の製作
最初に、フルカラーLEDの制御に使用するGPIOコネクタのピンを決めましょう。特に深い理由はありませんが、配線の関係から以下のように割り当ててみました。
LED色 | 物理ピン番号 | GPIO番号 |
---|---|---|
赤色 | 11番 | GPIO 17 |
青色 | 13番 | GPIO 27 |
緑色 | 15番 | GPIO 22 |
実際の場所は以下になります。
この3本のGPIOピンとフルカラーLEDを以下のように接続することになります。
それでは、実際に回路を製作しましょう。
作業するときは必ずラズベリーパイの電源を切るようにしてください
実際の接続は以下のようになります。回路製作といっても、ジャンパワイヤーで接続するだけですのでそれほど手間はかからないと思います。ただGPIOピンの位置が分かりづらいので、ピンの位置を間違えないように十分確認して配線してください。
これでラズベリーパイのGPIOピンとブレッドボード回路の接続はOKです。
Node-REDの開発手順と用語
Node-REDでLEDの制御を行う前に、「第4回 Node-RED概要」の記事で説明しました、Node-REDの基本的な開発手順を復習しておきましょう。それぞれの作業の細かい内容はあとで詳しく説明しますので、まずは全体の開発の流れを復習するようにしてみてください。
また、ここではNode-RED特有の用語も出てきます。今後の説明で何度も出てきますので、早く慣れましょう!
それでは最初にラズベリーパイを起動しましょう(Node-REDを自動起動設定していない場合は手動で起動します)。1分程度待っているとブラウザからNode-REDにアクセスできるようになります。
デスクトップタイプ機器構成の状態で使用する場合は、デスクトップ画面右上にあるブラウザアプリのアイコンをクリックしてブラウザを起動します。
起動後、URLに以下のように入力するとNode-REDの画面が表示されます。
localhost:1880
WindowsやMac、iOSやAndroidからリモートでアクセスする場合は、それぞれのOSで使用しているブラウザを起動して、URLに以下のように入力するとNode-REDの画面が表示されます。
raspberrypi.local:1880
以下のような画面が表示されていればOKです。
次にNode-REDの開発手順を説明します。「第4回 Node-RED概要」の内容の繰り返しになってしまいますが、もう一度全体作業を確認しておきましょう。
Node-REDの操作画面は以下の図の青枠で囲んである、左側に機能のリスト、中央に機能を配置して組み合わせるスペースがあります。
この操作画面で、以下のように開発を行います。
- 左側の機能リストから、必要な機能を選んで中央のスペースに配置する
- 必要な機能を配置したら、機能同士が制御できるように線で接続する
- 最後に右上の「デプロイ」ボタンをクリックすると動作が開始される
それではこのステップに沿って、Node-RED特有の用語を説明します。
1)左側の機能リストから、必要な機能を選んで中央のスペースに配置する
左側の領域には「機能」がリストされています。
それぞれの「機能」のことをNode-REDでは「ノード」と呼んでいます。
また、ノードがリストされている領域を「パレット」と呼びます。
今後の説明では、「パレットの一番上にある『Inject』ノード」や「パレットの中から『rpi – gpio out』ノードを探してください」などのような使い方をします。
2)必要な機能を配置したら、機能同士が制御できるように線で接続する
パレットからノードを選んで中央の領域に配置したあと、ノード間を接続します。このように接続したノード全体のことを「フロー」と呼びます。
3)最後に右上の「デプロイ」ボタンをクリックすると動作が開始される
ノードを接続してフローを作成しただけでは動作しません。
フローを動作させるには、右上にある「デプロイ」ボタンをクリックします。すでにボタンの名前になっていますが、このようにフローを動作させることを「デプロイ」と呼びます。
普段の使い慣れたPCアプリで例えると、「デプロイ」は「保存&実行」というような意味合いになります。
なお、フローをデプロイ後にフローを変更した場合、もう一度デプロイすると変更が反映されます。また、ラズベリーパイの電源を入れ直してNode-REDを起動すると、前回デプロイしたフローがすぐに動作を始めます。
Node-REDの開発作業の流れは、Node-RED用語で説明すると次のようになります。
パレットからノードを選択して配置、ノード間を接続してフローを作成、最後にデプロイする
慣れないとなんだか意味不明な文章に感じてしまいますね…
次の図を見ながら開発作業の流れを確認してみてください。これからの説明ではNode-RED用語を使っていきますので、早めに慣れるようにしましょう。
それでは、これからGPIOピンを制御するノードを説明して、フローを作成していきます。
「rpi – gpio out」ノード
GPIOピンは以下のようにNode-RED(またはPythonなどのプログラム)で制御できるスイッチがあることを説明しました。
「rpi – gpio out」は、このGPIOピンのスイッチを制御するノードです。
最初は、フルカラーLEDの「緑色LED」を制御するノードを作っていきます。
ここからは一緒に作業しながら進めてください。
パレットの下の方に「Raspberry Pi」グループがあり、その中に「rpi – gpio out」のノードがあります。
パレットにはたくさんのノードがありますので、見つけづらい場合は以下の「ノードを検索」と書かれている検索ボックスに「gpio」と入力するとすぐに見つかります。
それでは、以下のように「rpi – gpio out」ノードをドラッグ&ドロップしてフローの領域に配置してください(タブレット・スマホの場合はドラッグ)。配置する場所はだいたいで構いません。配置後にドラッグすると場所を変更できます。
もし間違って他のノードを配置してしまった場合は、キーボードがある場合は、マウスでクリックして選択、そのあとdeleteキーを押します。スマホ・タブレットのタッチ操作の場合は、削除したいノードを長押しします。長押しするとメニューが表示されますのでその中から「delete」を選択します。
また位置を変更する場合は、ノードをドラッグします。
フロー領域に配置したノードを見ると、パレットのノードとは異なり、ノードの右上に「赤色三角マーク」と「水色丸マーク」が表示されています。また、ノードの文字が「GPIO:」に変わっています。
「赤色三角マーク」は、このノードの設定がされていないことを意味しています。この「rpi – gpio out」ノードはラズベリーパイのGPIOピンを制御するノードですが、具体的にどのピンを制御するのかなどの設定がされていません。このあと、このノードの設定を行うと「赤色三角マーク」が消えます。
「水色丸マーク」はまだデプロイされていないことを意味しています。デプロイするとこのマークは消えます。
ノードに表示されている文字「GPIO:」はデフォルトのノード名です。この文字は好きな名称に変更できます。あとで実際に変更してみますので、その時に変更方法など確認してましょう。
また補足ですが、パレットの「Raspberry Pi」グループにあるノードにはラズベリーパイのアイコンが表示されています。ラズベリーパイアイコンは、このノードがラズベリーパイ専用のノードであることを意味しています。
次に、「rpi – gpio out」ノードの働きを説明します。
「rpi – gpio out」ノードをよく見ると、左側に小さい四角マークがあります。このように左側に四角マークがあるノードは、外部から何かのデータを受け取ると何かの動作をします。
「何かのメッセージを受け取って、何かの動作をする」って、なんのこっちゃ、って感じですよね。これから、「rpi – gpio out」ノードの具体的な働きを確認していきます。
なお、イメージしやすいように「データ」という言葉を使いましたが、Node-REDではこの「データ」のことを「メッセージ」と呼んでいます。また「メッセージ」はNode-REDシステム内では「msg」(messageの略)と書かれていることもありますので覚えておいてください。
「rpi – gpio out」ノードでは以下のような2通りの働きをします。
1)外部から「1」というメッセージを受け取ると、GPIOスイッチをONにする
2)外部から「0」というメッセージを受け取ると、GPIOスイッチをOFFにする
このように「rpi – gpio out」ノードは外部から「1」か「0」のメッセージを受け取って、GPIOピンのスイッチを制御するわけです。でも、どのGPIOピンを制御するか分かりませんよね。
次に「rpi – gpio out」ノードの設定方法を説明します。
それでは、フローの領域に配置した「rpi – gpio out」ノードをダブルクリックしてください(タブレット・スマホの場合はダブルタップ)。ダブルクリックすると以下のようなノードの設定画面が表示されます。
この設定画面では以下の設定を行います。
それでは各設定項目について次に説明します。
端子
「端子」では、この「rpi – gpio out」ノードが制御するGPIOピンを指定します。設定画面には「物理ピン番号」と「GPIO番号」の両方が表示されています。
このノードは緑色LEDを制御しますので、物理ピン番号15番(GPIO番号22番)のボタンをクリックして選択してください(タブレット・スマホの場合はタップ)。
BCM GPIO
「端子」を選択すると、以下のように「BCM GPIO」欄に選択したGPIOピンの「GPIO番号」が表示されます。「BCM」は第17回の記事で詳しく説明しましたのでここでは簡単に説明しますが、BMCプロセッサのGPIO番号、という意味になります。
出力形式
ここでは「デジタル出力」か「PWM出力」を選択できます。
「デジタル出力」は、スイッチを「ON」か「OFF」のどちらかにする、という意味です。今回は「ON」か「OFF」の制御をしますので、「デジタル出力」を選択したままにします。
「PWM出力」は次の次の記事(第21回)で実際に使ってみますので、そのときに詳しく説明します。
端子の状態を初期化
フローをデプロイすると、各ノードが動作を始めます。「rpi – gpio out」ノードは、動作開始時の出力の状態を指定することができます。
具体的には、動作を開始したときにスイッチを「ON」の状態にするか、「OFF」の状態にするかの設定です。「端子の状態を初期化」にチェックをつけると、動作開始時の状態を選択できます。
動作開始時にLEDが点灯するとちょっとびっくりしてしまいますので「OFF」に設定しておきましょう。「端子の状態を初期化」にチェックをつけて、「端子の初期レベル – Low(0)」を選択します。
なお、動作開始時に「ON」にしたい場合は「端子の初期レベル – High(1)」を選択します。
名前
「rpi – gpio out」ノードでは、デフォルトで「GPIO:」という文字が表示されていましたが、ここで表示する文字を指定できます。
このノードは緑色LEDを制御することにしますので、名前の欄に「緑色LED」と入力します。
設定内容が以下のようになっているか確認してください。問題なければ右上の「完了」ボタンをクリックします。
完了ボタンをクリックして設定画面を閉じると、「rpi – gpio out」ノードの赤色三角マークが消えていると思います。これは設定が終わっていることを意味しています。
これで緑色LEDを制御する「rpi – gpio out」ノードの準備ができました。あとはこのノードに「1」のメッセージを送るとGPIOピンの内部スイッチがONになり、緑色LEDが点灯するはずです!
Injectノード
次に、メッセージを送る機能を持つノードについて説明します。
パレットの一番上に「Inject」ノードがあります。
それでは、「Inject」ノードを以下のように「rpi – gpio out」ノードの左側に置いてください。
この「Inject」ノードは、先ほどの「rpi- gpio out」ノードとは異なり、右側に小さい四角マークがあります。
このように、右側に四角マークがあるノードは、何かのメッセージを送るノードを意味しています。
また、「Inject」ノードの左側には大きい四角マークがあります。
この四角マークはボタンで、このボタンをクリックすると、あらかじめ設定したメッセージを送ります。
また、先ほどの「rpi – gpio out」ノードとは異なり、赤い三角マークがついていません。赤い三角マークがついているノードは設定がされていないことを意味していますが、このノードはすでに設定済みになっています。
設定した覚えはないのに設定済み、というのもちょっと変ですよね。実は「Inject」ノードはデフォルト設定ではボタンをクリックすると「日時」(タイムスタンプ)のメッセージを送るようになっています。そのためすでに設定済み状態となっています。
「rpi – gpio out」ノードは、「1」か「0」を受け取って動作しますので、これから「Inject」ノードが日時情報ではなく「1」か「0」のメッセージを送るように設定を変更していきます。
ところで、今まで「メッセージ」という言葉を使ってきましたが、「Inject」ノードの設定をするにはこの「メッセージ」についてもう少し詳しく理解しておく必要があります。そこで、「メッセージ」の具体的な内容について説明したあと、「Inject」ノードの設定を行います。
Node-REDでは、ノード間でやり取りするメッセージは以下のように「タイトル」と「値」から構成されています。
また、一度に複数の「タイトル」と「値」を送ることもできます。
なお「タイトル」と「値」は、ノードごとに決まりがあります。
今回使用する「rpi – gpio out」ノードは、「タイトル」名と「値」が以下のように決まっています。
タイトル | 値 |
---|---|
payload | 1または0 ※1のときはON、0のときはOFF |
「rpi – gpio out」ノードはこのようなメッセージを受け取って動作しますので、「Inject」ノードでこのようなメッセージを送るように設定すればよいわけです。
それでは、先ほど配置した「Inject」ノードを「タイトル」が「payload」、値が「1」のメッセージを送るように設定してみましょう。
最初に「Inject」ノードをダブルクリックします。以下の設定画面が表示されます。
この設定画面では以下の設定を行います。
それでは一緒に設定していきましょう。
名前
ノードの名前を設定します。「rpi – gpio out」ノードにLEDをONにするメッセージを送ることにしますので、名前は「ON」にしましょう。(他の名前でも構いせん)
メッセージ
次にメッセージを設定します。この設定欄では、1メッセージ1行で設定するようになっています。
メッセージ設定は以下のようになっています。
「msg」はメッセージを意味しています。どのメッセージにも共通になります。
「msg」の後、「 . 」(ピリオド)に続いて、メッセージのタイトルを設定します。「rpi – gpio out」ノードへ送るメッセージのタイトルは「payload」でしたよね。すでに「payload」と入力されていますので、メッセージのタイトルはこのままにしておきます。
次に値を設定します。デフォルトで「日時」になっていますのでクリック(スマホ・タブレットの場合はタップ)します。クリックすると以下のようにメニューが表示されますので「数値」選択します。
数値を選択すると数字が入力できるようになりますので、「1」と入力します。
これでメッセージの設定は終わりました。
なお、2行目のタイトルが「topic」というメッセージは必要ありませんので、右側の「×」ボタンをクリックして削除します。
繰り返し
「繰り返し」では、一定の時間間隔、または特定の日時にメッセージを送る設定ができます。
この設定は次回の記事で使用しますので、次回の記事で詳しく説明します。
これで「Inject」ノードの設定は完了しました!
ノードを接続する
最後に、「Inject」ノードと「rpi – gpio out」ノードを接続します。
「Inject」ノードの四角マークにマウスカーソルを合わせて、マウスの左ボタンを押し、押した状態のまま「rpi – gpio out」ノードの四角マークまでマウスカーソルを移動、マウスの左ボタンを離します。(それぞれのノードの四角マークをドラッグして接続します)
このように接続するとInjectノードが「タイトル」が「payload」、値が「1」のメッセージを出力します。そのメッセージを「rpi gpio out」ノードが受け取って、GPIOピンのスイッチをONにします。
動作確認
それでは動作確認してみましょう。
右上の「デプロイ」ボタンをクリックします。
クリックすると、以下のように画面上部に「デプロイが成功しました」と表示されます。これで動作しました。ノードの青丸マークが消えていることも確認してください。
最後に、「Inject」ノードのボタンをクリックします。クリックして緑色のLEDが点灯すれば成功です!
ON/OFFできるようにする
さて、LEDを点灯したのはいいですが、消せませんよね。
ということで、LEDを消すノードも追加しましょう。
以下のように、「Inject」ノードを追加します。
追加したら、「Inject」ノードをダブルクリックして設定画面を表示ます。設定画面で以下のように、ノード名を「OFF」に設定し、タイトルが「payload」、値が「0」のメッセージを送るように設定します。設定内容を確認後、右上の完了ボタンをクリックして設定画面を閉じます。
最後に、OFFのInjectノードとrpi-gpio outノードを接続します。
この状態ではデプロイされていませんので、「デプロイ」ボタンをクリックします。
これでLEDを消すこともできるようになりました。ONのノードとOFFのノードのボタンをクリックしてLEDを制御できるか確認してみてください。
ミニチャレンジ課題
緑色のLEDのON、OFFができるようになりました。
そこで、青色、赤色のLEDもON、OFFできるようにフローを作成してみてください。
更新履歴
日付 | 内容 |
---|---|
2022.6.6 | 新規投稿 |