はじめに
とあるご縁で、商業雑誌 (シェルスクリプトマガジン) の連動企画で BitTradeOne から Jetson Nano と Raspberry Pi (以降、ラズパイ) で共通で使用可能な電力測定ボードを発売する企画の製作に協力することになり、Node-RED から電力測定ボードを操作するノードを作成しました。
製作過程の話とノード作成のノウハウをまとめておこうと思います。
https://bit-trade-one.co.jp/adjtsb01/
製作過程
4 月
お話をいただいて大まかに企画を練りました。
- Jetson Nano と ラズパイ の両方で使用可能とする
- Jetson Nano でアプリケーションを実行した時のシステム全体の消費電流・電力を測れるものがあると面白いのではないか
- 拡張ボードに電力を受けるMicro USB ポート、DC ジャックを設けて、GPIO ヘッダーへ 5V を入力する構成で、途中にシャント抵抗を入れて電流を計測する
- Raspberry Pi 4 で USB Type-C 給電に変更されたため、Micro USB 給電を使える救済手段にもなる
拡張ヘッダーの互換性
Jetson Nano と ラズパイ とで拡張ヘッダーのピン配列に互換性があり、その特徴を生かして共通で使用可能なようにしました。
5〜6 月
ブレッドボードとパーツを使用してプロトタイピングや動作確認を行い、基板の回路図を起こすまでをゴールとしました。シャント抵抗の接続方法は 2 種類 (ハイサイド接続とローサイド接続) ありますが、今回はローサイド接続としました。
7〜8 月
試作基板の製作に取り組みました。Raspberry Pi Zero W と同じサイズになるようにデザインしました。
9〜10 月
試作基板の動作確認が問題なかったため、量産基板の製作に向けて基板にプリントするロゴを作成したり、10月に発表された Jetson Nano の新製品 (2GB) の動作確認を緊急で行いました。
11 月
9月頃から原稿の執筆を開始し、査読・校正・校正確認・修正を経て無事に脱稿、印刷所への入稿 (11/14) となりました。物理書籍を 11/21 に受領しました。
Node-RED のオリジナルノードを作成
雑誌は Adafruit 社製のライブラリを使用して Python コードで執筆しました。
他のプログラミング言語でも拡張ボードを簡単に使用できるようにしたかったため、執筆の傍ら、Node-RED のオリジナルノードを作成することにしました。
ノードは
https://flows.nodered.org/node/node-red-contrib-ina-sensor
で公開しています。
電力測定ボードには テキサス・インスツルメント社製デジタル出力電流・電力・電圧モニター IC (INA260) と 単色有機 EL ディスプレイ (SSD1306) が搭載されています。
このノードは INA260 を操作するためのノードです。
単色有機 EL ディスプレイ (SSD1306) については
https://flows.nodered.org/node/node-red-contrib-oled
が公開されています。
実装
INA260 と SSD1306 は I2C 接続方式でアクセスする仕様のため、Jetson Nano と ラズパイ でノードを共通化でき、内部で i2c-bus npm モジュールを使用しています。
また、内部で ina226 npm モジュールを使用しています。INA226 と INA260 の差分は電流を測定するためのシャント抵抗を外部に実装するか、内部に含まれるかの違いです。INA260 は 2 ミリオーム (2 mΩ) のシャント抵抗を内臓しているため、ノードのデフォルト設定 (I2C アドレス: 0x40、シャント抵抗: 0.002) で動作するようにしています。
SSD1306 については I2C アドレスを 0x60 から 0x3c へ変更する必要があります。
ノードの公開
ノードの作成が完了し、GitHub レポジトリの作成、npm パッケージの登録までは順調でしたが、いざ Node-RED Library へ登録しようとした際になかなか公開されずに試行錯誤した結果、登録方法が自動から手動に変わっていたことが判明しました。
この件については、Node-REDノード公開方法が変わっていた件 (自動→手動登録)で記事を書いています。
Node-RED のインストール
Jetson Nano とラズパイとで Node-RED のインストール方法が多少異なります。
ラズパイの場合はシンプルに apt コマンドで Node-RED をインストールできます。
$ sudo apt install-y nodered
Jetson Nano の場合は apt コマンドで nodejs と npm をインストールした後、Node-RED をインストールします。
また、Ubuntu のソフトウェアセンターからも Node-RED をインストールできますが、オリジナルノードのビルドに必要なツール類がインストールされないため、手動コマンドでインストールします。
$ sudo apt install-y nodejs npm
$ sudo npm install-g--unsafe-perm node-red
Node-RED の起動と停止
Node-RED の起動はコマンドラインから node-red と打つだけです。停止する場合は Ctrl + C を入力します。
$ node-red
サービスとして起動・停止する場合は以下のとおりです。
# 起動する場合$ node-red-start
# 停止する場合$ node-red-stop
ノードの追加
ノードの追加方法はメニューを表示して「パレットの管理」→「ノードを追加」→「ノードを追加」→「node-red-contrib-ina-sensorを入力」→「追加ボタンを押下」で追加することができます。
node-red-contrib-oled についても同様の手順で追加することができます。
まとめ
これまで簡単な関数や機能をオリジナルノードで作成することはありましたが、ハードウェアを操作するノードの作成は今回初めて行いました。
今回の経験が同じ状況になった方に少しでもお役に立てれば幸いです。
では、良き Node-RED ライフを!