はじめに
obnizのプログラム間の情報交換はDropboxなどの外部サービスで実現できるが、排他フラグなどのような少量情報の交換を、とにかくサクッと実施したいという場合に便利な方法を紹介します。obnizの機能のみで実現できます。
■概要
outputピンのtrue/falseの2値を共有情報として利用します。
output(true/false)でピンXの状態を設定し、resetOnDisconnect(false)でプログラムが終了しても状態を保持するようにし、他のプログラムではadX.getWait()でピンXの電圧を取得しtrue/falseを判断します。obnizは12ピンありますので、最大12Bitの情報交換ができま。
■共有情報の書込方法
・ピンXにtrueを設定する場合 → obniz.ioX.output(true)
・ピンXにfalseを設定する場合 → obniz.ioX.output(false)
■共有情報の参照方法
・ピンXの電圧を取得する → vol=await obniz.adX.getWait()
・電圧からかtrue/falseを判断する → true≒5、false≒0 (微変動します)
例えばvol=3v当たりを閾値にしtrue/falseを判断するとよいでしょう。
■ピンの状態を保持させる方法
・obniz.resetOnDisconnect(false)
通常はobniz.close()が呼ばれた場合やプログラムが終了する際にピンの状態がリセットされてしまいますが、この処理を無効化してリセットされないようにします。この設定は、書き込み側と読み込み側のプログラムの両者で必ず設定する必要があります。
尚、この設定をした場合は他のピンの状態も保持されることになりますので、例えばLEDの消灯をプログラムの終了に依存している場合などは、明示的にOFFにするなどの対策が必要になるかもしれません。既存部分の再点検をお勧めします。
■サンプルプログラムのデモ動画
スマホから設定したio1ピンの状態が、別プログラムのWeb画面で正しく参照されている事がわかると思います。確認用にピン1にLEDを接続してあり、trueで点灯します。
[サンプルプログラムのデモ動画]
https://youtu.be/RrCH5wTUnRw
以上