IoT側へのデータ転送

1.センサモジュールの接続ポート

センサモジュールには、接続ポートが①USB、②UART、③BT(Bluetooth classic)の3つあります。すべてシリアル通信ポートと考え、同じ内容を同じタイミングで出力します。
これらの内2つのポートを使って、リアルタイムフィードバック用の通信とIoT用の通信を行います。図〇.〇参照。接続ポートの組み合わせを、表1に示します。

前3章で示した事例は、接続タイプ1(IoT用は未接続)に相当します。この章では、中継器(ゲートウエイ)にIoT用のデータを転送することを想定し、接続タイプ4について説明します。ゲートウエイ用のハードウエアとしてRapberryPi4を使用します。尚、ゲートウエイ(RaspberryPi4)は、ディスプレイ/キーボード/マウスの接続無、電源投入時にNode-RED起動、VNCでアクセスできるよう事前設定しておいてください(設定方法は「ゲートウェイ構築」のページで説明しています)。ゲートウエイの作業はネットワーク経由で行うことを前提としています。

表3.1 接続ポートの利用

接続
タイプ
リアルタイムフィードバック用
(制御用PCと接続)
IoT用
(ゲートウエイと接続)
USB 未接続
未接続 BT
USB UART
USB BT
USB UART+シリアル通信デバイス(有線/無線)
UART BT

2.センサモジュールとゲートウェイ(IoT)の接続

① センサモジュールの電源投入

センサモジュールの電源を入れます。USBケーブルでも、後述する電池でもOKです。USB電源を使うと、ごくまれに、電源供給だけなのですがケーブルや電源ポートの関係でセンサモジュールがハングアップすることが有りますので、センサモジュールのLEDが交互に点滅し、通信状態であることを確認してください。

② ゲートウェイとのBluetoothによる接続(GUI使用)

ネットワークに接続されたPCから、VNCでゲートウエイにアクセスし、センサモジュールとペアリングを行います。RapberryPi4の画面左上のラズパイアイコンから、設定→bluetoothマネージャー(blueman)へ進みます。Bluemanが出ないときには、「ゲートウェイ構築」のページに従い、インストールしてください。Bluemanを使うことで、BTをシリアルポートとして認識させます。ペアリング完了すると、図4.1のような表示になります。

入力ポートをすべてシリアルポートとして認識させることで、後述するNode-REDのフローの汎用性を高めています。

また、電源投入時のセンサモジュールの自動接続に必要になるコマンドレベルの接続方法は、この章の後半にある「ゲートウェイとのコマンドによる接続」で説明しています。

VNC(Virtual Network Computing) viewerのインストール方法と使い方別途記述が必要

 

図4.1 bluemanでペアリングが完了した際の表示

 

③ GTKtermでの接続確認(GUI)

ラズパイアイコンから、左の図のようにして、GTKtermを選択し、起動します。

起動したら、Configurationのタブをクリックします。

すると、ポート(Port)とボーレート(Baud Rate)を設定する画面が出てきます。

ポートを、/dev/rfcomm0や/dev/rfcomm1のようにハードウェアの設定に従って入力してください。ボーレートは、1000000 bps(1Mbps)と入力してください。それ以外は、デフォルトでOKです。

設定を終えたら、OKボタンを押してください。下の図のように、テキストデータが流れ始めたら、接続はOKです。

④ Node-REDの起動

ラズパイアイコンから、プログラミング→Node-REDと進みNode-REDを起動させます。

自動起動に設定しているならば、このステップは不要です。Node-REDの自動起動の方法は、「ゲートウェイ構築」のページで説明しています。同様に、Node-REDの編集画面のパスワード設定の方法も「ゲートウェイ構築」のページで説明しています。

以上で、ゲートウェイ(RaspberrPi4)での設定(VNC経由の作業)は終了です。

 

⑤ Node-RED編集画面の起動

次に、ネットワークに接続されたPCからhttp://<中継器のアドレス>:1880 へアクセスすると以下ように中継器上のNode-REDの編集画面がブラウザ上に表示されます。

(VNC経由でゲートウェイ上にブラウザを立ち上げ、localhost:1880へアクセスしても以下同様の操作です)

 

⑥ 受信データの読み込みをNode-REDで編集

Node-REDにBTポートで受信したデータを読み込む方法を紹介します。

図4.2に示すように、フローを記述するキャンバスの上に、[serial in]と[debug]の2つのノードを配置し、結線します。
シリアルノードの設定を開き、/dev/rfcomm1の様にハードウエアの状況に合わせてポートを設定し、ボーレートを1000000bps(1Mbps)に設定します。

その他の設定は初期値のままで結構です。

 

⑥ Node-REDの実行

最後に「デプロイ」を行い完了です。[serial in]のノードの表示が「接続済」に変わり、デバッグ画面にセンサモジュールから送信されたデータが表示されます。

接続と切断が繰り返されなど、動作が不安定な場合は、センサモジュールをリセットしてください。

 

図4.2 Node-REDの設定

以上で、センサモジュールから、IoT側のゲートウエイ(RaspberrPi4)へのデータ転送の設定が完了しました。

複数個のセンサモジュールを使用する場合は、その数だけbluemanを使ったペアリングを行いそれぞれに対してデバイスを割り当ててください。

/dev/rfcomm2, /dev/rfcomm3 といった具合です。

センサモジュールのデータを扱うサンプルフロー(プログラム)をこのHPに掲載していますので、ダウンロードの上、フローをNode-REDにインポートしてください。

サンプルプログラム(フロー)は、フルスペックの物と環境センサだけ(ダッシュボードも)、加速度センサだけ(ダッシュボードも)、の3種は必要。

 

3.Node-REDからのセンサモジュールの設定変更

センサモジュールの運転条件の設定をNode-REDダッシュボードから行うことができます。
各センサーデバイスのON/OFFやデータ取得の周期などを変更する場合はこのページを参照してください。

 

4.ゲートウェイとのコマンドによる接続

この項では、センサモジュールとゲートウェイの接続をコマンドレベルで行う方法について説明します。センサモジュールとゲートウェイはそれぞれ電源が入っているものとします。

① ゲートウェイとのBluetoothによる接続(コマンド使用)

使用するコマンドは以下の2つです。

$ bluetoothctl power on
$ sudo rfcomm bind [シリアル番号] [Bluetooth Device Address]

最低、このコマンド2つを電源投入時に実行すれば、電源投入後、自動でセンサモジュールとゲートウェイが繋がります。サンプルプログラムでは、Node-REDを使って、上記2コマンドを実行させています。一度、接続するとセンサモジュールの電源をOFF/ONしても自動で復帰します。

1)    $ bluetoothctl power on

Bluetoothレシーバーの電源を入れるコマンドです。bluetoothctlコマンドは、Bluetoothの操作をコマンドレベルで行うことができるコマンドです。電源投入以外にも、Bluetoothデバイスのスキャンやペアリング、接続などをコマンドレベルで行えます。本ゲートウェイとしては、power on コマンドのみを使用しています。単発コマンドと使用する以外にもインタラクティブな動作をさせることもできます。

$ bluetoothctl

とだけ入力するとインタラクティブモードに入り、プロンプトが

[Bluetooth]#

となりますので、power on, scan on, scan off, pair, connect, exitなどのコマンドを入力することができます。

 

   左の図では、bluetoothctlコマンドをインタラクティブに動作させて、レシーバーの電源を入れ(power on)、Bluetoothデバイスのスキャンを実施(scan on, scan off)し、センサモジュールのBluetooth Device Addressを表示させています。

 

2) $ sudo rfcomm bind [シリアル番号] [Bluetooth Device Address]

このコマンドは、Bluetoothデバイスを、シリアルポートにつなげる(Bindする)コマンドです。例えば、

$ sudo rfcomm bind 0 34:AB:95:5A:6E:42

は、Bluetooth Device Addressが、34:AB:95:5A:6E:42のセンサモジュールを、/dev/rfcomm0につなげるコマンドです。

上の図の中では、バインドした後に、接続されているかを確認するために、

$ rfcomm show 0

$ ls -l /dev/rfcom*

を使用しています

② GTKtermでの接続確認(コマンド)

コマンドラインでの、GTKTermの立ち上げは、以下の1コマンドです。

$ gtkterm -p /dev/rfcomm0 -s 1000000

上の図の最終行で実行しています。その結果が以下です。以下のように測定結果が流れ始めたらOKです。