はじめに
obnizの複数プログラム間で簡単に少量の情報を交換する方法です。外部ファイルサービス等を使えばできることなのですが、obnizのプログラミングが簡単すぎるが故に、逆に外部ファイルサービス等のプログラミングはハードルが高いと感じることもあるかと思います。そこで、obnizの機能のみで簡単に複数プログラム間で少量の情報を交換する方法を紹介します。obnizのピンの出力電圧を利用するという少し裏技的な感じの方法です。
■概要
ioX.output(true/false)でXピンに電圧を出力し、adX.getWait()でXピンの電圧を読み取ることでXピンを介して情報共有します。また、ioX.drive("3v/5v")で電圧を切替できることを利用して、1ピン当たり3値(0v/3v/5v→0/1/2)を共有できます。例えば、3ピン使えば、3進数^3ピンで27種の値を共有できます。2進より多くの情報量を扱うことができます。
尚、obniz.close()が発行された場合や、closeが発行されなくてもプログラムが終了して30秒後にピンの状態が自動リセットされるので、情報共有したいすべてのプログラムでobniz.resetOnDisconnect(false)を発行して、このリセットを無効にしておく必要がありますので注意してください。
■共有できる情報量 (10進数)
・1ピン利用時 → 3
・2ピン利用時 → 9
・3ピン利用時 → 27
・4ピン利用時 → 81
(以下省略)
■共有情報の書込方法
・共有値【0】の書込 → obniz.ioX.output(false);
・共有値【1】の書込 → obniz.ioX.drive("3v") ; obniz.ioX.output(true);
・共有値【2】の書込 → obniz.ioX.drive("5v") ; obniz.ioX.output(true);
■共有情報の参照方法
・vol=await obniz.adX.getWait() ;
vol≒0 → 共有値【0】と判断
vol≒3 → 共有値【1】と判断
vol≒5 → 共有値【2】と判断
(volは微変動します)
■終了でピンをリセットさせないための設定
・obniz.resetOnDisconnect(false)
■サンプルプログラムのデモ動画
3ピン利用例、左のスマホでWrite → 右のスマホでRead
https://youtu.be/tGgVftaALEM
以上