クリエイター手抜きプロジェクト[473]IoT編 IchigoJam同士で通信する(2)/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,400文字)



今回もIchigoJamを2台使って通信をしてみます。前回は1ビット通信でしたが、今回は7ビット通信をやってみましょう。なお、通信を行うIchigoJamのバージョンは1.1とします。これ以前のバージョンではうまく動作しません(以前のバージョンなら4ビット通信に挑戦してみるとよいでしょう)。

まず、IchigoJam同士を接続します。前回はOUT1-IN1とGND-GNDでしたが、今回は以下のように配線します。

・送信側   ・受信側
OUT1 ─ IN1
OUT2 ─ IN2
OUT3 ─ IN3
OUT4 ─ IN4
OUT5 ─ OUT1
OUT6 ─ OUT2
LED  ─ OUT3
GND  ─ GND

IchigoJamではLEDをOUT7として使うことができます。このため、データを送信するとLEDが点灯したりしますが、まあこれはこれで動いているのが分かって面白いでしょう。





また、受信側のOUT1〜OUT3は以下のように設定しないと入力として使えません。通常は出力になっていますので、入力として使うOUTポートには最初に-1を指定しておく必要があります。

OUT 1,-1
OUT 2,-1
OUT 3,-1

それでは、まず受信側のプログラムを用意しましょう。

10 OUT 1,-1:OUT 2,-1:OUT 3,-1
20 FOR I=1 TO 7:PRINT IN(I);:NEXT
30 PRINT
40 GOTO 20

30行目が受信部分です。FOR命令は次に続く変数で指定した値から、TOの後に続く値までを繰り返します。繰り返される範囲はNEXT命令の手前までです。

この場合、指定した変数Iには1から7までの数値が入ります。PRINT IN(I)とすると繰り返されるたびに以下のように処理されていきます。

PRINT IN(1)
PRINT IN(2)
PRINT IN(3)
PRINT IN(4)
PRINT IN(5)
PRINT IN(6)
PRINT IN(7)

また、今回はPRINT IN(I);のように最後に;が付いています。通常、PRINT命令を実行すると最後に改行されてしまいます。;を付けると改行しなくなります。

今回は入力された値(0と1)をまとめて表示したいので、このようにしています。30行目はPRINT命令しかありませんが、このようにした場合は単純に改行だけが行われます。結果的に

0111001

のような、ビット列を示す文字が表示されるという具合です。これで受信側のプログラムはできたのでRUNとして実行させておきます。適当なビット列を示す0と1が表示されていくはずです。これで準備はOKです。

それでは今度は送信側です。まず、0を送ってみましょう。

OUT 0,0

受信側の一番左側の数字が0になったでしょうか。最初から0の場合は分からないので以下のように入力してみましょう。

OUT 0,1

1が表示されたでしょうか。同様に

OUT 2,1

など、OUT 1〜7までに0か1を送信してみましょう。無事に受信側に表示されればOKです。もし、期待通りに動かない場合は配線が間違っている可能性があります。正しく結線されているかどうか確認してください。

さて、OUT命令で1ビットごと出力できるのは分かりましたが、さすがに7ビット全部を入れると大変です。幸いなことに、IchigoJamではまとめて値を出力することができます。例えば、以下のようにすると98が対応するOUTポートにビット単位で送信されます。

OUT 98

つまり出力ポートを書かなければ、まとめて出力されるわけです。同様にIN()とすると、まとめて入力することができます。

ということで、受信側のプログラムを修正してビットではなく数値で表示するようにしてみましょう。プログラムは以下のようになります。PRINT IN()とするだけなので簡単です。

10 OUT 1,-1:OUT 2,-1:OUT 3,-1
20 PRINT IN()
30 GOTO 20

それではRUNとして実行させておきます。送信側で以下のように入力してみましょう。

OUT 16

どうでしょうか。無事に受信側に16と表示されたでしょうか。多分、期待通りには表示されなかった人もいるはずです。というのも、IchigoJamには、もうひとつOUT8というポートがあるため、そのデータもIN()の時に入ってしまうからです。

そこで、以下のようにしてOUT8のデータ(8ビット目)をなくします。(マスクする、という言い方になります。ちなみにビットマスクという用語になります)

10 OUT 1,-1:OUT 2,-1:OUT 3,-1
20 PRINT IN() & #7F
30 GOTO 20

& #7Fという謎の文字が出てきました。これについては、また後の機会に16進数の扱いということで説明したいと思います。今回(と次回)は、気にせずこのまま進みます。

それでは以下のようにして値を送ってみましょう。

OUT 125

どうでしょうか。今度は送信した値が表示されたはずです。これで0から127までの7ビットの値が送ることができるようになりました。ちなみに、以下のプログラムを動かせば0〜127までの値が送信されます。

10 FOR I=0 TO 127
20 OUT I
30 NEXT
40 GOTO 10

あまりに速すぎて分からない、という場合は以下の1行を追加してみて下さい。

25 WAIT 30

これで0.5秒ごとに送信されるようになります。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

新海誠監督の最新作「君の名は。」を見てきました。同じ長野県だからというのもあるし、出本は同じ雑誌(ソフトバンクが昔出版していたOh!mz/X)だからというのもあります(プレステのゲームであるグランツーリスモのプログラマ数人も同じOh!mz/Xから)。

以下は、ややネタバレになるので「君の名は。」を見に行く人は読まない方がいいかもしれません。

扱っている題材は「シン・ゴジラ」も「君の名は。」も同じようなものです。どちらも実際にあった(といっていいのか)ことがベースになっているようです。「シン・ゴジラ」は実質未解決なのに対して「君の名は。」は解決しているので、見終わった後は「君の名は。」の方がいいかと思います。

「君の名は。」はストーリーがうまくまとまって、綺麗に終わっているので「シン・ゴジラ」のように語られることはないでしょう。

主役の女の子が都会に憧れる気持ちは、田舎に住んでいるのでわかります。また、神事・伝承に関しての表現とシナリオへの絡め方は、上手いなあと感じました。

一回見ただけでもいい映画なんですが、全部知った後で二回目を見ると、よりSFとして納得しそう。でも、三回以上見ないとより深く知ることができないような気がするので、BluRay買ってじっくりスローモーションで見ようかと思ってます。

「君の名は。」のポスターや予告編動画は、相当なフェイクなのでそのイメージで見ると「え? こんな映画だったの」という事になります(見終わった後にポスターを見ると、また違うけど)。

それにしても大災害が、テレビなどを通して見ると(もしくは離れた地域では)美しく残酷なものになる……(絵が綺麗だから余計に)。

・IchigoLatteを楽しもう
http://www.openspc2.org/reibun/IchigoLatte/0.9.1/

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/

・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/