創って学ぼうプログラミング 第27回 IchigoJamとつなげてデータをやりとりしよう
○IchigoJamとは?
今回はマイクロビットのシリアル通信機能を使ってIchigoJam(イチゴジャム)とデータのやりとりを行ってみます。
IchigoJamはこども向けの小型コンピューターです。基本的にマイクロビットと同じカテゴリの商品になります。
・IchigoJam
https://ichigojam.net/
IchigoJamは完成品も販売されていますが、自分で組み立てることもできます。実際に自分のコンピューターを基板や抵抗などを組み立てることができるのはIchigoJamの大きな特長です。子供にはんだ付け?と思う人もいるかもしれませんが、実際に講座でやってみるとちゃんとはんだ付けして組み立てることができます。
また、IchigoJamは電源を入れるとすぐに起動します。プログラム開発で使うのは古い時代に使われていたBASIC言語です。ええ?BASIC!と思われる人もいるかもしれませんが、命令を入力するだけですぐに動き結果がわかるので便利です。また、プログラムで使える容量は約1KB(1024バイト弱)ですが、便利な命令のおかげで思った以上にいろいろなことが可能です。ver 1.3以降ではIoT命令も用意されており手軽にサーバーとの通信ができます。
○マイクロビットとIchigoJamをつなげる
まず、マイクロビットとIchigoJamをつなぎます。マイクロビットとIchigoJamはシリアル通信(UART)を使ってデータの送受信を行います。データの送受信を行うためには3本のケーブルが必要です。ワニ口クリップやジャンパーワイヤーなどを使って以下のようにつなぎます。IchigoJamには複数のGND端子がありますが、どこにつないでも構いません。
これで準備完了です。IchigoJamの電源は最初に入れておいても後から入れても大丈夫です。
IchigoJam側はデータを受信して表示するだけなら何もする必要はありません。もちろん、受信したデータを受け取って処理する場合にはプログラムを作成しなければなりません。
それではマイクロビット側のプログラムを作成します。ここでは「明るさ」を取得してIchigoJamに送信してみましょう。シリアル通信のカテゴリは高度なブロック内に用意されています。
使用するのは「シリアル通信 送信先を変更する」「シリアル通信 数値を文字で書き出す」と「シリアル通信 文字列を書き出す」の3つのブロックです。文字列を書き出すブロックは改行コードを送るために使用します。これはマイクロビットで用意されている「シリアル通信 1行書き出す」ブロックが期待通りの動作にならないためです。そこでIchigoJamの改行コードにあわせてデータを送るために「シリアル通信 文字列を書き出す」ブロックを使用します。
まず、通信速度などの設定はマイクロビット側で用意してあるものをそのまま使います。また、IchigoJam側でも同じ設定になっているため、図のように最初だけのブロック内に「シリアル通信 送信先を変更する」ブロックを入れます。
次に明るさを送信するブロックを図のように組み立てます。
書き出す文字列で\n\rを指定しています。これが、IchigoJamでの改行コードになります。ただし、ここで注意が必要です。この状態では改行コードである\n\rは期待通り送信されません。というのも、ブロック内では半角バックスラッシュはエスケープ文字ではなく、半角バックスラッシュとして扱われてしまうためです。JavaScriptコードエディタで表示すると以下のようになっています。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeNumber(input.lightLevel())
serial.writeString("\\n\\r")
basic.pause(2000)
})
そこでserial.writeString("\\n\\r")をserial.writeString("\n\r")に変更してからブロックエディタに戻ります。すると図のような状態になります。これでマイクロビットの送信側のプログラムはできあがりです。
JavaScriptコードの場合は以下のようになります。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeNumber(input.lightLevel())
serial.writeString("" + "\n\r")
basic.pause(2000)
})
プログラムをダウンロードしマイクロビットに転送して動作を確認します。マイクロビットから送られた明るさの数値がIchigoJamの画面に表示されるはずです。なお、明るさが0だとSyntax errorと表示されてしまいますが、ここでは気にする必要はありません。
データがうまく受信できない場合は、一度IchigoJamの電源を入れ直してみてください。また、ワニ口クリップなどで接続している場合、線がちゃんとつながっているか、他の線や端子に接触していないか確認してください。
あと、データを送信する際には一定のウェイト(待ち時間)を入れてください。ウェイトなしで送信するとIchigoJam側でデータを処理できないことがあります。
○IchigoJam側でプログラムを使って受信
今度はIchigoJamでプログラムを使ってデータを受信してみます。IchigoJamのBASICのリファレンスは以下のURLに用意されています。バージョンによって使用できる命令やパラメーターが若干異なります。使用しているIchigoJamのバージョンに合わせて確認してください。
・ver 1.2.2
https://ichigojam.net/IchigoJam-1.2.html
・ver 1.3
https://ichigojam.net/IchigoJam-1.3.html
ここではIchigoJamの電源を入れた直後の状態でプログラムを動かすことにします。この状態であれば以下のプログラムを入力することで、先ほど作成したマイクロビットから送られたデータを表示することができます。なお、IchigoJamでプログラムを入力する場合は10や30の行番号に続けてプログラムを入力したら最後にリターンキーを押してください。リターンキーを押さないとプログラムとして入りません。
10 K=INKEY()
20 IF K=0 THEN GOTO 10
30 PRINT CHR$(K);
40 GOTO 10
上記のプログラムを入力したらRUNと入力しリターンキーを押して下さい。すると画面にマイクロビットから送られた明るさの数値が表示されていきます。プログラムで受信しているので値が0でもSyntax errorの表示は出ません。
このプログラムは単純に受信したデータを表示しているだけなので、データを加工して処理する場合は使い物になりません。そこで今度はマイクロビットから送られたきたデータを数値として処理することにします。
今度はマイクロビット側のプログラムを少し変更します。IchigoJamで処理しやすいようにデータの区切りを,として送信します。ブロックを以下のように組み立てます。
JavaScriptコードの場合は以下のようになります。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeString("" + input.lightLevel())
serial.writeString(",")
basic.pause(2000)
})
先にマイクロビットに作成したプログラムを転送しておきます。ただし、この時点ではマイクロビットとIchigoJamをつながないでください。つないでしまうとIchigoJamでプログラムを入力できないためです。
準備ができたらIchigoJamでプログラムを作成します。まず、数値を入れる変数に0を入れておきます。送られてきた文字が0〜9の文字コードだった場合、変数の値を10倍してから送られてきたデータを足します。0の文字コードは48なので送られてきたデータから48を引き算してから足します。
IchigoJamのプログラムは以下のようになります。
10 D=0
20 K=INKEY()
30 IF K>47 AND K47 AND K47 AND K
今回はマイクロビットのシリアル通信機能を使ってIchigoJam(イチゴジャム)とデータのやりとりを行ってみます。
IchigoJamはこども向けの小型コンピューターです。基本的にマイクロビットと同じカテゴリの商品になります。
・IchigoJam
https://ichigojam.net/
IchigoJamは完成品も販売されていますが、自分で組み立てることもできます。実際に自分のコンピューターを基板や抵抗などを組み立てることができるのはIchigoJamの大きな特長です。子供にはんだ付け?と思う人もいるかもしれませんが、実際に講座でやってみるとちゃんとはんだ付けして組み立てることができます。
○マイクロビットとIchigoJamをつなげる
まず、マイクロビットとIchigoJamをつなぎます。マイクロビットとIchigoJamはシリアル通信(UART)を使ってデータの送受信を行います。データの送受信を行うためには3本のケーブルが必要です。ワニ口クリップやジャンパーワイヤーなどを使って以下のようにつなぎます。IchigoJamには複数のGND端子がありますが、どこにつないでも構いません。
これで準備完了です。IchigoJamの電源は最初に入れておいても後から入れても大丈夫です。
IchigoJam側はデータを受信して表示するだけなら何もする必要はありません。もちろん、受信したデータを受け取って処理する場合にはプログラムを作成しなければなりません。
それではマイクロビット側のプログラムを作成します。ここでは「明るさ」を取得してIchigoJamに送信してみましょう。シリアル通信のカテゴリは高度なブロック内に用意されています。
使用するのは「シリアル通信 送信先を変更する」「シリアル通信 数値を文字で書き出す」と「シリアル通信 文字列を書き出す」の3つのブロックです。文字列を書き出すブロックは改行コードを送るために使用します。これはマイクロビットで用意されている「シリアル通信 1行書き出す」ブロックが期待通りの動作にならないためです。そこでIchigoJamの改行コードにあわせてデータを送るために「シリアル通信 文字列を書き出す」ブロックを使用します。
まず、通信速度などの設定はマイクロビット側で用意してあるものをそのまま使います。また、IchigoJam側でも同じ設定になっているため、図のように最初だけのブロック内に「シリアル通信 送信先を変更する」ブロックを入れます。
次に明るさを送信するブロックを図のように組み立てます。
書き出す文字列で\n\rを指定しています。これが、IchigoJamでの改行コードになります。ただし、ここで注意が必要です。この状態では改行コードである\n\rは期待通り送信されません。というのも、ブロック内では半角バックスラッシュはエスケープ文字ではなく、半角バックスラッシュとして扱われてしまうためです。JavaScriptコードエディタで表示すると以下のようになっています。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeNumber(input.lightLevel())
serial.writeString("\\n\\r")
basic.pause(2000)
})
そこでserial.writeString("\\n\\r")をserial.writeString("\n\r")に変更してからブロックエディタに戻ります。すると図のような状態になります。これでマイクロビットの送信側のプログラムはできあがりです。
JavaScriptコードの場合は以下のようになります。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeNumber(input.lightLevel())
serial.writeString("" + "\n\r")
basic.pause(2000)
})
プログラムをダウンロードしマイクロビットに転送して動作を確認します。マイクロビットから送られた明るさの数値がIchigoJamの画面に表示されるはずです。なお、明るさが0だとSyntax errorと表示されてしまいますが、ここでは気にする必要はありません。
データがうまく受信できない場合は、一度IchigoJamの電源を入れ直してみてください。また、ワニ口クリップなどで接続している場合、線がちゃんとつながっているか、他の線や端子に接触していないか確認してください。
あと、データを送信する際には一定のウェイト(待ち時間)を入れてください。ウェイトなしで送信するとIchigoJam側でデータを処理できないことがあります。
○IchigoJam側でプログラムを使って受信
今度はIchigoJamでプログラムを使ってデータを受信してみます。IchigoJamのBASICのリファレンスは以下のURLに用意されています。バージョンによって使用できる命令やパラメーターが若干異なります。使用しているIchigoJamのバージョンに合わせて確認してください。
・ver 1.2.2
https://ichigojam.net/IchigoJam-1.2.html
・ver 1.3
https://ichigojam.net/IchigoJam-1.3.html
ここではIchigoJamの電源を入れた直後の状態でプログラムを動かすことにします。この状態であれば以下のプログラムを入力することで、先ほど作成したマイクロビットから送られたデータを表示することができます。なお、IchigoJamでプログラムを入力する場合は10や30の行番号に続けてプログラムを入力したら最後にリターンキーを押してください。リターンキーを押さないとプログラムとして入りません。
10 K=INKEY()
20 IF K=0 THEN GOTO 10
30 PRINT CHR$(K);
40 GOTO 10
上記のプログラムを入力したらRUNと入力しリターンキーを押して下さい。すると画面にマイクロビットから送られた明るさの数値が表示されていきます。プログラムで受信しているので値が0でもSyntax errorの表示は出ません。
このプログラムは単純に受信したデータを表示しているだけなので、データを加工して処理する場合は使い物になりません。そこで今度はマイクロビットから送られたきたデータを数値として処理することにします。
今度はマイクロビット側のプログラムを少し変更します。IchigoJamで処理しやすいようにデータの区切りを,として送信します。ブロックを以下のように組み立てます。
JavaScriptコードの場合は以下のようになります。
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeString("" + input.lightLevel())
serial.writeString(",")
basic.pause(2000)
})
先にマイクロビットに作成したプログラムを転送しておきます。ただし、この時点ではマイクロビットとIchigoJamをつながないでください。つないでしまうとIchigoJamでプログラムを入力できないためです。
準備ができたらIchigoJamでプログラムを作成します。まず、数値を入れる変数に0を入れておきます。送られてきた文字が0〜9の文字コードだった場合、変数の値を10倍してから送られてきたデータを足します。0の文字コードは48なので送られてきたデータから48を引き算してから足します。
IchigoJamのプログラムは以下のようになります。
10 D=0
20 K=INKEY()
30 IF K>47 AND K47 AND K47 AND K