🔌

グローバル版SORACOM LTE-M Buttonの2-Wire Accessoryを試す

2023/05/22に公開

この記事は

グローバル版SORACOM LTE-M Buttonに搭載されている、2-Wire Accessoryを試したのでそのメモです。

2-Wire Accessoryとは

グローバル版SORACOM LTE-M Buttonには、2-Wire Accessoryと呼ばれる外部入力端子が存在しています。
ひげボタン(SORACOM LTE-M Button Plus)と同じように接点入力をボタン押下と同じように取り扱えるのかな・・と思ったところ、公式ドキュメントによると、ひげボタンの動作とはちょっと違うようです。

ドキュメントによると、

The LTE-M Button is designed to be able to tell the difference between events coming from the built-in physical button and events coming from the 2-wire accessory. When using the accessory, the detect_type value in the click event data will become:

  • Rising edge - When the 2-wire accessory is closed (the wires are connected)
  • Falling edge - When the 2-wire accessory is opened (the wires are disconnected)

With this capability, you can connect the 2-wire accessory to a > pressure sensor circuit, such as to detect when someone is stepping in a particular area or when a vehicle is driving over a specific location.

とあります。
ざっくりまとめると

  • 2-Wire Accessoryは、内蔵ボタンとは別のイベントとして扱われる
  • 接続したときにRising Edge、切断したときにFalling Edgeというイベントが飛んでくる

ということです。つまり、上手く使えばイベント発生だけでなく、何らかの状態を検知するようにできそうです。面白そうですね。

それは勘違いから始まった

ドキュメントには、A 2-wire accessory is included in the Soracom LTE-M Button package と書いてあるものの、前回開封したときの記憶では付属していなかったように思います。
仕様書を見ると2-wires Connectable via a 3.5mm Audio Jack Connectorとありますので

「ああ、オーディオジャックから2本線を取り出すんだからモノラルの2極端子を挿してやるのね」

と思って、モノラルのイヤホン端子を挿してみたのですが、以下のような動作をしました。

  • 端子を挿すと、いきなりRising edgeのイベントが飛んでくる
{"prod_type":1,"f_ack":true,"msg_type":"event","seq_number":20,"detect_type":"Rising edge","crc8":true,"binaryParserEnabled":true}
  • 取り出した2本線を結線すると、いつもより長くLEDが点滅し、見たこともない形のJSONが飛んできた
{"prod_type":1,"f_ack":true,"msg_type":"status","seq_number":95,"batt_vol":2700,"fw_ver":8736,"hw_ver":258,"curr_oper":"Event","curr_edge_debounce":true,"curr_ext_io":"Edge","curr_ul_freq":1,"crc8":true,"binaryParserEnabled":true}

...なんじゃこりゃ?ドキュメントにはそれらしい記述も見当たりません。
そして、不思議な動作をするということは挿してる線が違いそうです。

ふと思いついて、LTE-M Buttonの箱をよーく見たら、箱の中の仕切りを外したところに2-Wire Accessoryが入っていました。これは気づかない・・w

こんな所に2-Wire Accessoryがw

そして、見てみるとケーブルは4極端子で、そこから2本線が出ている状態でした。

付属の2-Wire Accessory

テスターでチェックしたところ、この2本はケーブルの根元側から見て1番目と3番目の端子に接続されていました。

改めて2-Wire Accessoryを試す

ということで、この付属のケーブルを使い、改めて2-Wire Accessoryを試してみます。

もちろん挿しただけでイベントは飛んできません。そして、2本の線を結線/切断してみると以下の2つのイベントが飛んできました。結線してすぐ切断しても、だいたい数秒~10秒くらいの間隔で飛んできています。

{"prod_type":1,"f_ack":true,"msg_type":"event","seq_number":20,"detect_type":"Rising edge","crc8":true,"binaryParserEnabled":true}
{"prod_type":1,"f_ack":true,"msg_type":"event","seq_number":21,"detect_type":"Falling edge","crc8":true,"binaryParserEnabled":true}

ドキュメント通りですね!

msg_type=statusの謎

そうなると、最初に飛んできたmsg_type=statusのJSONは何だったのか気になります。
4極端子ということは、もしかすると4本のケーブルの組み合わせによって何らかの機能が作り込まれてるのかも知れません。早速調べてみましょう。

4極のオス-オスのケーブルの片側にジャンパーワイヤーを半田付けして、これで色々な組み合わせで試していきます。

テストに使ったケーブル

結論からいうと、ケーブルの根元側から順に0,1,2,3と番号を振って説明しますと以下のようになっていました。
なお、こちらは私が試して把握した範囲であり、公開された仕様ではありませんのでご注意ください。

  • 2本の組み合わせで動くのは0と2の組み合わせのみで、仕様書通りの動作をする
  • 1は動作に影響を与えない
  • 0と3を結線した状態で、2を結線/断線しても動作しない
  • 2と3を結線した状態で、0を結線/断線すると、msg_type=statusのメッセージが飛んでくる
  • 0と2を結線した状態(1度Rising edgeメッセージが飛んだ状態)で、3を結線/断線すると、msg_type=statusのメッセージが飛んでくる

この最後の組み合わせが、図らずも2極のケーブルを挿したときの動作になっていたわけです。

msg_type=statusのJSONについて

改めてJSONの中身を確認してみましょう。

{"prod_type":1,"f_ack":true,"msg_type":"status","seq_number":95,"batt_vol":2700,"fw_ver":8736,"hw_ver":258,"curr_oper":"Event","curr_edge_debounce":true,"curr_ext_io":"Edge","curr_ul_freq":1,"crc8":true,"binaryParserEnabled":true}

仕様が公開されてないの推測できないところもありますが、パラメータ名からの推測できるところとしては、以下のような意味でしょうか。

パラメータ名 意味
prod_type ドキュメント通り
f_ack ドキュメント通り
msg_type ボタンのstatusを返すモードを表すstatus
seq_number ドキュメント通り
batt_vol バッテリー残量(ボルト)
fw_ver ファームウェアバージョン
hw_ver ハードウェアバージョン
curr_oper イベントによるメッセージ送信?
curr_edge_debounce ?
curr_ext_io 現在の動作モードがボタンでなく2-Wireを使うモード?
curr_ul_freq ?
crc8 ドキュメント通り

少なくともバッテリー残量やファーム番号が取れるのは嬉しいですね。

まとめ

勘違いから見つけたundocumentな動作でしたが、死活監視を兼ねてバッテリー残量を定期的に送るといった使い方ができそうで面白いなと思いました。

また、ドキュメントによるとこの端子に温度センサーを付けることもできるとのことです。その動作のための仕組みが隠されてそうな気もするので、今後も色々試してみたいと思います。
もしケーブルの組み合わせで他の動作に気づかれた方は是非教えていただけますと嬉しいです。

皆さんのお役に立てば幸いです。

GitHubで編集を提案

Discussion