カテゴリー
IchigoJam

クラウドサービスAmbientからIchigoJamのLEDを制御する

AmbientとBASICで超簡単IoT。今回はなんとLED制御

Ambientはセンサなどの情報をグラフ化してスマートフォンなどから閲覧できるIoT用クラウドサービスです。このサービスを利用して、LEDの制御を行う実験をしてみました。「センサだけでは無いAmbient」について紹介いたします。
超簡単です。すぐに実験してみましょう。

  • IchigoJamとMixJuiceで簡単接続。
  • BASICスクリプトで動作します。
  • クラウドサービスの設定も不要。
注意:ここで使用するチャネルについては実験用にキーを公開しています。この公開キーを利用することで、だれにでも簡単にLEDの制御実験に参加することが可能です(※詳細な注意事項は後述)。

IoT用クラウドサービスAmbientからLED制御信号を15秒に1回、受信する。"1"を受信したらLEDが点灯し、ブザーが「ピッ」と鳴音する。"0"を受信したら消灯する。

第1章:クラウドからLED制御してみよう! LED信号[受信]プログラム

受信用プログラムの行番号1~9の部分で初期設定を行います。2行目はAmbientから制御信号を受信するためのMixJuice用コマンドです。本プログラムでは、Ambientのチャネル番号725の公開readKeyを使用します。行番号100番台が主要部です。変数Pは行番号2のプログラム位置を示すポインタ変数です。gsb 600で行番号2のコマンドをMixJuiceへ送信します。変数KにMixJuiceから応答待ちするための文字を代入しgsb 500で受信します。待ち文字(変数K)の次に来る数字1桁が変数Iに戻り値として代入されます。
IchigoJamのファームウェアについては、バージョン1.1.1および1.2.1にて動作確認を行いました。MixJuiceのファームウェアは1.2.0で動作確認しましたが、より古いものでも動くと思います。
MixJuiceを無線LANアクセスポイントへ接続してからプログラムを走らせると、AmbientからLED制御値を取得し、LEDを点灯または消灯させます。Ambient側が消灯状態だとLEDに変化はありません。
rem LED 受信機
new
1 cls:?"Remo LED":?"Ambient"
2 'MJ GET ambidata.io/api/v2/channels/725/data?readKey=26ee8c088f61194d&n=1
7 D=7:?"data No.";D
8 W=900:?"Wait:";W/60;"s"
9 ?

100 ?"–LOOP–"
110 P=#C1D:gsb 600
120 K=asc("d"):gsb 500:C=I
130 K=asc(":"):gsb 500:L=I
140 if L=0 letL,0 else letL,1
150 K=10:gsb 500
160 if C=D led L:if L beep 2
170 ?:wait W
180 goto 100
500 'RX
510 J=0:uart0
520 I=inkey():ifI?chr$(I);
530 ifI=0andJ<30wait1:J=J+1:goto520
540 ifK<>IandJ<30goto510
550 I=inkey()-48:ifI<0orI>9ifJ<30wait1:J=J+1:goto550
560 ifI<0orI>9letI,0else?I;
570 rtn
600 'TX
610 uart1
620 ifpeek(P)<>asc("'")letP,P+1:goto620
630 P=P+1:ifpeek(P)=asc("#")?L;:goto630
640 ifpeek(P)<>0?chr$(peek(P));:goto630
650 ?:wait30:rtn
MixJuiceを無線LANへ接続するコマンド:
?”MJ␣APC␣SSIDパスワード"⏎
SSIDとパスワードはお手持ちの無線LANアクセスポイントに合わせて入力してください。

ハードウェアはIchigoJamとMixJuice

ハードウェア製作は、IchigoJamへMixJuiceを接続するだけです。長期間、動作させたい場合はケースなどに入れると良いでしょう。
IchigoJamのLEDがMixJuice基板に隠れて見にくいので、LED信号とGNDをブレッドボードに引き出し、LED(高輝度タイプ)と負荷抵抗(1kΩ)を直列に接続した製作例を下図に示します。
IchigoJamへMixJuiceを接続。写真ではUSB電源をIchigoJamへ接続しているが、本来はMixJuiceへ接続したほうが動作が安定する。(このIchigoJamはMixJuiceをドライブできるように、ヒューズやコンデンサを変更済みにつき、この構成でも動作するが、通常のIchigoJamの場合は、MixJuice側へ電源を供給すること)。

インターネットブラウザからLEDを制御する

それでは、制御してみましょう。下記の制御用ウェブページへアクセスし、右側のテンキーの[0]および[1]のボタンを使用します。
制御用ウェブページ
テンキーの[0]を押すとLEDが消灯し、[1]を押すと点灯します。すでにLEDが点灯状態であれば[0]を、消灯状態なら[1]を押してください。制御コマンドの送信に成功すると「Congratulations! You've fired the web_button event」のメッセージが表示されるので、ブラウザの戻るボタンなどで戻ってください。

製作した受信機のLEDをウェブブラウザから制御するときの画面。ウェブページ(https://bokunimo.net/ichigojam/led.html)で提供中。リンクの3番目にJavaScript版「led_js.html」も準備した。JavaScript版についてはローカルへダウンロードしてから使用する。

少しだけ、おさらい。

このLED受信機を制御する仕組みをおさらいしてみましょう。制御用ウェブページで入力したデータは、以下のようにAmbientを経由し、Ichigo
Jamへ届けられます。
制御用ウェブページで ボタン操作
https://bokunimo.net/ichigojam/led.html
(Ambientへ制御信号を送信)
IoT用クラウドサービスAmbient へ信号が保持される
(MixJuice + IchigoJamへ)
IchigoJam BASICで書かれた受信プログラムがLEDを制御
自分専用にするには
ここに記載した方法は、自分専用ではありません。制御ウェブページのボタンを誰が操作しても、Ambientの特定のチャネル(725)へデータが送られるので、実験中に他の人が実験を行うと、同時に動作してしまいます。教室などで複数人で操作してみると楽しいかもしれませんが、実際に実用的に使用するには自分専用のアカウントが必要です。Ambient(https://ambidata.io/)にてアカウントを作成し、JavaScript版(https://bokunimo.net/ichigojam/led_js.html)のAmbientチャネルIDとライトキーを書き換えて使用すると良いでしょう。

第2章:7セグメントLEDで数値を表示してみよう

IchigoJamの開発者である福野さんが、クラウド上でIchigoJam BASICを動かし、仮想7セグメントLEDの制御の様子が紹介されていました(http://fukuno.jig.jp/1732)。
だけど、やっぱり実在の7セグメントLEDを光らせたいという人も多いでしょう。以下は、クラウドサービスAmbientから実在の7セグメントLEDを制御する方法です。
7セグメントLEDの各セグメントとIchigoJamの出力ピンとの割り振り方法は、上田市マルチメディア情報センターの斎藤さん(http://d.hatena.ne.jp/shiro0922/)が広めました。PCN金沢(http://kanazawa.pcn.club/)さんも、同じ割り振りを利用しています(下図)。この資料に合わせて配線すると良いでしょう。
IchigoJamと7セグメントLEDの接続方法はPCN金沢さんが公開している回路を使用する。配線色についても、この資料に合わせると分かりやすい。
参考資料:
SHIROのモバイル日記 [IchigoJam]7セグメントLED拡張基板
PCN金沢 (資料)電子工作教材 4b)LED(7セグ)
http://kanazawa.pcn.club/pub/wp-content/uploads/data/4b)LED(7seg).pdf
製作例を以下に示します。IchigoJamへMixJuiceを接続し、上記の回路を基に7セグメントLEDを接続すれば完成です。

Ambientから7セグメントLEDを制御する受信機。制御用ウェブページ(https://bokunimo.net/ichigojam/led.html)のテンキーから数字を入力すると、受信機が制御信号を受信し、同じ値が表示される。

プログラムは、以下の通りです。LED1この時と、ほとんど変わりません。行番号3にLED制御用のデータを、行番号160でOUT端子へ出力します。
rem 7セグメントLED 受信機
new
1 cls:?"Remo7Seg":?"Ambient"
2 'MJ GET ambidata.io/api/v2/channels/725/data?readKey=26ee8c088f61194d&n=1
3 LET[0],63,6,91,79,#66,#6D,#7D,39,#7F,#6F
7 D=7:?"data No.";D
8 W=900:?"Wait:";W/60;"s"
9 ?
100 ?"–LOOP–"
110 P=#C1D:gsb 600
120 K=asc("d"):gsb 500:C=I
130 K=asc(":"):gsb 500:L=I
150 K=10:gsb 500
160 out[L]:if L beep 2
170 ?:wait W
180 goto 100
500 'RX
510 J=0:uart0
520 I=inkey():ifI?chr$(I);
530 ifI=0andJ<30wait1:J=J+1:goto520
540 ifK<>IandJ<30goto510
550 I=inkey()-48:ifI<0orI>9ifJ<30wait1:J=J+1:goto550
560 ifI<0orI>9letI,0else?I;
570 rtn
600 'TX
610 uart1
620 ifpeek(P)<>asc("'")letP,P+1:goto620
630 P=P+1:ifpeek(P)=asc("#")?L;:goto630
640 ifpeek(P)<>0?chr$(peek(P));:goto630
650 ?:wait30:rtn
7セグメントLEDが上手く表示できない場合は、配線を誤っている可能性があります。下記のプログラムで動作確認してみてください。
REM 7セグメントLED動作確認
10 LET[0],63,6,91,79,#66,#6D,#7D,39,#7F,#6F
20 for I=0 to 9
30 out [I]
40 wait 60
50 next

第3章:こんどはBTN信号を送信してみよう! BTN信号[送信]プログラム

こんどはもう1台、別のIchigoJamとMixJuiceを用意し、そのIchigoJamのタクトスイッチBTNを押すと、BTN信号をクラウドへ送信し、クラウドからLEDの状態を変更します。ハードウェアは通常の1灯LEDのほうです。
現在のLEDの状態がONであればOFFに
OFFであればONに制御します。行番号3~6にBTN信号を送信するためのMixJuiceコマンドを記しています。行番号5の「#」の部分は、変数Lの値に置き換えられてAmbientへ送信されます。
IchigoJamのファームウェアは、バージョン1.1.1および1.2.1を使用しました。MixJuiceのファームウェアについては、行番号3のPCT命令がサポートされたバージョン1.2.0以上を使用してください。
rem BTN送信機
new
1 cls:?"Remo BTN":?"Ambient"
2 'MJ GET ambidata.io/api/v2/channels/725/data?readKey=26ee8c088f61194d&n=1
3 'MJ PCT application/json
4 'MJ POST START ambidata.io/api/v2/channels/725/data
5 '{"writeKey":"ad3e53b54fe16764","d7":"#"}
6 'MJ POST END

7 D=7:?"data No.";D
8 W=900:?"Wait:";W/60;"s"
9 ?
100 ?"–LOOP–"
110 P=#C1D:gsb 600
120 K=asc("d"):gsb 500:C=I
130 K=asc(":"):gsb 500:L=I
140 if L=0 letL,0 else letL,1
150 K=10:gsb 500
160 if C=D led L:if L beep 2
170 ?:I=0
180 I=I+1:if btn()=1 gsb 400
190 if I<W/10 wait 10:goto 180
200 ?
210 goto 100
400 'BTN
410 L=!L:ledL:beep:gsb600:gsb600:gsb600:gsb600:K=-1:gosub500:letI,W/10:?
420 rtn
500 'RX
510 J=0:uart0
520 I=inkey():ifI?chr$(I);
530 ifI=0andJ<30wait1:J=J+1:goto520
540 ifK<>IandJ<30goto510
550 I=inkey()-48:ifI<0orI>9ifJ<30wait1:J=J+1:goto550
560 ifI<0orI>9letI,0else?I;
570 rtn
600 'TX
610 uart1
620 ifpeek(P)<>asc("'")letP,P+1:goto620
630 P=P+1:ifpeek(P)=asc("#")?L;:goto630
640 ifpeek(P)<>0?chr$(peek(P));:goto630
650 ?:wait30:rtn

天気予報っぽい情報を受信しよう

LED信号[受信]プログラムの行番号7のDの値を8へ、行番号140を以下のように修正すると、天気予報のような情報(大阪)が雨だった時にLEDが点灯します。
140 if L=2 letL,1 else letL,0
天気予報情報の配信にあたるといけないので、「〇〇っぽい情報」とごまかした表現になっています。具体的には、IFTTTを利用し、翌日に雨が降るっぽい情報を得たときに、Maker Webhooksというサービスでチャネル725のデータ8へ数字の2を通知します。
なお、当該チャネルのデータ8については、ライトしないでください(d8へのデータ送信は禁止)。ライトの実験を行いたい場合は、データ7をご利用ください(後述のご注意も参考にしてください)。

※ご注意
公開キーによる実験は、当ページの筆者が独自に行っているものです。Ambientを運営するアンビエントデータ社に悪影響を及ぼすような行為が見受けられた場合は、チャネルの公開を停止せざる得なくなります。節度をもってご利用ください。
また、実際に試してみて興味が出てきましたら、Ambientへユーザ登録を行い、チャネルIDやリードキー、ライトキーをご自身のものに修正して利用するのが良いでしょう。
Ambient

関連記事:
IchigoJam + MixJuiceで製作するIoTセンサ(公式Ambientサイト)
by ボクにもわかるIchigoJam用マイコンボード(筆者サイト)

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es