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

投稿:  著者:  読了時間:11分(本文:約5,000文字)



今回は、obnizのシリアル通信機能(UART)を使って、文字や数値を送信してみます。シリアル通信なら、RS232Cでやりとりすることもできます。

古き良き時代のマシンでも、RS232Cポートとケーブルがあれば最新のobnizとやりとりができるわけです。これだけで、ネタを思いついてしまう人もいるかもしれません(古いマシンを活用できるぞ、と。どう活用するかはアイデア次第ですが)

まず、シリアル通信の前にやりとりする機器が必要です。ここではパソコン(Mac Pro)と接続することにします。USBシリアルモジュールでMacとobnizを接続しました。もちろん、Windowsでも構いません。

https://shopfusen.jimdo.com/ichigojam/usb-シリアルモジュール/





次にモジュールとobnizを接続します。TXDをobnizのio0に、RXDをobnizのio1につなぎます。GNDはobnizのio2〜io11の、いずれかあいている端子につなぎます。今回はGNDはio2に接続します。

つないだら、最初にobnizでシリアル通信設定を行います。これは、どの端子にTXD(送信)、RXD(受信)ケーブルがつながっているかを指定します。

設定はobniz.uart0.start()の最初のパラメーターに、JSON形式で指定します。txが送信、rxが受信になります。今回の場合はtxが1、rxが0なので、以下のように指定します。なお、接続モジュールによっては逆に設定しないといけないものもあるかもしれません(あったような気がします。なんとなく)。

obniz.uart0.start({tx:1, rx:0, gnd:2});

tx、rxオプション以外にも、いくつか用意されています。省略した場合、以下のように設定されます(これがデフォルト設定ということです)。

速度 115200bps
非同期
フローコントロールなし
8bit
パリティなし
1 ストップビット
5v push-pull drive
内部プルアップなし

設定できるオプションについては以下のページに記載されています。

https://obniz.io/doc/sdk/doc/uart

さて、設定が終わったら後は、データを送るだけです。

データの送信はobniz.uart0.send()を使います。send()のパラメーターにするデータを指定します。データは複数指定できないので注意が必要です。指定できるデータは文字列や数値、配列です。

まず、手軽なところで文字を送信してみましょう。以下のプログラムは、obnizでtest codeの文字をシリアルに送信します。

<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.7.0/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("機器番号");
obniz.onconnect = async function () {
obniz.uart0.start({tx:1, rx:0, gnd:2});
obniz.uart0.send("test code");
}
</script>
</body>
</html>

送信される文字のエンコードは、UTF-8になります。漢字データなどを送る場合は注意が必要です。SHIFT JISやEUCではありません。

send()に数値を指定した場合、そのままバイトデータとして送信されます。send(0x41)ならAの文字がシリアルに出力されます。以下のサンプルはA〜Zまでの文字をシリアルに出力します。

<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.7.0/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("機器番号");
obniz.onconnect = async function () {
obniz.uart0.start({tx:1, rx:0, gnd:2});
for(let i=0; i<26; i++){
obniz.uart0.send(0x41+i);
}
}
</script>
</body>
</html>

次に、数値を出力してみます。センサーからの値をそのままsend()に指定できればいいのですが、そのまま指定するとバイトデータとして出力されてしまいます。出力先で可読可能なテキストファイルに保存したい場合には、ちょっと不便です。センサーの値が50なら、50のテキストを出力してほしいところです。

このような場合は、toString()を使います。以下のプログラムは0〜99までの数値を文字列として出力します。また、数値の出力後には改行コードを入れています。

なお、受信側の改行コードが13でなく10(LF、UNIXの場合)には、send(13)でなくsend(10)としてください。改行コードがCR+LFならsend([13,10])を指定します。

<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.7.0/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<script>
var obniz = new Obniz("機器番号");
obniz.onconnect = async function () {
obniz.uart0.start({tx:1, rx:0, gnd:2});
obniz.uart0.send(13);
for(let i=0; i<100; i++){
var n=i.toString(10);
obniz.uart0.send(n);
obniz.uart0.send(13);
}
}
</script>
</body>
</html>

それでは次に、ブラウザ上のボタンが押されたら、シリアルに文字を出力してみます。朝食、昼食、夕食を示す英単語を示すボタンを用意しておきます。出力するデータはボタン内の文字としていますが、工夫すればどんな文字でも出力できます。

ボタンクリック時の処理ですが、jQueryライブラリを使えば簡単にできます。$()で対象となるボタンを指定し、click()で呼び出すイベントハンドラを指定するだけです。

<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.7.0/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<button id="mes1">breakfast</button>
<button id="mes2">lunch</button>
<button id="mes3">dinner</button>
<script>
var obniz = new Obniz("機器番号");
obniz.onconnect = function () {
obniz.uart0.start({tx:1, rx:0, gnd:2});
obniz.uart0.send(13);
$("#mes1,#mes2,#mes3").click(function(){
obniz.uart0.send(this.textContent);
obniz.uart0.send(13);
});
}
</script>
</body>
</html>

シリアル通信は送信するだけでなく受信もできます。次回はシリアルからの受信を行ってみます。


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

EUでも廃止方向のサマータイム。EUが廃止するのだから、日本では導入しないだろうと思うけど……

「ジュラシックパーク」ならぬ「ジェラシィパーク」……そこは嫉妬に狂った女性達が住む恐ろしい島だった。という三流映画ネタを思いついたけど、柴田編集長以外喜びそうもない映画になりそう。

さくらももこ「ちびまる子ちゃん」は連載一回目から読んでいた。ちびまる子ちゃんの本編ではなくて、単行本にちょろっと収録されていた「盲腸の朝」がいちばん面白かった。(アニメではアレンジされて放送)


・創って学ぼうプログラミング
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/