IoT初心者がobnizと戯れてみて、"簡単に"とは何かについて考えてみたメモ。
これはobniz Advent Calendar 201812日目の記事です。
はじめまして。
IoTデバイスを触ったり、回路作ったり自体が初めてのド素人です。
obnizのハンズオンに参加してJavaScriptSDKを使って"簡単に"LEDを光らせたりモーターを動かしたりができたので、調子に乗って自分で考えた機能を作ろうと思い立ったものの、いざやり始めてみたら壁に激突してしまいました。
その経験からobnizに限らず様々なIoTデバイスでよく謳われている"簡単に"とは何かを考えてみることにしました。
Advent Calendarでは比較的作ってみた系が多い中、チョット毛色の違う読み物的な記事かもしれません。
IoTド素人なので、認識などに間違いがあるかと思います。
認識違いなどがあれ是非教えてください。 ヨロシクオネガイシマス!
obniz, Arduino, RaspberryPiの違いについて考える

| デバイス | 特徴 |
|---|---|
| Raspberry Pi | |
| Arduino | |
| obniz |
Raspberry Piはもともと学生のための安価なコンピューターとして考案され、Arduinoは学生のためのハードウェアの試作の為のシンプルなツールとして考案されたそうです。
obnizはどちらかといえばArduinoに近い印象です。
そしてインターネットが必要という特徴から、IoTに特化したAPI・SDKを含めたツール群と言った感じでしょうか。
簡単とはなにか
Raspberry Pi、Arduino、obnizに限らず、多くの開発ボードが「簡単に」できるを謳っているように思います。
似ていると感じた、obniz / Arduino のそれぞれのWEBサイトに掲載されているコンセプトを見てみましょう。
obniz

Arduino

どちらも簡単に使えるよ的な事が書かれています。
コードで見る"簡単に"とはなにか
よくあるLEDを光らせるサンプルコードを比べてみます。 ※ obnizはJavaScriptSDKを使った場合で
obniz

const obniz = new Obniz("<OBNIZ_ID>"); obniz.onconnect = async function() { // LEDのアノードを0、カソードを1に接続 const led = obniz.wired("LED", {anode:0, cathode:1}); // LEDを点灯 led.on(); // LEDを消灯 led.off(); };
cf. obniz: Make everything online
Arduino

// LEDのアノードをデジタルピン13に接続 const int LED = 13; void setup() { // デジタルピンを出力に設定 pinMode(LED, OUTPUT); } void loop { // HIGHを出力してLEDを点ける digitalWrite(LED, HIGH); // LOWを出力してLEDを消す digitalWrite(LED, LOW); }
定番とも言えるLEDを点けるような処理でも、ArduinoではHIGH/LOWといった回路的な用語が使用されます。
対してobniz(JavaScriptSDK)はLEDキーワードでオブジェクトを作り、ON/OFFにするという直感的な感じです。
(GitHubで公開されているobnizのコードを追って見た感じだと、
obnizeの処理の裏側ではanodeに割り当てられたピンに対しwebsocketからIOをONにするiox.output(true)相当の命令が送られているようでした。)
ここからも Arduinoはハードウェアの学習に主眼が置かれており、ハードウェアの試作が"簡単に"であり、 obnizはIoTの製作に主眼が置かれており、ハードウェアを意識することなくIoTの製作が"簡単に"である。という思想が見てとれるのではないでしょうか。
"簡単に"が内包する問題
このようにobnizでは用意されたSDKを利用することでハードウェアを意識することなく、様々な機器をドキュメントにあるコードを参考に動作させることが出来ます。
例えばDCMotorであれば
cf. obniz: Make everything online
const obniz = new Obniz("<OBNIZ_ID>"); obniz.onconnect = async function() { const motor = obniz.wired("DCMotor", {forward:0, back:1}); motor.forward(); };
のように、たったこれだけの記述でDCMotorを動作させることが可能です。
forward、backで指定されたピンはioで5v push-pullに設定していることなどを知る必要もありません。
cf. obniz/parts/Moving/DCMotor at master · obniz/obniz · GitHub
距離センサ(HC-SR04)なら
cf. obniz: Make everything online
const obniz = new Obniz("<OBNIZ_ID>"); obniz.onconnect = async function() { const hcsr04 = obniz.wired("HC-SR04", {gnd:0, echo:1, trigger:2, vcc:3}); hcsr04.measure(function( distance ){ console.log("distance " + distance + " mm"); }); };
単にセンサーを動作させ値を取得することを目的とするなら、
割り当てているピンのgnd, echo, trigger, vccが何なのかも、センサーからどのように値を取っているのかも知る必要もありません。
cf. obniz/parts/DistanceSensor/HC-SR04 at master · obniz/obniz · GitHub
更に用意されているブロックプログラミングを利用すればJavaScriptのコードすら知る必要もありません。

簡単に実際のパーツを動かして試せる = IoTの実験に注力できる反面、ややこしい部分をSDKが良い感じにラップしているので回路的な事を学ぶ機会は少なくなるように感じます。
故に私のようなIoTド素人の場合、リファレンスに載っていないパーツを使って自分で考えたモノを作ろうとした時に、vccって何?gndって何?どのピンにどれを繋いでどう設定すればいいの?という壁に当たる事になるでしょう。(Pin Peripheralsのようなリファレンスもありますが、ド素人的には用語の意味を知っている事が前提のように感じました。)
Team obniz に期待したいこと
obnizならずっと"簡単に"。 とは現状、
- JavaScriptを知っていれば "簡単に" をIoTできる但し、リファレンスにあるパーツを使えば
- ブロックプログラミングを使えばJavaScriptを知らなくても "簡単に" に作ることができる。但し、登録されているパーツを使えば
- "簡単に" JavaScript SDKを使ってIoTなモノを作ることができる。但し、ある程度回路的な知識があれば
のような省略された但し書きの条件の上での"簡単に"ではないかと思います。
obnizはブロックプログラミングも用意されており、実際に動くモノを(リファレンスにあるパーツを使えば)"簡単に"作れ、成功体験を得られ、モチベーションを維持しやすい、という仕組みができていると思います。
なのでIoT初学者やプロトタイプ作り、教育の現場ではとても向いているのではないかと強く感じました。
一方、そこからリファレンスにないパーツを使ったりした独自の仕組みを作れるようになるステップアップの方法が"簡単"さを実現するために難しいくなっている気がします。回路的な知識を得ることができるようなコンテンツが用意されれば、よりobnizを選択する動機づけになるのではないかと感じました。
おまけ

作ってみたが力不足で出来なかったので、イラストを描いてみました!
[参考]
- obniz: Make everything online
- root - obniz
- GitHub - obniz/obniz: obniz SDK for javascript
- Raspberry Pi - Wikipedia
- Arduino - Wikipedia
- ArduinoとRaspberry Piの違いとは?|WIRED.jp
- Raspberry PiとArduinoの違い | Make.
- Arduino vs. Raspberry Pi:あなたにぴったりのDIYプラットフォームはどっち? | readwrite.jp

obniz (オブナイズ) - クラウドにつながったEaaS開発ボード - クラウドの永久ライセンス付き
- 出版社/メーカー: 株式会社CambrianRobotics
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る