🐈

MA-S120/LA,GLA で計測したアナログデータをSORACOM Harvestに送信する(ステップ1:必要なコマンドを確認しよう)

2023/08/07に公開

やりたいこと

Century Systems社のルーターについているアナログ入力インターフェースに入力したセンサからの信号(電圧/電流)値を取得して、SORACOM Harvest Dataに送信する方法をご紹介します。

準備

必要なもの

  • MA-S120/LA または MA-S120/GLA 一式
    (以下、MA-S120と呼びます。)
  • SORACOM IoT SIM
  • PC
    (本ブログではWindows11)
  • シリアルコンソール接続可能なターミナルエミュレータソフトウェア
    (本ブログではTeraTermを利用します。)
  • USB micro-B(MA-S120側) - USB-C(PC側に合わせて適切に選択)
  • センサ
    (本ブログではダミーセンサとしてアルカリ乾電池2本使用)

MA-S120でSORACOMに接続

こちらのブログを参考にSORACOM IoT SIMをMA-S120に入れてSORACOMに接続するための設定を完了しましょう。
https://blog.soracom.com/ja-jp/2023/02/20/ma-s120-introduction/#co-index-1

SORACOM Harvest Dataを使えるようにする

  1. グループを作成する
    https://users.soracom.io/ja-jp/docs/group-configuration/create-group/
  2. グループの設定画面からSORACOM Harvest Dataを有効化する
    グループ設定画面でSORACOM Harvest Dataのトグルスイッチを「on」にして保存します。以下のような状態になっていればOKです。
  1. SORACOM Harvest Dataを有効化したグループにIoT SIMを所属させる
    以下を参考に、先ほど作成したグループにSIMを所属させます。
    https://users.soracom.io/ja-jp/docs/group-configuration/set-group/

センサをつないでデータを送る

ここからが本編です。MA-S120の電源がONになっている場合は、一旦MA-S120の電源を落としましょう。

MA-S120にセンサとPCを接続

MA-S120にセンサとPCを接続します。MA-S120の電源を切って以下の図のように接続をしてください。

センサは信号線を下記のように端子台に押し込んで接続します。
今回は電圧信号を入力するのでDIPスイッチを上側に設定していますが、4-20mAの信号を出力するセンサを接続する場合は、DIPスイッチを下側に設定します。

PCからTeraTermでシリアルコンソール接続

TeraTermを起動

今回は手っ取り早く操作するためにシリアルコンソール接続をします。

Tera Termを起動します。

シリアルのラジオボタンを押して、プルダウンから今回接続しているCOMポートを選択します。

シリアルポートの設定

メニューの「設定」からシリアルポートを以下のように設定します。

電源投入

ここから暫くだだだだだっと起動時のログが表示されます。
ログのストリームが落ち着いたところで、login:という表示が出るのを待ちます。

管理者権限でログインします。
初期状態ではusername:root, password:rootでログインできます。
https://ma-tech.centurysys.jp/doku.php?id=mas1xx_ope:boot_from_emmc:start

ここまで来たら、MA-S120にコマンドを打っていろいろできるようになりました。

SORACOMにつながっていることを確認しよう

以下のコマンドを打ってみます。返事が返ってきたらSORACOMにつながっていることが確認できます。

ping -c 3 pong.soracom.io

以下のように
3 packets transmitted, 3 received, 0% packet lossとなればちゃんとつながっていることが確認できています。

アナログに入力されている信号の値をとってみよう

計測された値は
/sys/bus/iio/devices/iio\:device1/in_voltage0_raw
に入っているということで、以下のコマンドを打ってみます。

cat /sys/bus/iio/devices/iio\:device1/in_voltage0_raw

そうすると、以下のように18666が返ってきます。

この値の意味はCenturySystems社のこちらのサイトに記載されたとおり、AD変換値(+2.5V を中心に -65535 〜 65535 の値)となっています。
この値を電圧に直すためには、スケール(1bit あたりの電圧 [mV])をかけた値に2500[mV]を足した値となります。
スケールの値は、/sys/bus/iio/devices/iio\:device1/in_voltage_scaleに入っているので、以下のコマンドで表示させてみましょう。

cat /sys/bus/iio/devices/iio\:device1/in_voltage_scale

0.038146972が表示されました。

これらの値を変数に入れて電圧を算出してみます。

# scaleという変数にcatコマンドで取得したscaleの値を代入する
scale=`cat /sys/bus/iio/devices/iio\:device1/in_voltage_scale`

# echoコマンドでscaleの値を表示して確認。変数名の先頭に$を付けると変数の値を呼び出せる。
echo $scale

# rawという変数にcatコマンドで取得したAD変換値を代入する
raw=`cat /sys/bus/iio/devices/iio\:device1/in_voltage0_raw`

# rawの値も確認
echo $raw

# 電圧の値を(scale x raw + 2500) / 1000 [V]で計算する。
# 小数の掛け算を行うため、bcコマンドで実施する。
voltage=`bc -l <<< "($scale*$raw+2500)/1000"`

# voltageの値を確認
echo $voltage

#ダミーセンサーの電圧値であればOK

コマンドの結果は以下の通りで、電圧の計測値は3.212[V]に対して、

マルチメータでの計測値は、3.206[V]ということで、6[mV]程度の誤差となっており、ちゃんと計測できていそうなことが分かりました。

取得した値をUnified Endpointに送信して、SORACOM Harvest Data確認しよう

後はこの値をunified endpointに送信するだけです。
curlコマンドを使って、POSTメソッドのHTTPリクエストでJSONで送信します。

curl -v -X POST http://uni.soracom.io:8888/ \
-H "Content-Type:application/json" \
-d '{
  "voltage": '${voltage}'
}'

以下のように
HTTP/1.1 201 Createdのレスポンスがあれば、ひとまずOKです。

実際のSORACOM Harvest Dataに送信されたデータを見てみましょう。
でーたの確認方法は以下の通りです。
https://users.soracom.io/ja-jp/docs/harvest/visualize/

無事、約3.2[V]の値が送信できていることが確認できました。

この後の流れ

IoTデータとして定期送信

上記のコマンドをshell scriptにしてcronで設定して定期的に実行されるようにしましょう。
ステップ2で説明します!

計測値に対して演算をしてから送信したい

ちょっとした計算(例:ノイズが多い場合に、10回計測した値の平均値を算出)をしてデータを送信したい場合などはpythonをインストールして、pythonで送信しましょう。

複数のデバイスに展開したい

必要な設定済ませたOSイメージを作成し、SORACOMブート機能で配布しましょう。
https://blog.soracom.com/ja-jp/2023/01/31/ma-s120-soracom-boot-feature/

Discussion