IchigoJam + MixJuiceで製作するIoTセンサ
~Ambientへデータ送信~

 IchigoJamは、株式会社jig.jpが開発した教育用パソコンとして使用可能なマイコンボードです。マイコンにはNXP社のLPC1114が用いられ、jig.jp社が独自開発した IchigoJam BASIC によるプログラミングが可能です。ここでは、IchigoJam専用のワイヤレス拡張シールドMixJuice(開発元=NaturalStyle社、販売=PCN社)と組み合わせ、センサ情報をIoTセンサ用クラウドサービスAmbientへ送信する実験を行います。


ハードウェアの概要

照度センサにはJRCのNJL7502Lを使用しました。NJL7502Lのコレクタ側をVcc(3.3V)へ、エミッタ側をIchigoJamのIN2端子へ接続します。また、IN2端子とGNDとの間に10kΩ~100kΩ程度の抵抗器を接続します。

イメージ 6
IchigoJamへワイヤレス拡張シールドMixJuiceを装着し、ミニブレッドボード(55穴または25穴)上に照度センサを接続したときの様子。使用したミニブレッドボード内では、写真の左右方向に配線されている。
イメージ 1
CQ出版社の「IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)」に付属の「Personal Computer基板」を使うことも出来る。上図はPersonal Computer基板へIchigoJam用ワイヤレス拡張シールドMixJuiceを接続し、照度センサを接続したときの様子。
(参考情報) Personal Computer基板の5V電源回路にはMixJuiceをドライブする十分な能力があるが、IchigoJam UやTのようなCN5が実装されていない。そこで、Personal Computer基板上 のArduino互換の拡張IO(CN9)を使用した(写真右側の赤色ジャンパ線)。

IoTセンサ用クラウドサービスAmibient

AmbientはIoTセンサのセンサ値をグラフ化して表示するクラウドサービスです。下記のページにアクセスして、ユーザ登録を行い、チャンネルを作成すると、①チャネルID、②リードキー、③ライトキーが発行されます。このうちの①チャネルIDと③ライトキーをIchigoJam上で作成するプログラム内に記述することで、IchigoJamからAmbientへデータ送信が行えるようになります。
Ambient:

イメージ 4

IchigoJam BASIC用サンプルプログラム(1)実験用:約30秒ごとに送信

まずはBASICのサンプルプログラムから紹介します。このサンプルプログラム(1)は、約30秒おきにIN2端子に接続した照度センサの値をAmbientへ送信します。
ただし、行番号2のMJ PCTコマンドはMixJuiceのファームウェアのVersion 1.2からサポートされた命令です。古いファームウェアでは動作しません(次節に詳細)。IchigoJamのファームウェアについてはバージョン1.1.1以上を使用してください。
行番号2~5には、MixJuiceへ送信するコマンドが書かれています。この中の赤文字部分を修正する必要があります。行番号3の部分にはAmbientから発行された①チャネルIDを、行番号4には③ライトキーを書いてください。
サンプルプログラム(1)実験用:約30秒ごとに送信

new
1 cls:?"Ambient":uart1
2 'MJ PCT application/json
3 'MJ POST START ambidata.io/api/v2/channels/ここにチャネルIDを書く/data
4 '{"writeKey":"ここにライトキーを書く","d1":"#"}
5 'MJ POST END
rem https://bokunimo.net/bokunimowakaru/cq/15
100 'MAIN
110 P=#C1A
120 A=ana(2):?"ana(2)=";A
130 gosub600:gosub600:gosub600:gosub600
140 wait 1800
150 goto 100
600 'TX
610 ifpeek(P)<>asc("'")letP,P+1:goto610
620 P=P+1:ifpeek(P)=asc("#")?A;:goto620
630 ifpeek(P)<>0?chr$(peek(P));:goto620
640 ?:return

行番号110:行番号2~5に書かれたコマンドの位置を示すための変数Pを定義。初期値として行番号2のコマンド位置を代入する。MixJuiceへコマンド文字を1文字づつ送るにつれて、行番号620で変数Pの値を1だけ増加させる。
行番号120:IN2のアナログ値を入力するコマンド。
行番号130:行番号2~4のMixJuice用コマンドを実行するためのgosub命令。
行番号140:30秒間の待ち時間処理。30秒×60=1800を設定。
行番号150:行番号100へ戻る。

プログラム(1)の実験に必要なもの


MixJuice用ファームウェアのバージョンアップ

この実験にはMixJuiceのファームウェアVer 1.2以上が必要です。MixJuiceのファームウェアのバージョンをIchigoJamから確認するには、MixJuiceをIchigoJamへ取り付けた状態で、以下のコマンドを入力します。
?"MJ VER
MixJuiceのファームウェアは下記からダウンロードすることができます。PCN社から販売されている純正のMixJuiceだけでなく、市販のワイヤレスモジュールESP-WROOM-02へ書き込むことも可能です。ただし無断で配布することはできません。
MixJuice:
書き換えにはUSBシリアル変換アダプタと、ファームウェアを書き換ツールが必要です。書き込みツールはESPモジュールの開発元のEspressifからダウンロードすることができます。ESP8266 Flash Download Tools V2.3またはV2.4、V3.3.6を使用してください(その他のバージョンの中にはMixJuiceに対応していないものもあるので注意する)。
ファームウェア書き換え時は、MixJuiceをIchigoJamへ接続しないでください。MixJuiceのIO 0(CN4の一番奥)をGNDに接続し、USBシリアル変換アダプタを接続します。CN6のジャンパピンを挿入し、MixJuiceの電源を入れると、ファームウェア書き換えモードで起動し、緑色のLED 1が薄く点灯します。

イメージ 3
秋月電子通商製のUSBシリアル変換アダプタAE-FT234Xを使って接続したときの様子。ジャンパワイヤは、上から順に赤色が5V、青色がGND、黄色がTXD、緑色がRXD。上の写真では分かりにくいがCN4には赤色のジャンパ線が取り付けられている(下の写真だと分かりやすい)。
イメージ 5
シリアルはクロスせずに接続する(USBシリアル変換アダプタのTXD出力側をMixJuiceのCN3のTXD端子へ、RXD入力をMixJuiceのRXD端子へ)。IchigoJamのファームを書くときの逆になるので注意する。ただし、MixJuiceの一番左側にあるCN4については、TXDとRXDを反転して表示してあるのでクロスして接続する必要がある。

ESP8266 Flash Download Toolsを起動するとコンソール画面(CLI画面)と以下のようなGUI画面が開きます。一番上のボックスへファイル「mixjuice.bin」を入力し、書き込みます。

イメージ 2
画面下部の「COM PORT」をUSBシリアル変換アダプタが接続されているシリアルポート番号に設定してから、「START」ボタンをクリックすると書き込み(Download)が始まる。また「DETECTED INFO」と「MAC Address」のエリアにMixJuiceの情報が表示される。表示されない場合はシリアル接続を見直す。多くの場合、MixJuiceのFLASH SIZEは32Mbit。今後は16Mbitに移行するので、16Mbitに設定しておくのが無難。

書き込みに失敗する場合は、MixJuice上のジャンパピンCN6を取り外しておき、ESP8266 Flash Download Toolsの「START」ボタンを押してから速やかにジャンパピンを差し込みます。MixJuiceがスリープモードになっているときは、CN6を取り外しただけでは電源が切れないことがあります。少し待って(コンデンサが放電しきってから)、「START」を押し、CN6を取り付けてみてください。
書き込みが完了したら、USBシリアル変換アダプタやIO0に接続したジャンパ線などを取り外してください。

プログラムの実行方法

それでは、MixJuiceをIchigoJamへ取り付けて動かしてみましょう。MixJuiceとIchigoJamの電源はマイクロUSB端子から供給します。両方のマイクロUSB端子に電源を供給する方法のほか、MixJuiceのマイクロUSB端子から供給した電源を、IchigoJamのCN5へ供給することも可能です。
プログラムを動かす前に、MixJuiceをインターネットにWi-Fi経由で接続する必要があります。Wi-Fi接続するには、下記のコマンドをIchigoJamから入力してください(SSIDとPASSはお手持ちの無線LANアクセスポイントに書かれた内容を使用してください)。
?"MJ APC SSID PASS

接続が完了したら、プログラムを入力(または転送)し、IchigoJam上でRUNコマンドを実行すると、以下のようなメッセージが表示されるとともに、Ambientへ照度センサの値を送信します。
RUN
ana(2)=1023
'MJ PCT application/json
'MJ POST START ambidata.io/api/v2/channels/688/data/
'{"writeKey":"0123456789abcdef","d1":"#"}
'MJ POST END
IchigoJamを使ったIoTセンサをクラウドサービスAmbientへ送信する方法について説明しましたが、電源にはUSBアダプタを使用しました。次は乾電池を使った実験です。


単3アルカリ電池を使用して長期間駆動

今度は電源に単3アルカリ電池3本を使用して長期間の駆動が可能なIoTセンサを製作してみましょう。プログラム(1)が動作中の消費電流はおよそ90mAです。2000mAhの単3電池だと22時間ほどしか動作しません。そこで、送信頻度を下げ、送信していない期間中はスリープにして、電池を長持ちさせます(2か月程度の動作が可能になる)。

イメージ 1
単3アルカリ電池で長時間の駆動が可能な IchigoJam + MixJuiceによるIoTセンサの製作例。IchigoJamとMixJuiceのスリープ機能を使用して実用的なIoTセンサの実験を行った。

乾電池駆動を実現するための工夫

単3アルカリ乾電池で長期間の駆動を実現するには、動作時間をなるべく短くし、何もしていない時間を増やすことで平均の消費電力を抑えます。動作中の90mAに対し、何もしていない待機中の消費電流は1mAほどまで下がります。例えば60分に一度だけ送信し、残り時間は待機するような動作を行えば、何か月も動かし続けることができるようになります。
今回の実験では、このような乾電池駆動を実現するためのポイントについて説明します。このままでも1~2か月程度は動作することを確認済みです。3か月以上動かし続けるにはMixJuiceの電源回路を改造したり、スリープ時間をより長くするような改造が必要です。うまく制御すれば半年以上、持たせることも出来るでしょう。

プログラム(2)と(3)の実験に必要なもの


ハードウェアの変更

プログラム(1)の実験で製作したハードウェアの電源を乾電池(直列3本)に変更します。下図右側の5ピンソケット(CN5)の一番上が電池の+(プラス)側です。一番下が電池の-(マイナス)側です。
また、MixJuiceのスリープ機能を使用するために、ジャンパ線(黄色)を使って、MixJuice基板上のCN4の2番ピンと6番ピンを接続してください。

イメージ 3
電源には単3電池3本を使用し、CN5へ接続する。また、MixJuiceのCN4の2番ピンと4番ピンに黄色のジャンパを接続する。照度センサNJL7502LのコレクタはVcc(3.3V)へ、エミッタはIN2端子へ接続。IN2端子とGNDとの間には10kΩ~100kΩ程度の抵抗器を接続。

もちろん、CQ出版社「IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)」で製作したPersonal Computer基板でも動作します

IchigoJam BASIC用サンプルプログラム(2)乾電池駆動:約1分毎に起動

約1分毎に送信を行い、送信後にスリープへ移行するサンプル・プログラムを以下に示します。行番号3と4には、Ambientから発行された①チャネルIDと③ライトキーを書いてください。
実行すると、約1分おきにIN2端子に接続した照度センサの値をAmbientへ送信します。行番号7のWの値を600くらいにしてスリープ時間を10秒くらいにしてみると分かりやすいでしょう。
サンプルプログラム(2)乾電池駆動:約1分毎に起動

new
1 cls:?"Ambient":uart1
2 'MJ PCT application/json
3 'MJ POST START ambidata.io/api/v2/channels/ここにチャネルIDを書く/data
4 '{"writeKey":"ここにライトキーを書く","d1":"#"}
5 'MJ POST END
6 ?"アナログ ニュウリョク A=IN2
7 W=3000:?"ソクテイ カンカク W=";W
8 ' CC BY Wataru Kunino
rem https://bokunimo.net/bokunimowakaru/cq/15
100 'MAIN
110 P=#C1A
120 A=ana(2):?"ana(2)=";A
130 gosub600:gosub600:gosub600:gosub600
200 'SLEEP
210 ?"MJ SLEEP ";W/60:wait30
220 ifinkey()goto220
230 led0:waitW+360,0:led1
240 ifinkey()goto240
250 ?"MJ APS":wait30
260 ifinkey()<>asc("1")goto250
270 goto100
600 'TX
610 ifpeek(P)<>asc("'")letP,P+1:goto610
620 P=P+1:ifpeek(P)=asc("#")?A;:goto620
630 ifpeek(P)<>0?chr$(peek(P));:goto620
640 ?:return

行番号210:MixJuiceをスリープモードに移行する。
行番号220:キーバッファをクリアする(wait命令が適切に動かすため)。
行番号230:IchigoJamをスリープする(MixJuiceよりも6秒だけ長く)。
行番号240:キーバッファをクリアする。
行番号250:MixJuiceが動作状態かどうかを確認する。
行番号260:動作状態でなければ行番号250に戻る。
行番号270:行番号100に戻って繰り返し処理を行う。

より電池を長持ちさせるサンプルプログラム(3)乾電池駆動:約20分毎に起動

より電池寿命を延ばすには、スリープ時間を長くします。ここではスリープ時間を20分にしてみました。MixJuice側は最大約60分まで設定することが出来ます。一方、IchigoJam側のwaitコマンドは最大9分までしか指定できません。そこで、複数回に分けて実行する必要があります。ここではIchigoJamを1秒ごとに起動し、MixJuiceが動作していなければ、すぐにスリープするようにしました。
プログラムの行番号7の変数Wに測定間隔を「分」の単位で入力してください。行番号8で「秒」に変換して処理を行います。
サンプルプログラム(3)乾電池駆動:約20分毎に起動

new
1 cls:?"Ambient":uart1
2 'MJ PCT application/json
3 'MJ POST START ambidata.io/api/v2/channels/ここにチャネルIDを書く/data
4 '{"writeKey":"ここにライトキーを書く","d1":"#"}
5 'MJ POST END
6 ?"アナログ ニュウリョク A=IN2
7 W=20:?"ソクテイ カンカク W=";W;" min."
8 V=W*60/63*60:video0
9 ' CC BY Wataru Kunino
rem https://bokunimo.net/bokunimowakaru/cq/15
100 'MAIN
110 P=#C1A
120 A=0:forI=1to10:A=A+ana(2):next:?"ana(2)=";A
130 gosub600:gosub600:gosub600:gosub600
200 'MJ SLP
210 ifinkey()goto210
220 ?"MJ SLEEP ";W*60:wait30:I=0
230 ifinkey()goto230
240 ?"MJ VER":wait30
250 ifinkey()=asc("'")goto200

300 '15 SLP
310 ifinkey()goto310
320 led0:wait57,0:led1:I=I+1
330 ifI<Vgoto310
340 ifinkey()goto340
350 ?"MJ APS":wait33
360 ifinkey()<>asc("1")goto300
370 goto100
600 'TX
610 ifpeek(P)<>asc("'")letP,P+1:goto610
620 P=P+1:ifpeek(P)=asc("#")?A;:goto620
630 ifpeek(P)<>0?chr$(peek(P));:goto620
640 ?:return

主な修正部の解説:
行番号7:測定間隔を「分」の単位で入力するように修正(1分から60分)まで設定可能。
行番号8:IchigoJamのスリープ時間Vを設定。MixJuiceよりも5%だけ短くする。TV出力OFF。
行番号120:IN2端子から10回入力。変数Aは、その合計値。
行番号220:MixJuiceをスリープに移行する。変数Iを0にセットする。
行番号300:ここからがIchigoJamのスリープ処理。
行番号320:約1秒間だけIchigoJamのスリープを実行する。変数Iに1(秒)を加算する。
行番号330:変数Iのスリープ時間が、V(秒)以上になるまで行番号310に戻る。
行番号350:ネットワークに接続されているかどうかを確認する。
さらに電池寿命を延ばすには、送信間隔やIchigoJamの待機間隔を長くします。低消費電力のレギュレータへ交換します。レギュレータによってはスタンバイ電流が0.1mA以下のものもあり、待機電力を大幅に削減することができるでしょう。

単4電池による実証実験で27日間(単3に換算して54日間)の動作を確認済み

上記のプログラム(3)を用いて実証実験を行ってみました。単3電池と比べて容量が約半分の単4電池を使うことで、実験期間の短縮を行っています。
実証実験では、2016年12月4日に動作を開始し、12月31日までの27日間の動作が確認できました。これは単3電池に換算して約54日間に相当します。単3電池を使えば、およそ2か月くらい動作することが分かりました。
照度センサ部を電池電圧の検出回路に変更:
イメージ 4
実証実験に製作した回路。容量が単3電池の約半分となる単4電池を使用した。IchigoJamとMixJuiceには純正品を使用した。照度センサの代わりに電池電圧を測定するための可変抵抗器に変更して電池電圧を観測。
イメージ 4
実証実験により2016年12月4日に開始し、12月31日までの27日間の動作が確認できた。開始直後にジャンパ線の接触不良があったため、一部のデータ(12月5日・約24時間分)を修正。終止付近の電圧上昇の原因はIchigoJam側のAD変換器の基準電圧(電源電圧3.3V)の低下による影響と思われる。

関連情報


by ボクにもわかるIchigoJam用マイコンボード
https://bokunimo.net/bokunimowakaru/q/15