Help us understand the problem. What is going on with this article?

Raspberry PiにおけるNode-REDの活用について

Raspberry PiにおけるNode-REDの活用について

IoT関連のプロトタイピングにRaspberry Piを活用する場合、開発環境としてNode-REDを使うことが多いと思います。しかし、Raspberry PiやNode-REDの活発な開発ペースに追い付かず、昨今の更新で書籍やWebページに書かれた内容が古くなっており、初心者の方が初めてRaspberry PiでNode-REDを使う場合に困ってしまうこともあると思います。

本稿では、Node-RED Advent Calendar 2018向けとして、2018年末以降、最新のRaspbian/Raspberry Pi OSにおけるNode-RED導入・活用方法をできるだけていねいに紹介します。将来の更新でここに記載した内容が最適でないことになるかもしれません。内容についてはできる限り修正していきたいと思いますので、編集履歴もご参照いただければと思います。

2020年5月21日現在、Node-REDのバージョンは1.0.6です。

Raspberry Piって何?

英国のRaspberry財団が提供する、小型で安価なLinux PCです。
raspi.jpg
(写真はRaspberry Pi 3B+)

  • 産業用にも活用
    • 2012年2月の発売当初は教育用として開発されましたが、低コストで大量に流通し入手性が高く、価格の割に高品質であることから産業用途にも活用されています。
  • IoTに最適
    • HDMI/Camera/USB/Ethernet/WiFi/Bluetooth/Audioなど一般的なPC同様のインターフェイスを持ち、さらにGPIO/UART/I2C/SPIなどの組み込み用途向けインターフェイスも備えるため、センサーやアクチュエータを備えたIoTゲートウェイとしての活用に向いています。
  • アプリが充実
    • Linux OSのDebianを最適化したRaspberry Pi OS(旧名Raspbian)というOSが提供されており、OSイメージをmicroSDカードへ導入して利用します。多数のアプリパッケージがRaspberry Piに最適化され配布されています。

Node-REDって何?

IBMのエンジニアが開発、のちに(2016年10月)JS Foundationに譲渡されたOSSの開発環境です。
image.png

  • Webベースの開発環境
    • WebブラウザからFlow Editorとよばれる開発環境にアクセスし、Nodeとよばれる部品をつなげてFlowと呼ばれる処理を作成することで、アプリやサービスを簡単に開発することができます。
  • 再利用性と機能拡張
    • FlowをJSONフォーマットで書き出し、他のFlow Editorに読み込むことで簡単に再利用できます。
    • クラウドサービスとの連携やデバイスの活用などさまざまな機能を持つNodeが配布されており、簡単に追加インストールして機能拡張できます。
  • 高い移植性
    • Linux/Windows/MacOS/AndroidなどさまざまなOSの上で動作し、開発したFlowは互換性があるため、例えばクラウドサーバとRaspberry Piが連携するシステムをすべてNode-REDだけで開発できます。

Raspberry PiへRaspberry Pi OS(旧名Raspbian)の導入

Raspberry Pi OSの導入については、Qiita内にもたくさん紹介されているので詳細は割愛します。隔月で発売されているラズパイマガジンの巻末に、その時点での最新の導入方法が詳細に解説されていますので、まったくの初心者の方はRaspberry Piと一緒に購入するとよいでしょう。(NOOBSを使った手順-後述-が紹介されています)

Raspberry Pi OSとNOOBSの違い

image.png

OSの導入には大きく分けて2種類の方法があります。NOOBS経由の導入と直接Raspberry Pi OSを導入する方法です。NOOBSは「New Out Of Box Software」の略で、microSDカードの標準ファイルシステムであるexFAT/FAT32に直接導入ファイル群をコピーすることで、起動時にNOOBSがmicroSDカードの設定も含めて実施します。Raspberry Pi OS以外のOSの導入も可能な反面、ダウンロードするイメージファイルのサイズが大きく、インストール時間も余計にかかります。Node-REDを使うためにRaspberry Pi OSを導入するなら、直接Raspberry Pi OSをmicroSDカードに書き込む方法をお勧めします。

Raspberry Pi OSを直接導入する場合のポイントをいくつか挙げると、16GB以上Class10対応の高品質なmicroSDカードを使う、書き込みはEtcherを使う、くらいでしょうか。Raspbian 2018-10-09版以降では、初回起動時のインストールウィザード piwiz で日本語環境の導入までシームレスにできるようになり、本当に楽になりました。

Raspbianでは2015-11-21版以降、Node-REDが標準インストールされていました。しかし、Raspbianの2018-06-27版より「Recommended Applications」という扱いになり、標準インストールから外れてしまいました。しかし、2018-11-13版から新たに配布開始になった「Raspbian Stretch with desktop and recommended software」には、Node-REDが標準インストールされています。

2019-06-20版からは、Debian 10ベースの「Raspbian Buster with desktop and recommended software」が提供されています。これにもNode-REDが標準インストールされています。2020年5月現在の最新版は2020-05-27です。

image.png

https://www.raspberrypi.org/downloads/raspbian/

「Raspberry Pi OS (32-bit) with desktop and recommended software」はNode-RED以外にも大きなサイズのアプリケーションが標準インストールされているのですが、その分配布イメージのサイズが大きいデメリットもあります。

  • 「Raspberry Pi OS (32-bit) with desktop and recommended software」 : 2523MB
  • 「Raspberry Pi OS (32-bit) with desktop」:1128MB
  • 「Raspberry Pi OS (32-bit) Lite」432MB

頻繁に更新されるNode-REDに比べて、Raspberry Pi OSの更新頻度は緩やかですから、導入後はNode-REDのアップデートを行う必要があります。Node-REDを使うだけなら「Raspberry Pi OS (32-bit) with desktop」を導入後、少しの手間でNode-REDを導入できます。なお、LAN経由でPCのブラウザが使える場合は、「Raspberry Pi OS (32-bit) Lite」(CUIで、RaspberryPi本体のWebブラウザが使えません) でも大丈夫です。

イメージの書き込みは、https://www.raspberrypi.org/downloads/ からダウンロードできる「Raspberry Pi Imager」を使うのが簡単です。Windows版/MacOS版/Ubuntu版が準備されています。
image.png

また、balenaEtcherを使うと高速に書き込め、同時に複数のmicroSDへの書き込みが可能です。
balenaEtcherによるRaspberry Pi OSの導入は、初めてラズパイをセットアップしてみた がわかりやすいです。(ブランド変更でツール名が「balenaEtcher」に変わっていますが手順はほぼそのままです)

また、拙作「20191219Raspbianインストールサポート.pdf」
https://github.com/WLO-RaspiClub/20191219_InstallSupport
も参考にしていただければと思います。

Raspberry Pi OSの導入後は、piユーザのパスワードを変更し(rootユーザのパスワードは設定してはいけません)、導入パッケージの更新をしておきましょう。「Raspberry Pi OS with desktop」で導入した場合は、初回起動時の設定ウィザード(piwiz)を最後まで実施していればすでにできています。「Raspberry Pi OS Lite」で導入された場合は、sudo raspi-config もしくは以下の手順です。

sudo passwd pi
sudo apt update
sudo apt upgrade

Raspberry Pi OSへのNode-REDのインストール

「Raspberry Pi OS (32-bit) with desktop and recommended software」を導入された場合、Node-REDは最初から導入されています。メニューの「プログラミング」にNode-REDがありますので、ここから実行できます。それ以外のイメージから導入された場合は、まずはインストールが必要です。

「Raspberry Pi OS (32-bit) with desktop」で導入した場合、Node-REDのインストールには、PIXEL Desktopのメニューにある「Recommended Software」を使っても導入できますが、時期によっては古いバージョンを導入することになり、導入後に別途更新作業が必要となり二度手間です。

おすすめのNode-RED導入方法としては、Node-REDのリポジトリでメンテナンスされているupdate-nodejs-and-noderedスクリプトを最初から使いましょう。(まったく導入されていない状態から使えるスクリプトです)
公式ページ内のRunning on Raspberry Piで紹介されている

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

でインストールできますが、URLが長いので覚えにくいのが難点です。githubで提供されている短縮URLサービスを使って https://git.io/noderedlinux という短縮URLを作りましたので、コンソールから

wget https://git.io/noderedlinux
less noderedlinux
(スクリプトを確認※)
bash noderedlinux

で導入可能です。noderedlinux(update-nodejs-and-nodered)は内部でsudoしていますので、piユーザがsudoで管理者権限になれないように設定している場合以外は、piユーザで実行します。(rootユーザで実行するとスクリプトが確認してきます)

※なお、ダウンロードしてきたスクリプトを中身の確認をせず直接bashで実行するのはセキュリティのリスクがあるので、一応ダウンロードしたスクリプトの中身を確認してから実行しましょう。(2行目)

実行すると最初に、node.jsやNode-RED本体を再インストールするので、現在導入しているFlowが動かなくなる可能性がある旨の注意が表示されます。

This script will remove versions of Node.js prior to version 7.x, and Node-RED and
if necessary replace them with Node.js 10.x LTS (dubnium) and the latest Node-RED from Npm.

It also moves any Node-RED nodes that are globally installed into your user
~/.node-red/node_modules directory, and adds them to your package.json, so that
you can manage them with the palette manager.

It also tries to run 'npm rebuild' to refresh any extra nodes you have installed
that may have a native binary component. While this normally works ok, you need
to check that it succeeds for your combination of installed nodes.

To do all this it runs commands as root - please satisfy yourself that this will
not damage your Pi, or otherwise compromise your configuration.
If in doubt please backup your SD card first.

(参考日本語訳)

このスクリプトはバージョン7.x以前のNode.jsを削除し、必要に応じて、
Node.js 10.x LTSとNode-REDをNpmで最新版に置き換えます。

また、ユーザによりグローバルにインストールされているNode-REDノードを
.node-red/node_modulesディレクトリに移動し、package.jsonを追加して
パレットマネージャで管理できるようにします。

さらに、「npm rebuild」を実行してインストール済みの外部ノードの
ネイティブバイナリーコンポーネントを更新します。普通は問題なく動作
しますが、導入されたノードの相性によっては、きちんと完了したか
確認する必要があるかもしれません。

全てのコマンドはrootで実行されますので、自分自身であなたのラズパイに
ダメージを与えないようにするか、設定を変更してください。大丈夫かどうか
自信がない場合は、まずSDカードのバックアップを取ってください。

初回インストール時は関係ありませんので

Are you really sure you want to do this ? (y/N) 
本当にこれを実施しても大丈夫ですか? [y/N] ?

ではYを入力します。

次に、Raspberry Pi関係のノードをインストールするかどうか聞かれます。

Would you like to install the Pi-specific nodes ? (y/N)
ラズパイ固有のノードをインストールしてもいいですか? [y/N]

導入先はRaspberry PiですからYとすると、以下のNodeがインストールされます。
(すでにnode-red-node-serialportが導入されている場合は導入済みと判断され聞かれないようです)

node-red-contrib-ibm-watson-iot
node-red-contrib-play-audio
node-red-node-pi-gpio
node-red-node-pi-sense-hat
node-red-node-ping
node-red-node-random
node-red-node-serialport
node-red-node-smooth

また、以下のスクリプトもインストールされます。

  • コマンドスクリプト
    • node-red-start (/usr/bin/node-red-start)
    • node-red-stop (/usr/bin/node-red-stop)
    • node-red-restart (/usr/bin/node-red-restart)
    • node-red-log (/usr/bin/node-red-log)
  • systemd スタートアップスクリプト(/lib/systemd/system/nodered.service)
  • ログローテート (/etc/logrotate.d/nodered)
Would you like to install the Pi-specific nodes ?

でNとすると、標準的なNode-REDの導入となります。

導入自体はRaspberry Piの性能やインターネット回線にもよりますが、10分程度かかります。コンソールに進捗状況が表示されるので、ゆったり待ちましょう。途中でCtrl-Cで停止してしまうと面倒なことになりますのでガマンしましょう。

image.png

All done.
  You can now start Node-RED with the command  node-red-start
  or using the icon under   Menu / Programming / Node-RED
  Then point your browser to localhost:1880 or http://{your_pi_ip-address}:1880

と表示されると導入完了です。

一度このスクリプトを使ってNode-REDを導入すると、以降はupdate-nodejs-and-noderedコマンドで最新版に更新できます。(実行時に更新スクリプト自体も更新されます) 新しいインストールスクリプトでは、スクリプト自身が導入されなくなりましたので、再度、最新版に更新する場合は、インストールスクリプトの取得から再実施してください。

Node-REDの起動と、FlowEditorへのアクセス

初回起動は、piユーザでコンソールからnode-red-startと入力しましょう。/home/pi/.node-red 配下に各種設定ファイルが導入されます。「Raspberry Pi OS (32-bit) with desktop」で導入した場合は、Chromeブラウザで http://127.0.0.1:1880 にアクセスするとFlow Editor画面が表示されます。

「Raspberry Pi OS (32-bit) Lite」の場合は、Raspberry Pi自身でブラウザを使えませんので、同じLANに接続されたPCから http://raspberrypi.local:1880/ にアクセスします。
mDNSが有効でない場合は、Raspberry PiのLAN内IPアドレスを調べた上、 http://IPアドレス:1880/ にアクセスします。

自動起動設定

初回起動後は起動してログ出力されているコンソールでCtrl-Cで停止してもログ出力のみ停止されNode-REDは停止しません。 node-red-stop コマンドでNode-REDを停止できます。停止した後はもう一度 node-red-start で起動することができます。node-red-log でコンソールに実行中のログがtail形式(最新のログを順次表示する)となり、Ctrl-Cで停止できます。

Raspberry Piの起動時に自動的にNode-REDを起動するには、インストールスクリプトで導入したsystemdスクリプトを用います。

sudo systemctl enable nodered.service

でNode-REDが自動起動するようになります。

sudo systemctl disable nodered.service

で自動起動が解除されます。

sudo systemctl status nodered.service

で自動起動状態を確認できます。

Node-REDの設定ファイル

初回起動後、piユーザのホームディレクトリ配下の/home/pi/.node-redにNode-REDの設定ファイルが生成されます。

  • settings.js
  • flows_ホスト名.json
  • flows_ホスト名_cred.json
  • lib/
    • flows
  • node_modules/

settings.js

Node-REDの挙動を設定するファイルです。javascript言語で記載されていますが、テキストエディタで編集することで、Node-REDの動作を変更することができます。
編集後に変更を反映するためには、Node-REDを再起動( node-red-restart コマンド )する必要があります。

flows.jsonとホスト名

flows.jsonはFlow Editorで設定したFlowが永続化された初期Flowファイルです。/home/pi/.node-redにあり、Flow Editorでデプロイした際、記述したFlowがJSON形式でファイルに保存され、ランタイムによって実行されます。Node-REDの起動時には、まずこのファイルよりFlowを読み込み実行します。

settings.jsのデフォルト設定では、ファイル名はflows_ホスト名.jsonというように実行したホストのホスト名が付与されます。Raspberry Pi OS標準では、Raspberry Piのホスト名はraspberrypiとなっていますので、この状態でNode-REDの初回起動をすると、/home/pi/.node-red/flows_raspberrypi.jsonというファイル名で保存されます。

Raspberry Pi設定などでRaspberry Piのホスト名を変更すると、flows_ホスト名.jsonが見つからず、初期状態の空のFlow Editorが開くことになります。せっかく書いたFlowがなくなってしまったように見えますが、古いホスト名のflows_ホスト名.jsonに保存されています。ホスト名を変更した場合はflows_raspberrypi.jsonのファイル名も変更しておきましょう。

なお、/home/pi/.node-red にある settings.js の68行目付近(Node-RED 1.0.6の場合:Node-REDのバージョンによって変わります)

//flowFile: 'flows.json',

のコメントを外す(先頭の//を消去する)ことで、Node-RED再起動後の初期Flowファイルをホスト名を含まないflows.jsonというファイル名に設定することができます。LANの設定等でファイル名を頻繁に変更する場合は、この方法で初期Flowファイル名を固定しておくとよいでしょう。

セキュリティ設定

標準インストールしただけでは、IPアドレスがわかるとだれでもFlow Editorにアクセスできます。前述したようにRaspberry Pi OSではpiユーザが管理者権限をもちますので、Flow Editorからexecノードを使われてしまうと管理者権限でRaspberry Piの全操作が可能になってしまいます。まったくインターネットからアクセスできないRaspberry Piでも、最低でもログイン画面設定は実施するようにしましょう。

Flow Editorのログイン画面設定 (重要)

デフォルトでは、Raspberry Piのアドレスにアクセスするだけで、FlowEditorを開くことができますが、settings.jsを編集することで、Flow Editorにログイン認証を設定することができます。

設定スクリプトを使う場合

Raspberry Pi上のNode-REDにパスワードを設定するスクリプト を参照ください。

手動編集する場合

/home/pi/.node-redにあるsettings.jsの123行目付近((Node-RED 1.0.6の場合)

    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},

の範囲の各行の先頭のコメントを外します。(//を消去)

password行の"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."の部分には、ダブルクォーテーションの内側の文字列をパスワード文字列から導出するハッシュ文字列で置き換えます。パスワードをhogefugaにしたい場合

node -e "console.log(require('/usr/lib/node_modules/node-red/node_modules/bcryptjs/dist/bcrypt.min.js').hashSync(process.argv[1], 8));" hogefuga
$2a$08$hUPzsT.Ql742RSOIHXDHH.GZFdVqvQQ9qlQZxJ8u/fQPUsy6IqMpy

(コマンド行長いので注意)のようにハッシュ文字列を導出できますので、それをsettings.js に記載します。ハッシュ文字列は実行毎に異なる文字列で、$で始まりスラッシュやドットを含む60文字になりますので、間違いないようコピーペーストします。

なお、ハッシュ文字列の導出には Bcrypt Password Generator
のようなオンラインツールも利用できますが、サイトやツールによっては生成したパスワードをクラウドへ保存するようなものありますので注意しましょう。

記載後、node-red-restart コマンドで再起動することで、Flow Editorへのアクセス時に以下のようなログイン画面が表示されるようになります。
Node-RED-Login.png
ユーザ名はadmin、パスワードは上記で設定した元のパスワード文字列(ハッシュ文字列ではありません)を入力してログインします。

Flow Editorの認証をつけることで、Node-REDのadmin APiの利用にも認証が必要になり、ローカルLANからの攻撃を防ぐことができます。特別な理由がない限り、ログイン画面は必ず設定するようにしましょう。

なお、デフォルトでは、ログイン後7日間は再ログインすることなくFlow Editorの画面を利用できます。この期間を短くしたい場合は、adminAuth内にsessionExpiryTimeを追加し、有効期間を秒で指定します。例えば有効期限を1日(86400秒)にするには

    adminAuth: {
        sessionExpiryTime: 86400,
       type: "credentials",
        users: [{
            username: "admin",
            password: "$2a$08$hUPzsT.Ql742RSOIHXDHH.GZFdVqvQQ9qlQZxJ8u/fQPUsy6IqMpy",
            permissions: "*"
        }]
    },

と記述します。

Flow EditorのURL変更

標準のインストール手順では、Flow EditorへのURLは前述のように http://IPアドレス:1880/ となっています。この状態だと、Node-REDを導入したホストのIPアドレスさえわかればFlow Editorにアクセスされてしまいます。また、静的コンテンツ配信時(後述)の相対パスに工夫が必要になります。

Flow EditorへのアクセスURLを変更することでFlow Editorのパスを分離することができます。
/home/pi/.node-redにあるsettings.jsの94行目付近((Node-RED 1.0.6の場合)

    //httpAdminRoot: '/admin',

の先頭のコメントを外します。(//を消去)
記載後、node-red-restart コマンドで再起動することで、Flow EditorへのアクセスURLはhttp://IPアドレス:1880/adminに変更されます。設定後、http://IPアドレス:1880/にブラウザでアクセスすると Cannot GET / 表示になり404エラーとなります。

また'/admin'を変えることでFlow Editor画面へのアクセスを任意のURLにできます。

コンテンツのアクセス認証

Node-RED を簡易WEBサーバーにするで紹介されているように、settings.jsの

    //httpStatic: '/home/nol/node-red-static/',

のコメントを外してディレクトリを設定することで、Node-REDが静的コンテンツを配信できるWebサーバになります。この機能を活用することで、Node-REDのFlowで定義した動的コンテンツを組み合わせてWebサーバを構築することができますが、その際にデフォルト設定だとLAN内からは認証なしでコンテンツにアクセスできることになります。

    //httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},

のコメントを外して、passの後の文字列にハッシュ文字列を指定することで、Digest認証を設定することができます。ハッシュ文字列は、FlowEditorのログイン認証に設定する場合と同様、

node -e "console.log(require('/usr/lib/node_modules/node-red/node_modules/bcryptjs/dist/bcrypt.min.js').hashSync(process.argv[1], 8));" hogefuga
$2a$08$hUPzsT.Ql742RSOIHXDHH.GZFdVqvQQ9qlQZxJ8u/fQPUsy6IqMpy

で求めることができます。(とりあえずログイン認証と同じハッシュ文字列を設定してもかまいません)

Raspberry PiでおすすめのCustom Nodes

Custom Nodesの導入

Node-REDに標準で準備されているNodeだけでも十分に実用的なサービスが開発できますが、Node-REDには、パッケージ管理ツールnpmで開発・公開されたパッケージを読み込むことで機能拡張できるしくみがあり、一般的に「Custom Nodes」と呼ばれています。Custom Nodesの開発者がnpmにパッケージを公開すると、
Node-RED Nodesで紹介されます。

flows.png

Node-RED Nodesで紹介されているCustom NodesはほとんどがFlow Editorの「パレットの管理」メニューから追加することができます。ノードを追加の検索欄にキーワードを入れることで、追加できるNodesが表示され、「ノードを追加」ボタンで追加できます。
customNodes.png

Raspberry PiのNode-REDでも同様にCustom Nodesを追加できますが、Nodeによっては追加に時間がかかったり、エラーがでて追加できないことがあります。固有の導入方法(事前に他のソフトウェアの導入が必要など)がある場合もありますので、「パレットの管理」で導入できない場合は、Debug画面に表示されたエラーメッセージや、各Nodeのドキュメントを参照してください。

カメラ

Raspberry Piにカメラを接続する場合、Raspberry Piの基板上にあるCSI(Camera Serial Interface)コネクタに接続するか、UVC(USB Video Class)を持つカメラをUSB接続することになります。カメラをCSIに接続する場合は、デフォルトでは有効になっていませんから、「Raspberry Pi設定」の「デバイス」タブで有効にする必要があります。コンソールからはraspi-configを使って対話的に設定する(5 Interfacing Options →P1 Camera)か、

sudo raspi-config nonint do_camera 0

で有効にできます。(参照: RaspberryPi: raspi-config コマンドラインから設定(ノンイタラクティブ) )

CSIインターフェイスに接続したカメラは、
node-red-contrib-camerapiをつかってカメラの仕様設定や画像の読み込み、エフェクトなどを利用することができます。
またUSB端子に接続したUVC仕様のカメラはsudo apt install fswebcamで導入したfswebcamコマンドを使うnode-red-contrib-usbcameraをつかって画像取得ができます。

GPIO (General-purpose input/output)

Raspberry Piにはプログラムで制御できるGPIOピンが26本あります。これらのピンはそれぞれデジタル入力・デジタル出力・PWM出力に設定することで、ON/OFFの信号を入出力したり、疑似的なアナログ値を出力することができるようになり、スイッチやセンサー、サーボやブザー、LEDなどを接続することができるようになります。

Node-REDから標準でRaspberry PiのGPIOを設定・制御するcustom Nodesとして、node-red-node-pi-gpioが提供されています。(導入時に「Would you like to install the Pi-specific nodes ?」をyとした場合は初期導入されています)

image.png

rpi-gpio in Nodeを使うことで、GPIOピンに接続したスイッチからON/OFF値を取得できます。
gpio1.png
※2019/10現在、Node-RED1.0のCSS仕様変更のせいか、表の文字ずれや翻訳が反映されていない箇所があります。
接続するGPIOピンを選択して、回路に適した抵抗をRegister (抵抗)メニューで選択します。

  • スイッチを3.3V端子と接続する場合は「プルダウン」を設定することで初期値0/スイッチON時に1出力
  • GND端子と接続する場合は「プルアップ」を設定することで初期値1/スイッチON時に0出力
  • 他のマイコン回路に接続する場合は「なし」を選択

さらにDebounce (デバウンス時間:スイッチのチャタリングを防ぐための、入力値を確定するまでの時間)を設定します。

rpi-gpio out Nodeを使うことで、GPIOピンに接続したLEDやサーボなどを動作させることができます。
image.png

接続するGPIOピンを選択して、デジタル出力(ON/OFFを数値0/1かBoolen True/Falseで設定)かPWM出力(0-100の数値でパルス幅を指定)
できます。

なお、Raspberry PiのGPIO端子は3.3Vトレラントですから、他の電圧のデバイスは直接接続できません。レベル変換器が必要にあります。

基板のステータスLED(緑)を操作する

基板に搭載されたステータスLED(緑)を、GPIOノードで操作することができます。詳細は Node-REDからRaspberry PiのステータスLEDを操作する を参照してください。

I2C

I2C(Inter-Integrated Circuit)はフィリップ社が提唱した周辺デバイスとのシリアル通信の方式で、1台のマスターと最大112台のスレーブを2線の通信線と電源を接続するだけでで100kbit/sもしくは400kbit/sでクロック同期通信ができます。EEPROMやセンサーのインターフェイスにI2Cを採用したものが多数あります。Raspberry Piでは2つのI2Cバスを搭載していますが、そのうち一つがGPIOピン端子(SDA:3pin SCL:5pin)に配線されており、/dev/i2c-1として使うことができます。Raspbery Pi 3の場合は、i2c-gpioというソフトウェアエミュレーションしたI2Cドライバを用いて複数のI2Cバスを追加することができるようです。

Raspberry PiのGPIO端子は3.3Vトレラントですから、5Vのデバイスは直接接続できません。I2C対応のレベル変換器が必要にあります。

Raspberry Piの起動時初期設定では、I2Cバスは有効になっていません。有効にするには、DESKTOP版の場合は「Raspberry Pi設定」の「デバイス」タブでI2Cを有効にします。コンソールからはraspi-configを使って対話的に設定する(5 Interfacing Options →P5 I2C)か、

sudo raspi-config nonint do_i2c 0

で有効にできます。(参照: RaspberryPi: raspi-config コマンドラインから設定(ノンイタラクティブ) )

いずれの方法でも、設定後は再起動が必要となります。

Node-REDからI2C周辺機器を使う場合、Cusom Nodes node-red-contrib-i2cが使えます。
i2cbus.png

なお、ADRESS/Commandは、FlowEditorのパネル内で設定する場合は10進数で入力する必要がありますので注意が必要です。

また node-red-contrib-brads-i2c-nodesでセンサーmcp9808/bmp180/bmp280/bme180/htu21d/tsl2561が使えます。ほかにもI2Cデバイスに対応したCustom Nodesがありますので、デバイス名で検索してみてください。

Seeed Studioの Grove System http://www.seeedstudio.com/wiki/Grove_System のデバイスにも、I2Cを使うものがあり、3.3Vのもの はケーブルを自作することで、Raspberry PiのGPIOピンに直結して使うことができます。
gpiogrove.png

その他、Raspberry PiでNode-REDを使う場合の注意点

Raspberry PiのCPUアーキテクチャによる差異

インストールスクリプト update-nodejs-and-nodered はnode.jsをバイナリインストールします。実行するRaspberry Piのアーキテクチャ(3B+/3B/2Bはarmv7l、それ以外はarmv6l)に合わせてインストールしますので、例えばRaspberry Pi 3B上でインストールスクリプトによって導入したmicroSDを、Raspberry Pi ZeroWに挿入してもNode-REDは動作しません。

どんどん更新していきます。

Raspberry PiでNode-REDを使う際に気を付けた方がいいことや、本稿の間違い等ありましたらコメントでお寄せいただければ幸いです。

utaani
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした