予め登録したMACアドレスの電波を待ち受けるIchigoJam用Wi-Fiセンサを製作してみました。
スマートフォンのWi-Fi電波が自宅のWi-Fiアクセスポイントへ接続するときの電波をキャッチすることで、外出先から帰宅したことを検出することが出来ます。あるいは、教室や研究室に先生が接近してきたことを検出することも出来るでしょう(ただし、先生のスマートフォンのMACアドレスの登録と、教室に無線LANアクセスポイントの設置が必要)。
ESP-WROOM-02(写真・左下)を搭載したWi-Fiセンサが、Wi-Fi電波をキャッチして、IchigoJam(左上)へ通知し、テレビへ検出結果を表示します。 ※配線については、本図ではなく、次の写真を参照
Wi-Fiセンサの無線LANアクセスポイントへの接続は不要です。指定したWi-Fiチャンネルで全てのデータを監視するプロミスキャスモードで動作します。
目次
必要なハードウェアとソフトウェアの構成
必要なハードウェアとソフトウェア構成を下記に示します。
ハードウェアとソフトウェア構成:
- IchigoJam マイコンボード(IchigoJam U、IchigoJam Tなど)
- IchigoJam BASIC ファームウェア:Ver 1.2.1以上
- BASICプログラム:uart_mon_dash.bas
⇒ 本ブログで紹介 - ESP-WROOM-02ボード(MixJuice、AE_ESP-WROOM-02など)
- Wi-Fiセンサ専用ファームウェア:adash.binまたはexample29u_dash
⇒ 本ブログで紹介
Wi-Fiセンサの製作
Wi-Fiセンサには、Espressif社のESP-WROOM-02(ESP8266)を用いました。IchigoJam用ネットワークボードMixJuiceのファームウェアを書き換えて製作することも出来ます。
ハードウェアは、Wi-FiセンサのTXDをIchigoJamのRXDへ、RXDをTXDへ接続し、相互のGNDを接続し、各機器へ電源を接続して製作します。
Wi-Fiセンサ側のソフトウェアは、Espressif製のFLASH_DOWNLOAD_TOOLS(https://www.espressif.com/en/support/download/overview)などを使って、下記の1.バイナリ+ソース内のadash.binをESP-WROOM-02へ書き込みます。
1. バイナリ+ソース(2018年2月11日版・save機能なし):
https://goo.gl/rhtvKv2. ソースコードのみ(最新版・GitHub):
https://goo.gl/McJuV5
Arduino IDEをつかったESP8266用の開発環境をお持ちの方は「2.ソースコードのみ(最新版・GitHub)」から最新版をダウンロードしてください。
Wi-FiセンサのTXDをIchigoJamのRXDへ、RXDをTXDへ接続する。電源はUSBの5Vから供給したが、動作が不安定になる場合は、ESP-WROOM-02用に別電源を用意する。製作例ではESP-WROOM-02側へ1000μFのコンデンサを使ってポリスイッチによる電流供給不足を解消した。MixJuiceを使用すれば、こういったハードウェアの製作が不要になる。
MixJuiceへファームウェアを書き込む方法については、下記のサイトに説明があります。
イチゴジャムレシピ MixJuice ファームウェアの更新:https://15jamrecipe.jimdo.com/mixjuice/ファームウェアの更新/
当方のブログ「ボクにもわかるブレッドボードによるMixJuice互換ボードの製作方法(https://bokunimo.net/blog/ichigojam/123/)」の 「ファームウェアを書き込もう」で、ブレッドボードで製作したMixJuiceへFLASH_DOWNLOAD_TOOLSを使ってファームウェアを書き込む方法を紹介しているので合わせてごらんください。
最新のESP-WROOM-02のフラッシュメモリのサイズは16MBit(2MB)なので、「FLASH SIZE」の部分で16MBitを選択してください。
Espressif製FLASH_DOWNLOAD_TOOLS設定例
(使用方法=https://bokunimo.net/blog/ichigojam/123/)
(使用方法=https://bokunimo.net/blog/ichigojam/123/)
1枚のミニブレッドボードで製作する場合(参考)
トランジスタ技術2017年3月号に掲載した「Wi-Fiコンシェルジェ・マイコン担当」で製作した回路に、ESP-WROOM-02のファームウェアと、IchigoJam BASICのプログラムを変更して動かしてみた。1枚のブレッドボードで手軽に実験を行うことが出来る(2018/2/12)
上の写真は、1枚のミニブレッドボードで製作した場合の一例です。参考回路図およびブレッドボードへの実装方法は、下記の「スピード実習パーツセット説明書」のP.15の「実習13) Wi-Fi テレビ出力(コンシェルジェ・マイコン担当) 」でCQ出版社から公開されています。ソフトウェアについては、このブログにしたがって、ESP-WROOM-02のファームウェアと、IchigoJamマイコン用BASICプログラムを変更する必要があります。
回路図の参考資料(P.15・CQ出版社):
IchigoJam用プログラム(uart
_mon_dash.bas)
Wi-Fiセンサに対応したIchigoJam用プログラムを以下に示します。行番号2のM=0のまま起動すると、Wi-Fiセンサが検知したMACアドレスを次々に表示します。M=3に変更すると、行番号140~190に記述したMACアドレスのデバイスだけを検出するようになります。
行番号140~160のphoneは外出先から帰宅したときになどに検出したいデバイス用です。「=」に続いて、デバイス番号(1~5)と、「,」、MACアドレスを記述します。一度、検出すると、約4時間以内には再検出しません。
行番号170~190のadashは、頻繁に検出したいデバイス用です。教室に先生が頻繁に接近するのを検出したり、Amazon Dashボタンの操作を検出したいときなどに使用します。こちらは、再検出までの保留時間を10秒におさえました。
IchigoJam用プログラム「Wi-Fiセンサ for IchigoJam」 uart_mon_dash.bas (IchigoJam 1.2.1以降用)
new:uart3,0
' IchigoJam ヨウ BASIC プログラム
1 ?"WiFi センサ for IchigoJam"
2 M=0:'0:MAC, 3:デバイス メイ
3 W=1:'WiFiチャンネル
100 'init
110 uart 3
120 ?"mode=";M
130 ?"channel=1"
140 ?"phone=1,F4:37:B7:00:00:00
150 ?"phone=2,1C:91:48:00:00:00
160 ?"phone=3,2C:20:0B:00:00:00
170 ?"adash=1,18:74:2E:00:00:00
180 ?"adash=2,B4:7C:9C:00:00:00
190 ?"adash=3,B4:7C:9C:4D:00:00
200 cls
300 'det
310 if inkey() goto 310
320 if inkey()<>asc("'") goto 320
330 if inkey()<>asc(" ") goto 300
340 I=0:C=0:N=0
500 'get
510 K=inkey()
520 if M=0 ? chr$(K);
530 if I=0 then C=K
540 if I=6 then N=K
550 I=I+1
560 if K<>10 goto 500
570 if M=0 goto 300
800 'print
810 if C=asc("a") ?"adash ";
820 if C=asc("p") ?"phone ";
830 ? chr$(N);" ヲ ケンシュツシマシタ
840 goto 300
phoneと、adashは、それぞれ5台まで登録することが出来ます。Arduino IDEで書き込んだ場合は、次回からの再設定が不要になる save機能 が利用できます。?"save!"(saveは小文字)を実行すれば、現在の設定内容がESP-WROOM-02へ保持されるので、以降は、BASICプログラムの行番号120~190を省略することが出来ます。
設定内容は、コマンドの「=」を「?」に変更して確認します。現在のチャンネル番号を知りたいときは?"channel?"のように入力します。登録したMACアドレスは、?"phone?"や、?"adash?"で確認することが出来ます。
Tips:プログラム入力時に、Wi-Fiセンサからの通知が邪魔になることがあります。回避するには、UART 3,0でIchigoJamの受信機能をOFFにしてください。
応用
家族のスマートフォンのMACアドレスを登録しておけば、テレビに家族の名前とともに「ワタル、オカエリ」と表示することが出来るでしょう。さらに、お父さんが帰ってきたら書斎のエアコンと照明の電源を入れるとか、在宅者に合わせて音楽のジャンルを変えるといったことも考えられます。
イベント会場では、スタッフがブースに戻ってきたときに検出結果を関係者へメール通知することによって、スタッフ交代状況を把握することもできるでしょう。
Wi-Fiセンサのソースコードおよび説明(GitHub):
バイナリファイル(MixJuiceへの書き込み用):
MixJuiceのファームウェア書き換え方法:
本製作で使用したライブラリ・参考文献:
※配布中のWi-Fiセンサ用ソフトウェア(adash.zipやexample29u_dashディレクトリ)に含まれるライブラリpromiscuous.inoおよびpromiscuous.hには、原作者kat-kaiの著作物を元に改変したものを使用しています。ソフトウェアは使用者の自己責任で自由に使用することが出来ますが、再配布する場合は権利表示に配慮してください。