Contents
独自ノードを作る(既存ノードの改変)
1. 概要
Node-REDのノードを使っていると機能の追加などの改良したくなることがあります。
Node-REDのノードはMIT Licenseに従っていますので、改変は自由です。ライセンスの日本語訳は本ページの最後を参照ください。
ここでは、I2C経由でLCDに表示するノード”node-red-contrib-pcf8574-lcd”の表示文字数と表示行数を変更し、動作を確認する手順を示します。
・拡張する機能:もともとのノードは、LCDが20文字×4行にしか対応しておらず、20文字×2行のLCDには表示できませんでしたので、20文字×2行に対応します。
・新ノード名:node-red-contrib-pcf8574-lcd-2line
独自ノードをつくるのに参考にしたHPを以下に示します。
・ Node-REDのノードをつくる手順
2. 改良のための調査
2-1. 現状の不満点
・ 現状のnode-red-contrib-pcf8574-lcdは、Sizeの設定が20文字×4行にしか対応していない。ここを変更して、16文字×2行に対応する。
2-2. ソースの確認
・ 改良ができそうかの当たりを付けるために、ノードのソースを確認する。前章の参考HPにも記載されているように、ノードのプログラムのメインは、jacvascriptのプログラム“****.js”と、htmlファイル”****.html”の2つです。この2つのプログラムを確認し、変更内容の当たりを付けます。
① パレット管理からノードをインストールする際に、「ノード情報を参照」で表示されるHPを検索します。
”node-red-contrib-pcf8574-lcd”で検索して、表示します。
② 右上の“Node Info”の枠内にある“View on GitHub”をクリックします。
GitHubに移動しますので、Codeのボタンをクリックして、ポップアップメニューの一番下の“Download ZIP”をクリックします。ファイルが“ダウンロード・フォルダ”に保存されます。
③ ダウンロードしたzipファイル“node-red-contrib-pcf8574-lcd-master.zip”を解凍します。
このノードのディレクトリ構造は以下のようになっています。srcディレクトリの下に、lcd.jsとlcd.htmlがあります。この2つがメインのプログラムです。
④ lcd.jsを確認します。
先頭部で、(1) lcd_drivers.jsを読み込んでいます。このファイルは同じディレクトリにあります。
その下にswitch-case文で”20×4”だったら、numLines=4; numCols=20;にせよという記述があります。ここで、文字数と行数を設定していると思われます。
そこで、ここに今回追加したい16文字×2行の条件を追加し、
switch (config.size) {
case "20x4":
numLines = 4;
numCols = 20;
break;
case “16x2":
numLines = 2;
numCols = 16;
break;
}
という記述にしてはどうかと当たりを付けました。
⑤ lcd.htmlを確認します。
先頭部に、ノードの情報が書かれているようです。その中に、デフォルトのサイズが“20×4”という記述があります。
さらにその下に、ノードのプロパティの画面の設定と思われるものがあります。ここに、“PCF8574”と“PCF8574AT”が列記されています。そして、プロパティの画面でも“PCF8574”と“PCF8574AT”を選ぶことができます。
従って、その下の”20×4”に”16×2”を追加することで、lcd.jsのcase文に渡されると考えらると当たりを付けます。
<div class="form-row">
<label for="node-input-size"><i class="fa fa-arrows"></i> Size</label>
<select type="text" id="node-input-size" style="width:80px;">
<option value="20x4">20x4</option>
<option value=“16x2">16x2</option>
</select>
</div>
以上で、修正の方向が決まりました。
3. プログラムの修正
node-red-contrib-pcf8574-lcdは、I2Cのインターフェスを介して、LCDに文字を表示します。そのため、I2Cのインターフェースを持つ、Raspberry Piにインストールします。
1)ダウンロードしたzipファイルを~/home/pi/.node-red/node_modulesの下にコピーし、展開します。
2)ディレクトリ名を$mv node-red-contrib-pcf8574-lcd-master node-red-contrib-pcf8574-lcd-2line で変更します。
3)srcディレクトリの下のlcd.jsファイルとlcd.htmlファイルを修正します(内容は、前ページ、前々ページ参照)。
4)次に、一つ上のディレクトリにあるpackageファイルを修正します。
修正内容は、”nameと”version”の部分です。ここの部分が、パレットの一覧に表示されます。
1)packageのあるフォルダで以下のコマンドを実行します。
$npm pack --pack-destination ..
2)一つ上のディレクトリに、node-red-contrib-pcf8574-lcd-2line-0.1.2.tgzが
生成されます。
4. 改良ノードの登録
1) node-redのエディタ画面のパレット管理を開きます。
2) 「ノードを追加」タブを開き、tgzファイルをアップロードをクリックします。
3) node-red-contrib-pcf8574-lcd-2line-0.1.2.tgzを選択します。
4) アップロードをクリックします。
5) アップロードが完了し、Node-ga 追加されます。
16文字×2行が選択できるようになり、液晶にも表示されました。
■ MITのライセンスの日本語訳(AIによる翻訳)
本ソフトウェアおよび関連するドキュメントファイル(以下「本ソフトウェア」)の複製を取得したすべての者に対し、無償で、本ソフトウェアを使用、複製、改変、統合、公開、配布、サブライセンス、および/または販売する権利、ならびに本ソフトウェアが提供された者にも同様の行為を許可する権利を含め、制限なく本ソフトウェアを取り扱うことをここに許可します。ただし、以下の条件に従うものとします。
上記の著作権表示および本許諾表示を、本ソフトウェアのすべての複製または重要な部分に記載するものとします。
本ソフトウェアは「現状有姿」で提供されており、明示または黙示を問わず、商品性、特定目的への適合性、および権利非侵害についての保証を含め、いかなる保証も行いません。いかなる場合においても、著者または著作権者は、本ソフトウェアまたはその使用その他の取り扱いに起因または関連して生じた請求、損害、その他の責任について、一切の責任を負わないものとします。