便利なRunkit

Runkitは無料で利用できるNodejs実行サービスです。ブラウザからNodejsを書いてすぐに実行することができます。また、専用のURLを発行することができて、APIのようなものもすぐに作成することができます。
そのため、すぐにNode.js+obnizを試したいときや,REST APIの一部としてobnizを使いたいときなどにおすすめです。

まずはrunkitで動かしてみる

RunkitではRunkit上で書いたNodejsプログラムをホームページに埋め込むことができます。以下も組み込まれたRunkitでこのホームページ上から編集と実行ができます。

// Runkit Example

const Obniz = require("obniz");
const yourObnizId = "OBNIZ\_ID\_HERE";  // write your obniz id

let obniz = new Obniz(yourObnizId);

let connected = await obniz.connectWait({timeout:10});

if(connected){
  obniz.display.clear();
  obniz.display.print("Hello obniz!");

  await obniz.wait(1000);
  obniz.close();
}

試しに動かしてみましょう。OBNIZ_ID_HEREの部分に自分のobniz idを入れます。
上のコードの中のOBNIZ_ID_HEREをクリックして書き換えてください。
たとえば.const yourObnizId = "1234-5678";のようになります。

書き終わったら,右下の緑のrunボタンを押して実行してみましょう
runボタンの横にrunningと表示され,手元のobnizに1秒間だけ"Hello obniz!"と表示されれば成功です。

サーバーレスで動かすときのコードについて

runkitやAWS Lambdaのようなサーバーレスでobnizを動かす場合,
HTMLでobnizを使うときとほぼ同じ形でプログラムを書くことができますが,
少しだけ変えると便利な点があります。obnizへの接続と切断の部分です.

  • 接続部分について

HTMLやNode.jsで書いた場合,接続するまで待つ ということができました.
しかし,サーバーレスの場合,レスポンスをすぐに帰さないといけないことが多いため,obnizの接続にタイムアウトを設定する必要が出てきます.

そのため,obniz.onconnect = function(){}の書き方ではなく,let connected = await obniz.connectWait({timeout:10})のように書くようにしましょう.
これは,10秒間だけobnizの接続にチャレンジし,接続できたかどうかをconnected変数に入れる処理です.

その後,if文でconnectedを判定し,接続できていれば処理を開始するようにしましょう.

  • 切断部分について

HTMLで実行するときはブラウザを閉じたら終了します.
Node.jsで実行する場合はアプリを終了させたら接続も切断されます.
そのため,あまり接続について意識することなく自然と対応できています.

しかし,サーバーレスではプログラムの終了タイミングをこちらで指定することができない場合が多いです.

そのようないつ切れるかわからないという状態は困ってしまうので,きちんとobniz.close();を書いて明示的に切断をする必要があります.
また,それだけだと,1瞬つながってすぐ切れてしまい,ディスプレイに表示されているものを読む時間がないので,await obniz.wait(1000);で待ち時間を入れるようにしましょう

Runkit上の自分のアカウントで動かす

先程,このページ内のrunボタンを押して実行しましたが,自分で色々なコードを書くために,
runkit上で書いてみましょう

// Runkit Example

const Obniz = require("obniz"); const yourObnizId = "OBNIZ\_ID\_HERE"; // write your obniz id

let obniz = new Obniz(yourObnizId);

let connected = await obniz.connectWait({timeout:10});

if(connected){ obniz.display.clear(); obniz.display.print("Hello obniz!");

await obniz.wait(1000); obniz.close(); }

まず,runkitを開きます
ログインしていない場合は右上のSign in よりログインしましょう.

ログインが終わるとコードを書くことができる画面になります.

ここにそのままコードを書いて,実行することができます.

先程と同じこのコードをコピーして,runkit上で実行してみましょう

同じようにHello obniz!が表示されたでしょうか.
2回目以降実行する場合はrunボタンの代わりに右の方にリトライボタンが出てきますので,
そちらを押すことで実行できます.

LEDを光らせっぱなしにする

さて,今度はサーバーレスを使ってLEDを光らせてみましょう.
LEDを0番ピンと1番ピンにつないだ場合,パーツのLEDを使って次のように書くことができます

// Runkit Example

const Obniz = require("obniz");
const yourObnizId = "OBNIZ\_ID\_HERE";  // write your obniz id

let obniz = new Obniz(yourObnizId);

let connected = await obniz.connectWait({timeout:10});

if(connected){
  obniz.display.clear();
  obniz.display.print("Hello obniz!");

  await obniz.wait(1000);
  obniz.close();
}

これで1秒間LEDをつけてその後消えるコードになりました.
実行してみましょう.きちんと動きましたか?

さて,1秒だけでなく,ずっと光らせたいときもありますよね
その場合はどうしたらいいでしょうか.

obnizにはresetOnDisconnect関数があります.
これは,通信が切れてもその状態を維持する という関数です.

こちらを,await obniz.wait(1000);の代わりに入れてみましょう

// Runkit Example

const Obniz = require("obniz");
const yourObnizId = "OBNIZ\_ID\_HERE";  // write your obniz id

let obniz = new Obniz(yourObnizId);

let connected = await obniz.connectWait({timeout:10});

if(connected){
     let led = obniz.wired("LED", {anode:0, cathode:1});
     led.on();

     obniz.resetOnDisconnect(false);
     obniz.close();
}

プログラムを実行してみましょう
LEDはずっと点きっぱなしになりましたか?

LEDを消したいときは,同じようにoffにするプログラムを書く必要があります.

// Runkit Example

const Obniz = require("obniz");
const yourObnizId = "OBNIZ\_ID\_HERE";  // write your obniz id

let obniz = new Obniz(yourObnizId);

let connected = await obniz.connectWait({timeout:10});

if(connected){
     let led = obniz.wired("LED", {anode:0, cathode:1});
     led.off();

     obniz.resetOnDisconnect(false);
     obniz.close();
}