Hana道場【師範】のブログ

IchigoJamの徹底解説ブログ

【失敗は最高の学び】プログラミングのクラブ活動や授業で起こったトラブル&対処法まとめ【IchigoJam】【鯖江市】

f:id:hanadojo_sihan:20210223200406j:plain

福井県鯖江市では2018年度から全12小学校と全3中学校でIchigoJamを使ったプログラミングクラブ活動が行われています。

2019年度からは総合学習の時間に全小学4年生を対象に授業も行っています。

ITの担い手育成事業 | エル・コミュニティ

 

www.l-community.com

 

2018〜2021年度の3年間、私中村もメイン講師として色んな学校へ支援させていただきました。

 

その中でも多く起こったトラブルを【セッティング時】と【プログラミング時】に分けてご紹介します!

※ごく稀に起こるものも念の為記載しています。

※ハードのエラーも仮説を立てて解決する大切な学びです。

 

【セッティング時】

f:id:hanadojo_sihan:20210223193659j:plain

■モニターがつかない

最も多いのがIchigoJamの電源を入れてもモニターがつかないトラブル。

原因を見つけるのにまず確認して欲しいのがこれです。

 

IchigoJamに電源を入れた時、キーボードが光るかどうか 

f:id:hanadojo_sihan:20210223193703j:plain光らない(キーボードに給電されていない)場合

IchigoJamへの給電が行われていない可能性が高いです。

f:id:hanadojo_sihan:20210223193713j:plain(以下原因の多い順)

① microUSBケーブルの故障

最も多いです。真っ先に他のケーブルと変えてみましょう。

※ごく稀にmicroUSBケーブルのUSB端子をキーボード用の端子に繋いでいる場合もあり

IchigoJamのスイッチもしくはmicroUSB差し込み口の故障

IchigoJam TやUなど少し古いIchigoJamはスイッチが壊れやすいです。

microUSBの差し込み口は、力尽くで抜き差しをして壊れることもあります。

その場は交換して、後で修理しましょう。

③ 電源アダプタの故障

ほとんどない例ですが、①②でもない場合は電源アダプタの故障が考えられます。

④ コンセント自体の故障

理科室や家庭科室のコンセントは各テーブルにあります。

古い小学校ですと、テーブル単位で故障している時があります。

その場合は、テーブル全員が同じ症状になるので、テーブルを変えるか延長コードで対応しましょう。

 

光る(キーボードには給電されている)場合

IchigoJamには給電されているので、モニター側の不良です。

f:id:hanadojo_sihan:20210223193719j:plain(以下原因の多い順)

① ビデオ端子の差し込みが甘い

IchigoJamのビデオ端子を確認しましょう。控えめな子は奥まで差し込むのに躊躇していることが多いです。

② モニターの電源コードが繋がっていない

IchigoJamの接続に安心して、肝心のモニターの電源が繋がっていないことが多いです。

③ モニターの故障

最終的にはモニター自体の故障を疑ってください。

他の正常なモニターと交換してみましょう。

 

 

■キーボードが効かない(モニターはついている)

ごく稀にモニターはついているのに、キーボードが効かない時があります。

まずはキーボードのUSB端子をIchigoJamに抜き差しして再接続して、電源を入れ直してください。

これで大体は正常に動くようになります。

 

電源を入れ直しても効かない場合は、キーボード自体の故障の可能性があります。

交換して確かめてください。

 

【プログラミング時】

■画面が消える

プログラムが残っている可能性もあるので、落ち着いて対処しましょう。

(以下原因の多い順)

①F10キーを押してしまった

F10キーは画面切り替えのショートカットキーで、画面が真っ暗になります。

もう一度F10キーを押せば、復帰しプログラムも残っているので、画面が消えた時はまずF10キーを押しましょう。

②電源部分のmicroUSB端子の接触不良が起きた

こちらは野球ゲームのようなIchigoJam本体のボタンを押すようなゲームの時に起こりやすいです。IchigoJam本体を触る際にmicroUSB端子の接触不良などで切れることが稀にあります。

この場合はIchigoJamの電源が一瞬切れたので、SAVEしていないプログラムは消えます。

バックアップの大切さを知る経験だと思いましょう笑

③他の子がコンセントから抜いてしまった

片付けの時間に起こります。まだ打ち込んでいる子がいて、同じテーブルの子に間違って抜かれてしまう場合です。クラブ活動の時は一斉にSAVEする時間を設けましょう。

 

■Syntax error

基本的に単なる打ち間違いですが、特にわかりづらいエラーを紹介します。

 

①カナ入力の「、」や「ー」

コンマ「,」と読点「、」

マイナス「-」と伸ばし棒「ー」

が特にわかりずらいです。

エラーの行でカタカナが使われていたら、疑ってみましょう。

 

②エンターの押し忘れで、2つの行が1つの行として認識される

IchigoJamは1行32文字打ち込めます。

1行のプログラムがちょうど32文字の時、改行されているのでエンターを押さずそのまま次の行を打ってエラーになることがあります。

(ダメな例:ちょうど32文字の時)

f:id:hanadojo_sihan:20210223181208p:plain

一見、10行目と20行目がミスなく打ち込まれているように見えます。

しかし実行すると

f:id:hanadojo_sihan:20210223181213p:plain

「Syntax error in 10」と返ってきます。

ここでポイントなのが in 10と返ってきているのに20行目も表示されることにあります。IchigoJamのSyntax errorメッセージはエラーの1行分のみ返答があるので、2行分errorが返ってくることはありません。

(正しい例)

f:id:hanadojo_sihan:20210223181226p:plain

32文字ある10行目の最後でエンターを押すと、1行分空いて20行目を書くことになります。

Syntax errorで2行分のプログラムが返ってきた時は、エンターの押し忘れが原因です。

 

(ごく稀なパターン)

このミスに初めて遭遇した時は、???が並びました笑

f:id:hanadojo_sihan:20210223182415p:plain

LEDが1秒間隔でチカチカするプログラムです。

これも一見正しいプログラムのようですが、実行すると

f:id:hanadojo_sihan:20210223182421p:plain

なんとエンターで改行せずに、スペースを押すことで改行していたのです!

「改行=エンター」は大人の常識で、このミスをした子にはスペースがたくさん空いているように見えたのですね。

これ以降「行の最後にエンター。エンターを押すとプログラムを覚えてくれる」を強く言うようになりました笑

(このミスはHana道場含めて3回ほど経験があります。その内一回は「なわとびさっちゃん」プログラム内でIF文が絡んだ行で、見つけるのに苦労しました。。)

 

まとめ

冒頭にも書いたように、ハード(機材)もソフト(プログラム)もエラーの原因の仮説を立てて解決することが最高に実践的な学びです。

プログラムでいくら失敗しても怒られませんし、IchigoJamや周辺機器が壊れても安価で直せたり購入できます。

 

失敗を恐れず、歓迎する気持ちがプログラミング教育の心構えだと思います!

 

沖縄の哲真くん「Hanaわらび」オープンに向けて着々と準備中!

2020年11月に鯖江を訪れて約3ヶ月。哲真くんの想いと行動力がすごい!

ameblo.jp

 

福島の「寺子屋Hana」に続いてHanaのお仲間が増えて嬉しい限り!

 

学校や拠点でIchigoJamを教える際のトラブルシューティングとしてご利用ください!

 

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com

IchigoJamアバターづくり!エルチカ→川下りゲーム→ミニゲームズの次の提案

f:id:hanadojo_sihan:20210124212927j:plain

①エルチカでコンピューターとの会話を楽しみ、②川下りゲームでプログラムを楽しみ、③ミニゲームズで一通りの動作に慣れ親しんだあとに、④としてのおすすめが「アバター(顔)づくり」

 

使うコマンドは、ゲームづくりには欠かせないLOCATE(LC)とPRINT(?)の2つだけ!写経だけでなく、自分のアイデアをプログラムで実装する経験を④番目としていかがでしょうか?

 

↑小学2年生も楽しそうに顔を作っていました^^

途中、眉毛が迷子?になり変な位置に表示されましたが、大笑いしていました。

失敗も楽しい「アバター(顔)づくり」をやってみましょう!

 

<教育的効果>
◆座標の考え方の習得
◆試行錯誤しながら自分のアイデアを実装する「プログラミング思考」

 

0. 画面の大きさを知ろう!

CLSで一旦画面を消して、Aという文字がヨコに何文字打てるか数えてみましょう!

タテは「1エンター、2エンター、3エンター、...」と打っていくと数えやすいです。

 

1.IchigoJamの画面について

f:id:hanadojo_sihan:20210124212928p:plain

ヨコは0〜31の32マス、タテは0〜23の24マスあります。

LC ヨコ,タテ 表示する位置を決める

 

2.左側の目を表示(チュートリアル

10 LC 13,5
20 ?"o"
20行目のoは好きに選んでもらいましょう。
 
3.右側の目を表示(チュートリアル
ヨコが17,タテが5の位置に目を表示してみようと問題を出してみましょう。
(答え)
30 LC 17,5
40 ?"o"
これでなんとなくLCと?の使い方が理解できます。
 
4.画面をきれいにしよう
プログラムで画面がゴチャゴチャしてきたので、CLS(クリアスクリーン)を加えましょう。
5 CLS
 
5.好きに鼻や口、眉毛などつくってみよう!
キャラクター表を渡して、好きにプログラムしてもらいましょう。
試行錯誤こそプログラミング教育!
(師範作アバター

f:id:hanadojo_sihan:20210124213908p:plain

髪の毛や舌など追加してもいいかも!
ここで一旦アバターづくりは終了。見せ合いっこしましょう。
 
6.瞬きアニメーションにチャレンジ!!(ステップアップ)
500 WAIT60
510 LC 13,5
520 ?"-"
530 LC 17,5
540 ?"-" 
550 WAIT60
560 GOTO10
 
500行目が目が開いている時間
550行目が目を閉じている時間
自由に変えてもらいましょう!!
 
RND(数)  0〜数-1の中からランダムに返す
 
500 WAIT RND(120)+180
3秒(180)は必ず目が開いているようにしています。 
 
目が開いてる時間がランダムになってよりリアルに!!
 
7.その他アニメーションにチャレンジ!!
時々セリフを話す(表示)ようにしたり、舌を出したり、ウインクしたり。
子どもたちのアイデアを引き出しましょう!
 
 
 
みんなでやると十人十色の表情が出来上がって 盛り上がります!
コンテスト形式でやってみるとイベントにもなっていいかもしれませんね。
 
「アイデア→試行錯誤→実装」が身につくとより主体的な学びに繋がります!
 
-------------------
 
<追記>2021.1.25
早速ブログを書いて次の日に鯖江の小学校のクラブでやってきました!
(20人、小学4年生〜6年生、45分)
 
ゆたかな表情でいっぱい^^

f:id:hanadojo_sihan:20210125181454j:plain

f:id:hanadojo_sihan:20210125181515j:plain

f:id:hanadojo_sihan:20210125181519j:plain

f:id:hanadojo_sihan:20210125181525j:plain

6番の瞬きプログラムにも挑戦!!
 
 
 
 
座標の感覚もつかめていいですね。
ぜひやってみてください! 
 

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com 

楽しく二進法入門!Hana道場発のLEDサイコロ基板がUpverter公式Twitterで紹介されました。

Hana道場発の楽しく二進法が学べるキット「LEDサイコロ基板」をご紹介!

 

商品ページ:https://hanadojo.official.ec/items/24804122

はんだ付け方法:http://hanadojo.sblo.jp/article/186826146.html

 

 

 ↑僕が初めて基板設計をした作品がこのLEDサイコロ基板(基板データ

無料・web上で基板設計ができるサービスUpverterの公式アカウントで紹介もされました。

IchigoJamに接続し、LEDをサイコロの目の配置で光らせます。

 

(接続)

f:id:hanadojo_sihan:20201212200450j:plain

(6の目)明るい場所

f:id:hanadojo_sihan:20201212200550j:plain

(1の目)暗い場所

f:id:hanadojo_sihan:20201212200724j:plain

 

LEDはそれぞれIchigoJamのOUT1〜7につながっています。

f:id:hanadojo_sihan:20201212201033p:plain

1の目を光らせる時はこのように書きます。

OUT 4,1

OUT4をオン(1)

簡単ですね。

しかし、サイコロ6の目はどうなるでしょう?

OUT1,1:OUT2,1:OUT3,1:OUT5,1:OUT6,1:OUT7,1

サイコロの6の目を再現するには少々長くなりますね。

 

ここで登場するのが二進法です。

(この基板は二進法を楽しく学ぶためにつくりました)

二進法は、0と1の二つの数だけで全ての数を表現します。

 

(ただ、0と1だけでは桁が増えすぎて人間には分かりづらいので、普段は十進法0〜9の十個の数で表現しています)

 

二進法を使うとサイコロ6の目に光らせるには下のようになります。

OUT `1110111

f:id:hanadojo_sihan:20201212202125p:plain

IchigoJamOUTポート1,2,3,5,6,7をオン(1)、4をオフ(0)にしています。

 

これでも相当短くなりましたが、この二進法を十進法に変換するとより短くなります。

OUT 119

f:id:hanadojo_sihan:20201212200550j:plain

たった「OUT119」だけで6つのLEDが同時に制御されました!

 

個別に6つ制御

OUT1,1:OUT2,1:OUT3,1:OUT5,1:OUT6,1:OUT7,1
二進法で同時に6つ制御
OUT `1110111
十進法で同時に6つ制御
OUT 119
 

 

各サイコロの目の十進法への変換はこんな感じです。

(累乗のわかる人向け)

f:id:hanadojo_sihan:20201212201049p:plain

 

(累乗がわからない小学生向け)

光らせたいLEDに書いてある数字を足せばOK!

f:id:hanadojo_sihan:20201212204254p:plain

例)サイコロ4の目の時

1+4+16+64 = 85

 

(ランダムにサイコロを振るプログラム)

10 LET[0],8,20,28,85,93,119
20 OUT [RND(6)]

 

(音と光の演出付き)

10 LET[0],8,20,28,85,93,119
20 OUT [RND(6)]

30 BEEP RND(100)
40 WAIT 3
50 GOTO20
escでサイコロの目を決定します。
WAITを長くして目押しできるようにしても面白い?
 
LEDサイコロ基板で楽しく二進法を学びましょう!!

 

<やってみよう>

・LED7つ全てを十進法で光らせてみよう!

・LED7つ全てを消してみよう!

・スゴロクを作ってみよう!

 

ーーーーーーー

(補足)

ロボット(カムロボなど)のモーターを2つ同時に制御するのに十進法表現がよく使われます。

valed.press

<OUT2とOUT5をオン>

◆二進法の場合

OUT `10010

◆十進法の場合

2^4 + 2^1 = 16+2 = 18

OUT 18

 

<OUT1とOUT6をオン>

◆二進法の場合

OUT `100001

◆十進法の場合

2^5 + 2^0 = 32+1 = 33

OUT 33

 

OUT18やOUT33の謎が解けましたね!

 

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com

 

IchigoJamとMixJuiceを「SLEEP」して超省電力のIoTをつくる【IoTインターホン続編】

f:id:hanadojo_sihan:20201030124715j:plain

前回は自宅のインターホン(呼び鈴)をIoT化させました。hanadojo-sihan.hatenablog.com

 

↑のブログでは、IchigoJamのみSLEEPにしていますが、MixJuice自体もSLEEPにする方法を見つけました。

<参考記事>

IchigoJam + MixJuiceで製作するIoTセンサ – Ambient

 

今回はIchigoJamとMixJuice両方をSLEEPさせて、「超省電力IoT」に挑戦します!

 

 

【接続】

f:id:hanadojo_sihan:20201030131517j:plain

MixJuiceのCN4-2(RST)IchigoJamのBTNをジャンパー線で接続。

 

今回はインターホン(呼び鈴)のIoTなので、ボタンが押されるとSLEEPから起きるようにしています。

 

BTNピンにはMixJuice(RST)からの線と、インターホンのボタンからの線、計2本挿さっています(2本挿すためにホッチキスの芯を使っています笑)

 

【プログラム】 

10 VIDEO 0
20 ?"MJ APS":IF INKEY()!=49 CONT
30 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ"
40 BEEP 20,90
50 ?"MJ SLEEP 0"
60 SLEEP

 30行目でLINEメッセージを送っています。

詳しくは<その1>ブログをご覧ください。

 

【プログラム解説】

10 VIDEO 0 ビデオ出力OFF
20 ?"MJ APS":IF INKEY()!=49 CONT ネットワークに再接続するまで待機
30 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ" LINEメッセージをIFTTTのWebhoocksに送る
40 BEEP 20,90 呼び鈴の音
50 ?"MJ SLEEP 0"
MixJuiceを無限にSLEEP
60 SLEEP IchigoJamをディープSLEEP

 

20行目:ネットワークに接続するまで待機しています。

MJ APS 
WiFiアクセスポイントへの接続を確認します。
戻り値が0の場合は未接続、1の場合は接続中です。

50行目:CN4-2(RST)がHIGHになる(ボタンが押される)までSLEEPします。

MJ SLEEP sec 
スリープ(節電モード)します。sec には 0-4000(秒) を指定できます。
(sec=0の場合) 無限にスリープします。
CN4-2(RST)をHIGHで復帰します。
(sec>0の場合) CN4-2(RST)とCN4-6(IO16)を接続してください。
sec秒後に復帰します。
 

60行目:IchigoJamをSLEEPさせます。

SLEEP
プログラムを休止する (ボタンを押すと起動し、LRUN0を実行する)

 

これでインターホン(ボタン)が押されると、SLEEPが解除されLINEにメッセージを送ります。

メッセージを送った後は、MixJuice→IchigoJamの順番にSLEEPさせます。

 

<注意>

モバイルバッテリーを電源として使用すると、消費電力が低すぎてモバイルバッテリー自体がスリープしてしまいます。

スリープさせない方法もあるようですが、単三電池を使えば問題なく動きました!

何ヶ月持つか実験中です!!

 

ご指摘・ご質問はTwitterからお願いします。

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com

 

IchigoJamで【IoTインターホン】をつくってみた!LINE連携シリーズ<その3>

f:id:hanadojo_sihan:20201019105827j:plain

IchigoJamでLINEを送るシリーズ<その3>では、実践編として「IoTインターホン(呼び鈴)」をご紹介!!

IchigoJamでLINEを送る方法 <その1>

IchigoJamで"UTF-8変換"してLINEを送る方法<その2>

今回挑戦したのはこちら↓

youtu.be

 

プログラムも接続方法もとてもシンプルなので、<その1>ブログを参考につくってみてください!!

 

【目次】

 

 

1. 必要なもの

(我が家の電池式呼び鈴は古くて検索しても見つかりませんでした)

 

2. 接続方法

今回IoT化したインターホン(呼び鈴)はこちら

f:id:hanadojo_sihan:20201019111007j:plain 

(1)カバーを開ける

f:id:hanadojo_sihan:20201019111214j:plain

2箇所ボタンに繋がる接点を発見!

この2箇所をIchigoJamのピンBTNとGNDにつなげばOK!

(2)ネジを外し、ジャンパー線に接続

f:id:hanadojo_sihan:20201019111423j:plain

銅線が鋼板とネジで留められていました!

銅線をそれぞれジャンパー線メスにねじ込みます。 

(3)IchigoJamに接続&テスト

f:id:hanadojo_sihan:20201019111615j:plain

ジャンパー線オスをIchigoJamのピンBTNとGNDにそれぞれ接続します。

10 ?BTN():WAIT3:CONT

のようなプログラムを実行し、実際にインターホンを押してみましょう!

インターホンを押すと1、押さないと0が返って来たら成功です。

 

3. プログラム概要

【プログラム】

10 VIDEO 0
20 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ"
30 BEEP20,90:WAIT60
40 SLEEP

0番にSAVEしましょう。IchigoJamのボタンを押しながら電源ONで0番のプログラムが自動実行します。

ver1.4以降なら、最初の行に「@ARUN」を入れるとボタンを押さなくても自動実行されます。

5 @ARUN

 

WiFi接続は1回接続すれば、次から自動で接続されます。

?"MJ APC SSID パスワード"

MixJuice参考サイト:準備・使い方 - イチゴジャム レシピ

 

インターホンを押してメッセージが送られてきたら成功です!

f:id:hanadojo_sihan:20201019162235j:plain

(メッセージを GUSET!! にした場合)

 

【プログラム解説】

10 VIDEO 0 画面表示を停止し処理高速化
20 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=メッセージ" IFTTTにパラメータvalue1を送信
30 BEEP20,90:WAIT60 ブザーを鳴らす
40 SLEEP スリープ状態にする

 

10行目:画面表示を停止すると、消費電力を抑え、処理も高速化されます。

VIDEO 数{,数2} 画面表示非表示を切り替える。0で画面表示を停止し処理高速化 

20行目<その1>ブログをご覧ください。

40行目:SLEEP状態にし、消費電力を抑えます。

SLEEP プログラムを休止する (ボタンを押すと起動し、LRUN0を実行する)

ボタン(インターホン)が押されると、0番のプログラムが自動実行されます。

 

そしてなんとSLEEP状態だとIchigoJam消費電力が1.2μA(0.0012 mA)まで下がるそうです!

IchigoJamを低電力で定期実行させる方法 - LPC810で1分定期WAKEUPするIoT! #maker #IoT #lpc1114 #lpc810 / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

IchigoJamで省エネIoT、動作周波数別消費電流とスリープモード #maker #IchigoJam #IoT / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

 

単三電池2本(2000mA)だと、約1666時間(約69日)使えます!

2ヶ月に1回交換でokですね。

ただ、MixJuiceもSLEEPにしないと省電力化したとは言えませんね。

後日やってみたのでご覧ください↓

hanadojo-sihan.hatenablog.com

 

 

古いインターホン(呼び鈴)だったら簡単に作れちゃう「IoTインターホン」

ぜひやってみてください!

 

質問などはTwitterからお願いします↓

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com

IchigoJamで"UTF-8変換"してLINEを送る方法<その2>【IchigoJam × MixJuice × IFTTT】

f:id:hanadojo_sihan:20201013065828j:plain

IchigoJamで文字列をUTF-8変換して、文字化けせずLINEにカタカナ(日本語)のメッセージを送るプログラムを紹介します!

IFTTT でLINEにメッセージを送る方法は<その1>のブログをご覧ください。

hanadojo-sihan.hatenablog.com

 

今回挑戦するのはこちら↓

 

IchigoJamBASICでUTF-8変換しています。

ご指摘があればTwitterからお願いいたします!

@shihan_hanadojo

twitter.com

【目次】

 

【プログラム】

5 CLS:POKE#1E03,1,34:INPUT S

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";

20 FOR I=0 TO LEN(S)-1

30 C=ASC(S+I):D=ASC(S+I+1)

40 IF C<160 ?STR$(S+I,1);:GOTO290

50 A=#82

60 IF C>176&&C<182 [I]=#A2+2*C%177

70 IF C>181&&C<192 [I]=#AB+2*C%182

80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196)

90 IF C>196&&C<202 [I]=#8A+C%197

100 IF C>201&&C<207 [I]=#8F+3*C%202

110 IF C>206&&C<212 [I]=#9E+C%207

120 IF C>211&&C<215 [I]=#A3+2*C%212

130 IF C>214&&C<220 [I]=#A9+C%215

140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83

150 IF D=223 [I]=[I]+2:F=2

160 IF C=220 [I]=#AF

170 IF C=166 [I]=#B2:A=#83

180 IF C=221 [I]=#B3

190 IF C>166&&C<172 [I]=#A1+2*C%167

200 IF C=172 [I]=#A3:A=#83

210 IF C=173 [I]=#A5:A=#83

220 IF C=174 [I]=#A7:A=#83

230 IF C=175 [I]=#83:A=#83

240 IF C=176 [I]=#BC:A=#83

250 IF C=164 [I]=#81:A=#80

260 IF C=161 [I]=#82:A=#80

270 ?"%E3%";HEX$(A);"%";HEX$([I]);

280 IF F I=I+1:F=0

290 NEXT

300 ?:LC0,10:?”>”;STR$(S):?

5,10,300行目はWebhoocksにHTTP通信してメッセージを送っている部分です。

<その1>で解説しています。

 

【実行画面】

?"ムカエニキテ

↓Enterを押すと

f:id:hanadojo_sihan:20201013072606p:plain

文字化けせず、ちゃんと日本語が送れました!

 

【プログラム解説】

①文字列入力、HTTP通信(GETメソッド)

5 CLS:POKE#1E03,1,34:INPUT S

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";

<その1>を参照してください。

 

②文字列のUTF-8変換

UTF-8変換サイトで変換(エンコード)の実験をしてみましょう。

<変換例>

ア→%E3%82%A2 イ→%E3%82%A4 ウ→%E3%82%A6

カ→%E3%82%AB ガ→%E3%82%AC キ→%E3%82%AD

ハ→%E3%83%8F バ→%E3%83%90 パ→%E3%83%91 ヒ→%E3%83%92

法則1:16進数2桁で表記
法則2:小文字(ァィゥェォ)のある行(ア行、ヤ行)は2飛ばし
法則3:濁点がある行(カ行、サ行、タ行)も2飛ばし
法則4:濁点+半濁点があるハ行は3飛ばし
法則5:その他の行(ナ行、マ行、ラ行)は1飛ばし
補足:「つ」だけ濁点+小文字がある。句読点や「ー」などは個別で設定。「ダ」から2つ目の値が#83になる。
 
<値の呼び方>本ブログの場合
ア → %E3%82%A2
16進数822つ目の値A23つ目の値と呼ぶことにします。

 

20 FOR I=0 TO LEN(S)-1  文字列の長さ分くりかえし

30 C=ASC(S+I):D=ASC(S+I+1) 変数Cは現在の文字のコード、変数Dは次の文字のコード

40 IF C<160 ?STR$(S+I,1);:GOTO290 カナ以外の文字はUTF-8変換する必要なし

50 A=#82 2つ目の値

60 IF C>176&&C<182 [I]=#A2+2*C%177 ア行の3つ目の値を配列に代入

70 IF C>181&&C<192 [I]=#AB+2*C%182 カ行、サ行の3つ目の値を配列に代入

80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196) タ行の3つ目の値を配列に代入(「ダ」以降、2つ目の値が#83になる)

90 IF C>196&&C<202 [I]=#8A+C%197 ナ行

100 IF C>201&&C<207 [I]=#8F+3*C%202 ハ行

110 IF C>206&&C<212 [I]=#9E+C%207 マ行

120 IF C>211&&C<215 [I]=#A3+2*C%212 ヤ行

130 IF C>214&&C<220 [I]=#A9+C%215 ラ行

140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83 濁点の場合、3つ目の値を1増やす

150 IF D=223 [I]=[I]+2:F=1 半濁点の場合、3つ目の値を2増やす

160 IF C=220 [I]=#AF 「ワ」

170 IF C=166 [I]=#B2:A=#83 「ヲ」

180 IF C=221 [I]=#B3 「ン」

190 IF C>166&&C<172 [I]=#A1+2*C%167 小文字のア行

200 IF C=172 [I]=#A3:A=#83 小文字の「ヤ」

210 IF C=173 [I]=#A5:A=#83 小文字の「ユ」

220 IF C=174 [I]=#A7:A=#83 小文字の「ヨ」

230 IF C=175 [I]=#83:A=#83 小文字の「ツ」

240 IF C=176 [I]=#BC:A=#83 「ー」

250 IF C=164 [I]=#81:A=#80 「、」

260 IF C=161 [I]=#82:A=#80 「。」

270 ?"%E3%";HEX$(A);"%";HEX$([I]); URLにUTF-8変換した文字列を付加

280 IF F I=I+1:F=0 濁点、半濁点の場合は1文字飛ばす

290 NEXT 文字列全て付加するまでくりかえし

 

IchigoJamのカナ表記で気をつける必要があるのは、濁点と半濁点です。

f:id:hanadojo_sihan:20201013084910p:plain

「ガ」で1文字ではなく、「カ」と「゛」の2文字使用しています(半濁点も同様)。

 

濁点「゛」の文字コードは222、半濁点「゜」の文字コードは223です。

<濁点と半濁点の処理>

30行目:変数Dで常に次の文字に、濁点と半濁点がないか調べる

140行目:もし 次の文字が濁点なら 現在のUTF-8の値に1増やす(ダだけ2つ目の値に影響あり)

150行目:もし 次の文字が半濁点なら 現在のUTF-8の値に2増やす

280行目:もし 次の文字が濁点or半濁点なら それを飛ばして次の文字へ

例えば

「カ゛」なら「カ」の3つ目の値に1増やして(ガの値にして)、次の文字「゛」は飛ばします。

「ハ゜」なら「ハ」の3つ目の値に2増やして(パの値にして)、次の文字「゜」は飛ばします。

 

プログラムっぽい処理はそれだけで、その他の文字のUTF-8変換はゴリ押しです!

 

③送信した文字列の表示(おまけのチャットっぽさ)

300 ?:LC0,10:?”>”;STR$(S):? 

 

★完成★

音やチャットっぽさはご自由に演出してください。

 

<その3>インターン(呼び鈴)を押すとLINEが届く「IoTインターホン」の紹介もあります。

hanadojo-sihan.hatenablog.com

 

IchigoSodaでWiFi環境のない場所でもLINEを送れるサービスを実装中のHana道場インターン生がいます。

しかもGPSで自分の位置情報も送れちゃう!?

完成をお楽しみに。

 

 

何かエラーや文字化けがありましたら、Twitterにてご指摘ください!

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com 

IchigoJamでLINEを送る方法 <その1>【IchigoJam × MixJuice × IFTTT】

f:id:hanadojo_sihan:20201013010949j:plain

IchigoJam × MixJuice × IFTTT でLINEを送る方法をご紹介します。

IchigoJamBASICのみのプログラムでLINEが送れます!! 

ただ、カタカナ(日本語)で送るにはUTF-8に変換するプログラムをBASICで書く必要があります。そちらは<その2>のブログで紹介します。

hanadojo-sihan.hatenablog.com

 

<その3>では自宅のインターホン(呼び鈴)をIoT化しています。

hanadojo-sihan.hatenablog.com

 

 

今回はIFTTTを使って、IchigoJamからLINEでメッセージを送る方法を紹介!!

 

【目次】

 

1. 必要なもの

【一覧】

【概要】

f:id:hanadojo_sihan:20201012223704j:plain

IFTTTは複数のwebサービスを連携させるサービスです。

さまざまなサービスが連携できる「IFTTT(イフト)」の使い方 (1/3):IFTTT入門 - @IT

今回は「Webhoocks」と「LINE」を連携させます。

(IFTTTで連携させて新たにできたサービスを「アプレット(Applet)」と言います)

WebhoocksにMixJuiceで通信することが「トリガー(引き金)」となり、LINEにメッセージを送ります。メッセージはMixJuiceからGETメソッドのパラメータとして送信します。

 

2. IFTTTの手順

2-1 アカウント作成

IFTTTからアカウントを作成しましょう。

 

2-2 Applets(サービス連携)をつくる

(1)ホーム画面から「Create」→「Applets」を選択

f:id:hanadojo_sihan:20201012230220p:plain

(2)「If This」を選択

トリガーとなる「Webhoocks」を登録していきます。

f:id:hanadojo_sihan:20201012230224p:plain

(3)webと検索し「Webhoocks」を選択

f:id:hanadojo_sihan:20201012230229p:plain

(4)「Receive a Web request」を選択

f:id:hanadojo_sihan:20201012230236p:plain

(5)「Event Name」を決め「Create trigger」を選択

※今回のブログではEvent Nameを「test」にしています。

f:id:hanadojo_sihan:20201012230243p:plain

(6)「Then That」を選択

最終的に実行するサービスであるLINEを登録していきます。

f:id:hanadojo_sihan:20201012230249p:plain

(7)LINEと検索し「LINE」を選択

f:id:hanadojo_sihan:20201012230254p:plain

(8)「Send messagae」を選択

f:id:hanadojo_sihan:20201012230259p:plain

(9)「Continue」を選択

f:id:hanadojo_sihan:20201012230304p:plain

(10)「Applet Title」を決め「Finish」を選択

はじめから入力されているタイトルでいいと思います。

f:id:hanadojo_sihan:20201012230311p:plain

2-3 個別設定① - LINE -

(1)LINEのアイコンを選択

f:id:hanadojo_sihan:20201012230318p:plain

(2)「Connect」を選択

f:id:hanadojo_sihan:20201012230322p:plain

(3)IFTTTとLINEの連携にすることを同意する

f:id:hanadojo_sihan:20201012230329p:plain

下のようなメッセージがLINEに届いたらOKです。

f:id:hanadojo_sihan:20201012230336j:plain

 

2-4 Appletの設定

(1)ホーム画面から作成したAppletを選択

f:id:hanadojo_sihan:20201012230344p:plain

(2)「Connect」を選択

f:id:hanadojo_sihan:20201012230349p:plain

(3)「Settings」を選択

f:id:hanadojo_sihan:20201012230355p:plain

(4)下記画像のように設定

f:id:hanadojo_sihan:20201012230401p:plain

 

2-5 個別設定② - Webhoocks -

(1)Webhoocksのアイコンを選択

f:id:hanadojo_sihan:20201012230407p:plain

(2)「Documentation」を選択

f:id:hanadojo_sihan:20201012230412p:plain

(3)Appletが正常に作動するかテスト

f:id:hanadojo_sihan:20201012230416p:plain

{event}にWebhoockのイベント名、value1にLINEに送る文字列を入れましょう

f:id:hanadojo_sihan:20201012230424p:plain

試しに「hello」と送ってみましょう。

「Test It」を選択し、LINEにメッセージが届けばAppletの作成成功です!!

 

赤枠で囲んだURLにMixJuiceで通信することになります。

メモしておきましょう。

 

3. プログラム概要

【プログラム】

5 CLS:POKE#1E03,1,34:INPUT S

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";

20 FOR I=0 TO LEN(S)-1

30 ?STR$(S+I,1);

40 NEXT

50 ?:LC 0,10:?”>”;STR$(S):?

2-5(3) を見て、イベント名keyを入力しましょう。

【実行画面】

?
?に続けて"メッセージを打ち込んでエンターでLINEに送信されます。
?"Hello!
LINEに「Hello!」とメッセージが届いたら成功です!!
エラーコードが返ってきたら、10行目のURLの打ち間違いの可能性があります。
 

【プログラム解説】

5 CLS:POKE#1E03,1,34:INPUT S 文字列(メッセージ)を変数Sに入力

10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1="; Webhoocksにvalue1のパラメータをGETメソッドで送信

20 FOR I=0 TO LEN(S)-1 文字列(メッセージ)の長さ分くりかえし

30 ?STR$(S+I,1); URLに文字列(メッセージ)を1文字ずつ付加する

40 NEXT 文字列(メッセージ)全て付加するまでくりかえし

50 ?:LC 0,10:?”>”;STR$(S):? シリアル通信+送信した文字列(メッセージ)を表示

5行目:INPUT命令で変数Sに文字列を代入する特別な方法を使用しています。

 
10行目2-5(3) を見て、イベント名とkeyを入力しましょう。
URLの最後に ?変数名=値 を付加することで送信することができます。
には文字列(メッセージ)が入るので、20行目以降で1文字づつ付加していきます。
 
20行目:変数Sに代入された文字列の長さ分くりかえす
LEN("文字列") 文字列の長さ(文字数)を返す <レングス>

30行目:変数Sに代入された文字列を1文字づつPRINT出力

STR$("文字列",数) PRINT内で文字列を返す。数で返す文字数を決める。<ストリング>

 

UARTコマンドを使えば、例えば「UART9」で画面表示だけOFF(シリアル出力はON)にできます。詳しくは https://fukuno.jig.jp/2689

 

4. 補足

最初にも書きましたが、カタカナ(日本語)を送る場合は、メッセージをUTF-8に変換して送る必要があります。

UTF-8に変換して送信するIchigoJamプログラムはできていますが、長くなったので、<その2>として記事を分けようと思います。

 

【連載記事一覧】

 

<その2>IchigoJamでUTF-8変換して日本語をLINEで送る方法 

<その3>呼び鈴を押すとLINEが届く「IoT呼び鈴」の作り方

<その4>SLEEP機能で「超省電力IoT」の作り方

 

CC BY Hana道場師範 / @shihan_hanadojo

twitter.com