センサモジュールソフトウェアの機能

センサモジュールは電源を接続するとあらかじめ有効化されているセンサのデータを出力しますが、センサモジュールの制御コマンドを使用すると各センサの駆動条件や、外部機器の制御ポートなどをコントロールすることができます。
センサモジュールをPDHに接続した際にNode-REDを使用してデバイスコントロールを行うダッシュボードを用意していますが、内部ではセンサモジュールとPDHの通信でこの制御コマンドを使用しています。

制御コマンドの送受信にはUSBシリアルまたはBluetoothが使用できます。
・ここでは事例としてUSBで接続したコンピュータ上のArduino IDEの「シリアルモニタ」を使用します。
・シリアルモニタでセンサモジュールと通信を行うだけですのでソースファイルやライブラリは必要ありません。
 (他のシリアル通信ソフトウェアでも可能ですが、送信データの入力フィールドが別になっている物が便利です。)

1)Arduino IDEのシリアルモニタに表示する

センサモジュールをUSBケーブルでコンピュータに接続し、Arduino IDEを開きます。

「ツール」から「シリアルポート」にマウスを重ねて、センサモジュールのポートを選択します。

「ツール」から「シリアルモニタ」を選択すると、シリアルモニタのウインドウが開きます。

右下の通信速度の選択で「1000000 bps」を選択します。

これでセンサデータが表示されます。

2)センサモジュールの起動メッセージを確認する

センサモジュールのリセットボタンを押します。起動メッセージが表示されます。

起動メッセージの内容
R-MSM sensor module Firmware: v1.3.4   <センサモジュールファームウェアのバージョンを表示します
MAC: 441793604C92           <センサモジュールのBluetooth MACアドレスを表示します
MAC4: 4c92               <Bluetooth MACアドレスの下4桁を表示します。idとして使用します
BT name: R-MSM_4c92          <Bluetoothのデバイス名を表示します
i2c device list : 0x20,0x29,0x2a,0x48,0x60,0x66,0x68,0x76,devices:8 <検出したI2Cデバイスのアドレスと数を表示します

Bluetooth MACアドレスとデバイス名はセンサモジュールとPDHを接続する際にも使用するので、モジュール側面のラベルにも印字して貼り付けています。
i2c device listはセンサモジュール起動時にI2Cバスをスキャンしてリストアップしています。外部接続のI2Cデバイスを使用するときに正しく認識しているかどうかを、ここで確認することもできます。

3)センサモジュールに制御コマンドを送る

Arduino IDEのシリアルモニタ上部にあるフィールドにコマンドを入力して送信することで、センサモジュールに制御コマンドを送る事ができます。
まず、確認のため「reset=true」を送信してみましょう。

センサモジュールにリセットがかかり、リセットボタンを押した時と同じように起動メッセージが表示されればOKです。


*古いファームウェアではresetコマンドに対応していないものがあります。
 その場合はファームウェアを最新版に更新してお試しください。

4)センサモジュールで利用できるコマンド

センサモジュールに対して次に示すコマンドを使用することができます。
これらのコマンドはPDHのNode-REDでInjectノードとSerial outノードを使用して送信する事もできます。

4-1) センサ駆動条件の設定コマンド

 オンボードセンサ、対応している外部接続センサのON/OFFおよび駆動インターバルを設定できます。
 PDHの「デバイスコントロール」から設定を変更する際にも、内部ではこれらのコマンドを使用しています。
 PDHと接続している場合は、この「デバイスコントロール」を使用した方が簡単に設定できます。

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 BMX160_enable true
false
{“BMX160_enable”:true}
{“BMX160_enable”:false}
BMX160_enable=true
BMX160_enable=false
モーションセンサBMX160のON/OFF
2 BMX160_interval インターバルmS {“BMX160_interval”:(mS)} BMX160_interval=1000 モーションセンサBMX160の駆動インターバル(mS)
3 BME688_enable true
false
{“BME688_enable”:true}
{“BME688_enable”:false}
BME688_enable=true
BME688_enable=false
環境センサBME688のON/OFF
4 BME688_interval インターバルmS {“BME688_interval”:(mS)} BME688_interval=1000 モーションセンサBME688の駆動インターバル(mS)
5 ADS1015_enable true
false
{“ADS1015_enable”:true}
{“ADS1015_enable”:false}
ADS1015_enable=true
ADS1015_enable=false
ADコンバータ ADS1015のON/OFF
6 ADS1015_interval インターバルmS {“ADS1015_interval”:(mS)} ADS1015_interval=1000 ADコンバータ ADS1015の駆動インターバル(mS)
7 MCP4725_enable true
false
{“MCP4725_enable”:true}
{“MCP4725_enable”:false}
MCP4725_enable=true
MCP4725_enable=false
DAコンバータ MCP4725のON/OFF
8 MCP4725_interval インターバルmS {“MCP4725_interval”:(mS)} BME688_interval=1000 DAコンバータ MCP4725の駆動インターバル(mS)
9 MCP23008_enable true
false
{“MCP23008_enable”:true}
{“MCP23008_enable”:false}
MCP23008_enable=true
MCP23008_enable=false
GPIO MCP23008のON/OFF
10 MCP23008_interval インターバルmS {“MCP23008_interval”:(mS)} MCP23008_interval=1000 GPIO MCP23008の駆動インターバル(mS)
11 S11059_enable true
false
{“S11059_enable”:true}
{“S11059_enable”:false}
S11059_enable=true
S11059_enable=false
カラーセンサS11059のON/OFF
12 S11059_interval インターバルmS {“S11059_interval”:(mS)} S11059_interval=1000 カラーセンサS11059の駆動インターバル(mS)
13 VL53L1X_enable true
false
{“VL53L1X_enable”:true}
{“VL53L1X_enable”:false}
VL53L1X_enable=true
VL53L1X_enable=false
レーザ距離センサVL53L1XのON/OFF
14 VL53L1X_interval インターバルmS {“VL53L1X_interval”:(mS)} VL53L1X_interval=1000 レーザ距離センサVL53L1Xの駆動インターバル(mS)
15 AK9750_enable true
false
{“AK9750_enable”:true}
{“AK9750_enable”:false}
AK9750_enable=true
AK9750_enable=false
人感センサAK9750のON/OFF
16 AK9750_interval インターバルmS {“AK9750_interval”:(mS)} AK9750_interval=1000 人感センサAK9750の駆動インターバル(mS)
17 RPR0521_enable true
false
{“RPR0521_enable”:true}
{“RPR0521_enable”:false}
RPR0521_enable=true
RPR0521_enable=false
照度センサRPR0521のON/OFF
18 RPR0521_interval インターバルmS {“RPR0521_interval”:(mS)} RPR0521_interval=1000 照度センサRPR0521の駆動インターバル(mS)
19 MPR121_enable true
false
{“MPR121_enable”:true}
{“MPR121_enable”:false}
MPR121_enable=true
MPR121_enable=false
タッチセンサMPR121のON/OFF
20 MPR121_interval インターバルmS {“MPR121_interval”:(mS)} MPR121_interval=1000 タッチセンサMPR121の駆動インターバル(mS)
21 MCP9601_enable true
false
{“MCP9601_enable”:true}
{“MCP9601_enable”:false}
MCP9601_enable=true
MCP9601_enable=false
熱電対温度センサMCP9601のON/OFF
22 MCP9601_interval インターバルmS {“MCP9601_interval”:(mS)} MCP9601_interval=1000 熱電対温度センサMCP9601の駆動インターバル(mS)
23 MPR121_enable true
false
{“MPR121_enable”:true}
{“MPR121_enable”:false}
MPR121_enable=true
MPR121_enable=false
タッチセンサMPR121のON/OFF
24 MPR121_interval インターバルmS {“MPR121_interval”:(mS)} MPR121_interval=1000 タッチセンサMPR121の駆動インターバル(mS)
25 BME680_enable true
false
{“BME680_enable”:true}
{“BME680_enable”:false}
BME680_enable=true
BME680_enable=false
環境センサBME680のON/OFF
26 BME680_interval インターバルmS {“BME680_interval”:(mS)} BME680_interval=1000 境センサBME680の駆動インターバル(mS)
27 BMX055_enable true
false
{“BMX055_enable”:true}
{“BMX055_enable”:false}
BMX055_enable=true
BMX055_enable=false
9軸モーションセンサBMX055のON/OFF
28 BMX055_interval インターバルmS {“BMX055_interval”:(mS)} BMX055_interval=1000 9軸モーションセンサBMX055の駆動インターバル(mS)
29 DS18B20_enable true
false
{“DS18B20_enable”:true}
{“DS18B20_enable”:false}
DS18B20_enable=true
DS18B20_enable=false
温度センサDS18B20のON/OFF
30 DS18B20_interval インターバルmS {“DS18B20_interval”:(mS)} DS18B20_interval=1000 温度センサDS18B20の駆動インターバル(mS)
31 MH-Z14B_enable true
false
{“MH-Z14B_enable”:true}
{“MH-Z14B_enable”:false}
MH-Z14B_enable=true
MH-Z14B_enable=false
CO2センサMH-Z14BのON/OFF
32 MH-Z14B_interval インターバルmS {“MH-Z14B_interval”:(mS)} MH-Z14B_interval=1000 CO2センサMH-Z14Bの駆動インターバル(mS)
33 task_settings  –  {“device”:”R-MSM”,”id”:”179E”,
“sensor”:”task_settings”,”timestamp”:208532.13,
“BMX055_enable”:false,”BMX055_interval”:1100,
“BME680_enable”:false,”BME680_interval”:3500,
“ADS1015_enable”:false,”ADS1015_interval”:900,
“MCP4725_enable”:true,”MCP4725_interval”:5000,
“RPR0521_enable”:false,”RPR0521_interval”:1600,
“MPR121_enable”:false,”MPR121_interval”:800,
“MCP9601_enable”:false,”MCP9601_interval”:2000,
“MCP23008_enable”:false,”MCP23008_interval”:1200,
“BMX160_enable”:true,”BMX160_interval”:1000,
“S11059_enable”:false,”S11059_interval”:1500,
“VL53L1X_enable”:false,”VL53L1X_interval”:1300,
“AK9750_enable”:false,”AK9750_interval”:1400,
“BME688_enable”:false,”BME688_interval”:3000,
“DS18B20_enable”:false,”DS18B20_interval”:4000,”MH-Z14B_enable”:false,”MH-Z14B_interval”:4500,”LPWA_enable”:true}
task_settings 各センサタスクのenable状態とインターバルを返す

 

4-2) 外部ポートの設定コマンド

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 MCP23008_GP5 true
false

{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:1},”port6″:{“val”:0},”port7″:{“val”:0}}
{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:0},”port6″:{“val”:0},”port7″:{“val”:0}}

MCP23008_GP5=true
MCP23008_GP5=false

I2C接続のGPIOチップMCP23008のGP5,GP6,GP7を出力ポートに設定しており、この中でGP5の出力状態をHigh(true)かLow(false)に設定します。

2 MCP23008_GP6 true
false
{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:0},”port6″:{“val”:1},”port7″:{“val”:0}}
{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:0},”port6″:{“val”:0},”port7″:{“val”:0}}
MCP23008_GP6=true
MCP23008_GP6=false
I2C接続のGPIOチップMCP23008のGP5,GP6,GP7を出力ポートに設定しており、この中でGP6の出力状態をHigh(true)かLow(false)に設定します。
3 MCP23008_GP7 true
false
{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:0},”port6″:{“val”:0},”port7″:{“val”:1}}
{“device”:”R-MSM”,”id”:”179E”,
“sensor”:”MCP23008″,”timestamp”:3982955.31,
“port5”:{“val”:0},”port6″:{“val”:0},”port7″:{“val”:0}}
MCP23008_GP7=true
MCP23008_GP7=false
I2C接続のGPIOチップMCP23008のGP5,GP6,GP7を出力ポートに設定しており、この中でGP7の出力状態をHigh(true)かLow(false)に設定します。
4 MCP4725_value 0~4096 {“MCP4725_value”:4096} MCP4725_value=4096 DAコンバータの出力電圧を変更します。
値を0~4096に設定すると、それに応じて出力電圧が0~3.3Vに変化します。
後段に接続する機器に応じてインターフェース回路を作成してください。
5 LPWA_enable true
false
{“LPWA_enable”:true}
{“LPWA_enable”:false}
LPWA_enable=true
LPWA_enable=false
LPWAモジュール(920MHz特定小電力長距離通信モジュール)を接続する時に有効化します。LPWAモジュールにはCSV形式のデータが送信されます。

 

4-3) OLED表示器の設定コマンド

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 display_line1 表示文字列
(半角英数16文字)
 –  display_line1=abcdefg OLED表示モジュールの1行目に半角英数で16文字まで表示します。
2 display_line2 表示文字列
(半角英数16文字)
 –  display_line2=abcdefg OLED表示モジュールの2行目に半角英数で16文字まで表示します。
3 display_line3 表示文字列
(半角英数16文字)
 –  display_line3=abcdefg OLED表示モジュールの3行目に半角英数で16文字まで表示します。
4 display_clear  –   –  display_clear OLED表示モジュールの表示内容を消去します。

 

4-4) PWM出力の設定コマンド

センサモジュールのJ11コネクタからPWM信号を出力します。端子はサーボモータ制御と共通です。

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 pwm0_val PWM値
(0~1023)
{“pwm0_val”:512}  pwm0_val=512 pwm 0 端子(J11 – 1 pin)からPWM信号を出力します。
2 pwm1_val PWM値
(0~1023)
{“pwm1_val”:1023}  pwm1_val=1023 pwm 1 端子(J11 – 2 pin)からPWM信号を出力します。
3 pwm2_val PWM値
(0~1023)
{“pwm2_val”:0}  pwm2_val=0 pwm 2 端子(J11 – 3 pin)からPWM信号を出力します。

4-5) サーボモータ制御コマンド

センサモジュールのJ11コネクタからサーボモータ制御信号を出力します。端子はPWM出力と共通です。

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 servo0_val PWM値
(30~120)
{“servo0_val”:75}  servo0_val=75 pwm 0 端子(J11 – 1 pin)からPWM値によるサーボモータ制御信号を出力します。
2 servo1_val PWM値
(30~120)
{“servo0_val”:120}  servo1_val=120 pwm 1 端子(J11 – 2 pin)からPWM値によるサーボモータ制御信号を出力します。
3 servo2_val PWM値
(30~120)
{“servo0_val”:30}  servo2_val=30 pwm 2 端子(J11 – 3 pin)からPWM値によるサーボモータ制御信号を出力します。
4 servo0_deg 角度
(0~180)
{“servo0_deg”:90}  servo0_deg=90 pwm 0 端子(J11 – 1 pin)から角度値によるサーボモータ制御信号を出力します。
5 servo1_deg 角度
(0~180)
{“servo0_deg”:180}  servo1_deg=180 pwm 1 端子(J11 – 2 pin)から角度値によるサーボモータ制御信号を出力します。
6 servo2_deg 角度
(0~180)
{“servo0_deg”:0}  servo2_deg=0 pwm 2 端子(J11 – 3 pin)から角度値によるサーボモータ制御信号を出力します。

4-6) デバッグ用のコマンド

番号 コマンド 引数 レスポンス (JSON) コマンド例 説明
1 reset true {“reset”:true} reset=true センサモジュールをリセットします。
R-MSMセンサモジュール基板のハードウェアWDTを使用してリセットします。
2 debug_mode true {“debug_mode”:true} debug_mode=true センサモジュールのUSBシリアル出力にセンサタスクの実インターバルとタスクの処理時間などの各種デバッグ情報を出力します。システム構築時のデバッグのみに使用してください。
*センサモジュールをリセットすると、このモードをセットしていてもクリアされます。
3 debug_mode false {“debug_mode”:false} debug_mode=false 各種デバッグ情報の出力を停止します。

 

5)Node-REDからコマンドを送信する

R-MSMのコマンドは接続されたPDHやコンピュータ上のNode-REDからも送信することができます。
injectノードにコマンドを設定し、serial outノードで送信するなどの方法が使えます。

6)今後の開発

上記で説明したセンサデバイスの運転条件の変更の他にも、今後の開発で機能を追加していく予定です。

・各種コマンドの追加
シリアルコマンドはこれまでにも活用を進める中で便利に使えるように追加・変更を進めてきました。
今後も用途によって必要となるコマンドがあれば追加していく予定です。

・エデュケーションモード
起動時の選択でセンサモジュールの動作モードを変更し、センサモジュール自身からセンサの信号を模した信号を出力する事を検討しています。センサモジュールやPDHの活用を検討する中で、このモードを使用してR-CPSについての理解を深めて頂ける事を期待しています。