クリエイター手抜きプロジェクト[556]IoT obniz編 シリアル通信でデータを受信する/古籏一浩

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



今回は、obnizのシリアル通信機能(UART)を使って、データを受信します。シリアル通信は前回と同様に、obniz.uart0.start()を使います。接続する端子の場所も、前回と同じものとします。

なお、今回はパソコンだけでなく、IchigoLatteともシリアル通信を行います。シリアル通信ならIchigoLatteとやりとりする方が楽だからです。




まず、シリアル通信で送られてきたデータを受信しましょう。データが送られてくるとreceiveイベントが発生します。イベントハンドラを設定しておけば、データが受信された時に処理を行うことができます。

イベント発生時に呼び出される関数には、二つのパラメーターが渡されます。最初のパラメーターは、データの値が入った配列になります。受け取ったデータは配列の長さになります。

二番目のデータは、データをテキストにしたものになります。単純に文字としてデータを表示するなら、二番目のパラメーターの内容を出力すればよいことになります。

以下のプログラムは、シリアル通信で送られてきたデータを文字として表示します。

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@1.5.2/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("機器番号");
obniz.onconnect = function () {
var allText="";
obniz.uart0.start({tx:1, rx:0});
obniz.uart0.onreceive=function(data, text){
allText+=text;
obniz.display.clear();
obniz.display.print(allText);
};
}
</script>
</body>
</html>

受信したデータは一行しか表示されません。さすがにこれでは不便なので、送られてきたデータを解析して、複数行表示するようにしたものが以下のプログラムです。


<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@1.5.2/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("機器番号");
obniz.display.font(null, 10);
obniz.display.clear();
obniz.onconnect = function () {
obniz.uart0.start({tx:1, rx:0});
obniz.uart0.onreceive=function(data, text){
var allText="";
var y=0;
for(let i=0; i<data.length; i++){
if(data[i]==10){
allText="";
y=y+10;
if(y>60){ break; }
}
allText+=text.charAt(i);
obniz.display.pos(0,y);
obniz.display.print(allText);
}
obniz.switch.onchange=function(state){
obniz.display.clear();
}
};
}
</script>
</body>
</html>

なお、改行コードは10番にしていますが、場合によっては13番でないと期待通り動かないことがあります。その場合、 if(data[i]==10){ の10の数値を13に変更してください。

このプログラムを利用すると、シリアル経由で送られてきた文字を表示できます。そこで、次にIchigoLatteとつないでデータの送受信を行ってみます。

まず、obnizとIchigoLatteをつなぎます。obnizのio0とIchigoLatteのTXD、obnizのio1とIchigoLatteのRXD、そしてobnizのio2〜11のどれかとIchigoLatteのGNDを接続します。これで配線は完了です。

それではobnizのプログラムを実行してください。実行した後でIchigoLatteのシェルから、以下のようにコマンドを入力します。

echo IchigoLatte>uart

これでobnizの画面に、IchigoLatteの文字が表示されればOKです。表示されている内容を消去するには、obnizのスイッチを操作してください。

cat .>uartや、xxx>uartとしても、obnizの画面に文字が表示されます。ただ、長いデータを処理しようとすると、obniz側でエラーになることがあります。

IchigoLatteのシェルではなく、プログラムからキー入力を行ってシリアルに出力することもできます。この場合、以下のプログラムになります。IchigoLatteなのでシンプルなコードで実現できます。

function key(n){
log(chr(n));
uart(n);
}
function main(){
setTout(main,33);
}
setKprs(key);
main();


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

夜、仕事していたら北海道で地震とのニュース。北海道全体が停電するという事態に。IoTで使用しているsakuraインターネットのデータセンターが北海道なので、こういう事態が発生すると厳しい。

今のところ大丈夫みたいだけど、予期せぬトラブルなんて結構あるもの。トラブルに備えて分散したり、予備機を用意するとコストがかかる。

ところが、トラブルに見舞われたことがない人の場合、それは余計なコストだと言う。「そんなことはありえない」で、それが発生すると「想定外だった」で終わらせてしまう。

今回の北海道のように電気がなくなれば、テレビ、インターネット、電話、交通、決済などが全滅。コンビニも電気がなければアウト。いざという時には、電気を使わない現金は非常に強い。でも、現金廃止したい上層部の人は多いようだ。

それにしても、毎度NHKで巨大災害番組をやると、大きな災害が起こるので、あの番組を見たらいろいろ備えておこうと考えてしまう。

長野県は道路が数か所寸断されただけで駄目なので、そういう時に備えて一か月くらいの備蓄はあるけど、それよりひどくなる可能性もあるので、なるべく自給自足でどうにかしたいところ。

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

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

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

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

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

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