IchigoJam + MixJuiceでIoTセンサーを製作する事例を国野さんに寄稿していただきました。

IchigoJamからAmbientへセンサ情報を送信する

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

ハードウェアの概要

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

img_5_m

IchigoJamへワイヤレス拡張シールドMixJuiceを装着し、ミニブレッドボード(55穴または25穴)上に照度センサを接続したときの様子。使用したミニブレッドボード内では、写真の左右方向に配線されている。

img_4_m

CQ出版社の「IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)」に付属の「Personal Computer基板」へ、IchigoJam用ワイヤレス拡張シールドMixJuiceを接続し、照度センサを接続したときの様子。
http://www.geocities.jp/bokunimowakaru/diy/ichigojam/pcb.html
(参考情報)  Personal Computer基板の5V電源回路にはMixJuiceをドライブする十分な能力があるが、IchigoJam UやTのようなCN5が実装されていない。そこで、Personal Computer基板上 のArduino互換の拡張IO(CN9)をMixJuiceの電源端子へ接続した(写真右側の赤色ジャンパ線)。

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

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

Ambient:
https://ambidata.io/

img_1_m

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 http://www.geocities.jp/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)の実験に必要なもの

  • IchigoJam U または IchigoJam T (http://ichigojam.net/)
  • MixJuice (http://mixjuice.shizentai.jp/)
  • 55穴または25穴ミニ・ブレッドボード
  • 照度センサ NJL7502L
  • 抵抗器 10kΩ
  • ジャンパ線 橙2本、青1本
  • MixJuiceファーム書き換え用の部材
    • USBシリアル変換アダプタ
    • ジャンパ線 赤1本
    • ジャンパワイヤ 4本、その他

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

この実験にはMixJuiceのファームウェアVer 1.2以上が必要です。MixJuiceのファームウェアのバージョンをIchigoJamから確認するには、MixJuiceをIchigoJamへ取り付けた状態で、以下のコマンドを入力します。

?"MJ VER

MixJuiceのファームウェアは下記からダウンロードすることができます。PCN社から販売されている純正のMixJuiceだけでなく、市販のワイヤレスモジュールESP-WROOM-02へ書き込むことも可能です。ただし無断で配布することはできません。

MixJuice:
http://mixjuice.shizentai.jp/

書き換えにはUSBシリアル変換アダプタと、ファームウェアを書き換ツールが必要です。書き込みツールはESPモジュールの開発元のEspressifからダウンロードすることができます。ESP8266 Flash Download Tools V2.3またはV2.4、V3.3.6を使用してください(その他のバージョンの中にはMixJuiceに対応していないものもあるので注意する)。

Espressifダウンロードページ:
https://espressif.com/en/support/download/overview?keys=&field_type_tid%5B%5D=16

ファームウェア書き換え時は、MixJuiceをIchigoJamへ接続しないでください。MixJuiceのIO 0(CN4の一番奥)をGNDに接続し、USBシリアル変換アダプタを接続します。CN6のジャンパピンを挿入し、MixJuiceの電源を入れると、ファームウェア書き換えモードで起動し、緑色のLED 1が薄く点灯します。

img_6_m

秋月電子通商製のUSBシリアル変換アダプタAE-FT234Xを使って接続したときの様子。ジャンパワイヤは、上から順に赤色が5V、青色がGND、黄色がTXD、緑色がRXD。上の写真では分かりにくいがCN4には赤色のジャンパ線が取り付けられている(下の写真だと分かりやすい)。

img_8_m

シリアルはクロスせずに接続する(USBシリアル変換アダプタのTXD出力側をMixJuiceのCN3のTXD端子へ、RXD入力をMixJuiceのRXD端子へ)。IchigoJamのファームを書くときの逆になるので注意する。

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

img_7_m

画面下部の「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か月程度の動作が可能になる)。

img_0_m

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

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

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

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

  • IchigoJam U または IchigoJam T (http://ichigojam.net/)
  • MixJuice (http://mixjuice.shizentai.jp/)
  • 55穴または25穴ミニ・ブレッドボード
  • 照度センサ NJL7502L
  • 抵抗器 10kΩ
  • ジャンパ線 橙2本、黄1本、青1本
  • 電池ボックス・ジャンパワイヤ

ハードウェアの変更

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

img_2_m

電源には単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 http://www.geocities.jp/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に戻って繰り返し処理を行う。
※赤文字部分は主にプログラム(1)との相違点を示す。

より電池を長持ちさせるサンプルプログラム(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 http://www.geocities.jp/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:ネットワークに接続されているかどうかを確認する。
※赤文字部分は主にプログラム(2)との相違点を示す。

さらに電池寿命を延ばすには、送信間隔やIchigoJamの待機間隔を長くします。低消費電力のレギュレータへ交換します。レギュレータによってはスタンバイ電流が0.1mA以下のものもあり、待機電力を大幅に削減することができるでしょう。

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

上記のプログラム(3)を用いて実証実験を行ってみました。単3電池と比べて容量が約半分の単4電池を使うことで、実験期間の短縮を行っています。
実証実験では、2016年12月4日に動作を開始し、12月31日までの27日間の動作が確認できました。これは単3電池に換算して約54日間に相当します。単3電池を使えば、およそ2か月くらい動作することが分かりました。

照度センサ部を電池電圧の検出回路に変更:

pic_0

img_3_m

実証実験に製作した回路。容量が単3電池の約半分となる単4電池を使用した。IchigoJamとMixJuiceには純正品を使用した。照度センサの代わりに電池電圧を測定するための可変抵抗器に変更して電池電圧を観測。

 

img_9_m

実証実験により2016年12月4日に開始し、12月31日までの27日間の動作が確認できた。開始直後にジャンパ線の接触不良があったため、一部のデータ(12月5日・約24時間分)を修正。終止付近の電圧上昇の原因はIchigoJam側のAD変換器の基準電圧(電源電圧3.3V)の低下による影響と思われる。

関連情報

IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
http://www.geocities.jp/bokunimowakaru/diy/ichigojam/pcb.html

by ボクにもわかるIchigoJam用マイコンボード
http://www.geocities.jp/bokunimowakaru/q/15