obnizでLチカしてみた

大阪IoT部所属の福岡オフィスの梶原です。(笑

最近話題の?IoTデバイスobnizを手にいれたので、軽くセットアップをしつつ、Lチカをさせてみたいと思います。

obnizとは

EaaS: Electronics as a Service です。 obnizはWifiを使ってobnizクラウドに常時接続します。 モーターやセンサーをobnizにつなぐだけで、あなたはどんな場所からでもすぐにクラウド経由で操作できるようになります。

https://obniz.io/

ほー、obnizがつながるwifi(ネット環境)さえあれば、どこからでも操作できるってことですね。 サイトをみると、スマートフォンを使った自動運転のデモなどもあり、超おもしろそうです。

必要なもの

  • obniz
  • microusbケーブルと電源(モバイルバッテリーでもOK!)
  • インターネットにつながるwifi (パスワード)
  • LED(青とかがおすすめ)

準備

wifi(ネット環境)のセットアップ

電源をいれると接続できるwifiの一覧が表示されるので、

左上のトグルスイッチをグリグリしながらパスワードを入れます。
(ここらへんは、ちょっと面倒なので、ファームウェアの更新で起動時にbluetoothが有効になって アプリから入力できるようになったらいいなーなんて、要望を書いておきます。)

ネットに接続できると2次元バーコードとシリアルナンバー(ObnizID)が表示されます。

やってみる

Hello World

おもむろに表示されるページ(https://obniz.io/)にアクセスして、「プログラムをする」をおしてエディタを立ち上げます。

obnizに表示されているシリアルナンバー(ObnizID)を入力すると

以下のサンプルコードが生成されてブラウザ上でエディタが開きます。

<html>
<head>
  <meta charset="utf-8">
  <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.15.2/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<div id="obniz-debug"></div>
<h1>obniz instant html</h1>
<button id="on">ON</button>
<button id="off">OFF</button>
<div id="print"></div>

<script>
var obniz = new Obniz("XXXX-XXXX"); <<=ここはシリアルナンバー(ObnizID)に書き換えてください
obniz.onconnect = async function () {
    
  var  led = obniz.wired("LED", { anode:0, cathode:1 } );

  obniz.display.clear();
  obniz.display.print("Hello World");

  obniz.switch.onchange = function(state) {
    $('#print').text(state);
    obniz.display.clear();
    obniz.display.print(state);
  }  

  $('#on').click(function () {
      led.on();
      obniz.display.clear();
      obniz.display.print("ON");
  });
  $('#off').click(function () {
      led.off();
      obniz.display.clear();
      obniz.display.print("OFF");
  });
}

</script>
</body>
</html>

「保存&開く」をクリックして、 手元のobnizを見てみると。

"Hello World"が表示されています。

いや、簡単っちゃ簡単ですが、この表示に行くまでに
ブラウザ ー> インターネット ー> obnizクラウド ー> インターネット ー> 手元のobniz
というルートを通っていると思うとなかなか灌漑深いです。

Lチカ

サンプルコードをおもむろにみると、LEDって書いてあります。 おもむろにそこらへんに落ちてるLEDをつなげてみます。

「保存&開く」をクリックして、 「ON」をクリックして

手元のobnizを見てみると。

光ってる

いや、そりゃそうでしょっちゃそうなんですが
ブラウザでポチ ー> インターネット ー> obnizクラウド ー> インターネット ー> 手元のobniz ー> LED点灯

というルートを通っていると思うとなかなか灌漑深いです。

いきおいでAWS Lambda

ここで終わると、Developers.IOっぽさがないので、おもむろにAWS LambdaでLチカしてみます

なお、すでに公式ドキュメントにAWS Labmdaでの使用方法が日本語で載っていました。
ここらへんの充実感がすばらしいです。

https://obniz.io/doc/lessons_lambda?iframe=true

ということで、本題と外れるので色々端折りますが、ObnizのLamba Layerをちゃっちゃと作成して便利に使います

ObnizLambdaLayerの作成

$ mkdir -p ObnizLambdaLayer/nodejs
$ cd ObnizLambdaLayer/nodejs
$ npm init -y
$ npm install obniz
$ cd ../
$ zip -r ../ObnizLambdaLayer.zip ./
$ cd ../
$ aws lambda publish-layer-version \
  --layer-name ObnizLambdaLayer \
  --compatible-runtimes nodejs8.10 \
  --zip-file fileb://ObnizLambdaLayer.zip

※50MBほどあるので、ネットワーク環境により一旦S3バケットに置く等してください

lambda関数の作成

ランタイムはNode.js 8.10 先ほど作成したLayerを追加します。

lambdaのコードは下記になります。

var Obniz = require("obniz");

exports.handler = function(event, context, callback) {
  var obniz = new Obniz("XXXX-XXXX"); <<=シリアルナンバー(ObnizID)は変更してください

  obniz.onconnect = async function(){

    var  led = obniz.wired("LED", { anode:0, cathode:1 } );

    obniz.display.clear();
    obniz.display.print("LED Blink!!!");
    led.blink();

    await obniz.wait(2000);

    obniz.close();

    var response = {
      statusCode: 200,
      body: "success"
    };
    callback(null, response);

  };
};

「テスト」実行して手元のobnizを見てみると。

チカチカしてますw

まとめ

obnizでは当然ながらLED以外にも接続可能なものはカメラや各種センサーまたモーター(1Aまで)が直結できるので本当に手軽にいろんな事ができそうです。 0からやろうとすると面倒な部分をかなりすっ飛ばせるので、PoCなど興味がある方は手に入れてみてください。

参考

obniz with AWS Lambda
https://obniz.io/doc/lessons_lambda?iframe=true

Lambda Layers をnode.js(SAM)で試してみる
https://qiita.com/monamu/items/96d63dd2151a8ab7e6cf