obniz

obniz SDK for javascript

83
41
JavaScript

obniz.js: SDK for JavaScript

npm version
test

obnizobnizOSをobniz websocket APIを使いJavaScriptから操作するためのsdkです。

ドキュメント

関係するサイト

obniz.js内 Example集

使い方

<html>
<head>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script src="https://unpkg.com/obniz/obniz.js"></script>
</head>
<body>

<input id="text">
<button id="send">send</button>

<script>
  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {
    // embed parts
    obniz.display.print("hello!");
    obniz.switch.onchange = function(state) {
      $('body').css({
        "background-color" : (state == "push") ? "#F00" : "#FFF"
        });
    }

    // parts library
    var servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2});
    servo.angle(90);
    
    // peripherals
    var uart = obniz.getFreeUart();
    uart.start({tx: 5, rx: 6, baud:9600});  
    
    $('#send').click(function () {
      uart.send($("#text").val());
    });

    obniz.io7.drive("5v")
    obniz.io7.output(true)
    obniz.io8.pull("3v");
    obniz.io8.drive("open-drain");
    obniz.io8.output(false);
  }
</script>
</body>
</html>

TypeScript

import * as Obniz from 'obniz'

const obniz = new Obniz("0000-0000");
obniz.onconnect = async () => {

  obniz.display.print("hello!");
  obniz.switch.onchange = (state: string) => {
    console.log(state);
  }
  const servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2});
  servo.angle(90);
}

インストール

ブラウザ

次のscriptタグをhtmlに組み込むだけです

  <script src="https://unpkg.com/obniz/obniz.js"></script>

Nodejs

npmでインストールします。

  npm install obniz

そしてjsの中でrequireして下さい。

  const Obniz = require('obniz');

接続

obnizデバイスをobniz idを使ってインスタンス化します。
そして接続が完了した時に呼ばれる関数をセットします。

  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {

  }

接続完了後にobnizデバイスを遠隔で操作できます。

  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {
    obniz.display.print("hello!");
    obniz.switch.onchange = function(state) {
      if (state === "push") {
        obniz.display.print("Button Pressed");
      }
    }
  }
  obniz.onloop = async function () {
    // 接続中は繰り返し呼ばれる関数
  }
  obniz.onclose = async function () {
    // 切断時に呼ばれる関数
  }

IOペリフェラルも利用可能です。詳しくはそれぞれのペリフェラルドキュメントを見てください。

  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {
    obniz.io0.drive("5v");
    obniz.io0.output(true)
    obniz.io1.pull("3v");
    obniz.io1.drive("open-drain");
    obniz.io1.output(true);
    obniz.io2.drive("3v");
    obniz.io2.output(true);

    obniz.ad3.start(function(voltage){
      console.log("changed to "+voltage+" v")
    });

    var pwm = obniz.getFreePwm();
    pwm.start({io: 4});
    pwm.freq(1000);
    pwm.duty(50);

    var uart = obniz.getFreeUart();
    uart.start({tx: 5, rx: 6, baud:9600});  
    uart.onreceive = function(data, text) {
      console.log(data);
    }
    uart.send("Hello");
  }

パーツライブラリ

パーツライブラリはobniz.jsに含まれています。ドキュメントはこちらで

obniz Parts Library

obniz Boardにつながれた部品をつかうにはpartsをonconnect関数の中でインスタンス化します。どんな関数があるかなども obniz Parts Library で確認できます。

例えば LED https://obniz.com/sdk/parts/LED

  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {
    var led = obniz.wired("LED", {anode:0, cathode:1});
    led.blink();
  }

HC-SR40(distance measure) https://obniz.com/sdk/parts/HC-SR04

  var obniz = new Obniz("0000-0000");
  obniz.onconnect = async function () {
    var hcsr04 = obniz.wired("HC-SR04", {gnd:0, echo:1, trigger:2, vcc:3});
    hcsr04.unit("inch");
    hcsr04.measure(function( distance ){
      console.log("distance " + distance + " inch")
    })
  }

ブラウザのUIとハードウェアの連携

HTML上のUIとハードウェアの連携

<input id="slider" type="range"  min="0" max="180" />

<script src="https://unpkg.com/obniz/obniz.js"></script>
<script>
var obniz = new Obniz("0000-0000");
obniz.onconnect = async function () {
  var servo = obniz.wired("ServoMotor", {gnd:0, vcc:1, signal:2});
  $("#slider").on('input', function() {
    servo.angle($("#slider").val())
  });
}
</script>

外部WEBサービスとの連携

DropboxやTwitterなどのwebサービスとの連携

// save data from obniz to dropbox
var obniz = new Obniz("0000-0000");
obniz.onconnect = async function () {
  var dbx = new Dropbox({ accessToken: '<YOUR ACCESS TOKEN HERE>' });
  var button = obniz.wired("Button",  {signal:0, gnd:1});
  button.onchange = function(pressed){
    if (pressed) {
    dbx.filesUpload({path: '/obniz.txt', contents: "[Button Pressed]\n" + new Date(), mode: 'overwrite' });
    }
  };
}

2つ以上のobnizデバイスとの連携

obniz Boardにつながれたサーボモーターを別のobniz Boardにつながれたつまみから操作。

// control servomotor from potention meter which connected to another obniz.
var obnizA = new Obniz("0000-0000");
obnizA.onconnect = async function () {
  var obnizB = new Obniz("0000-0001");
  obnizB.onconnect = async function(){
    var meter = obnizA.wired("Potentiometer", {pin0:0, pin1:1, pin2:2});
    var servo = obnizB.wired("ServoMotor", {gnd:0, vcc:1, signal:2});
    meter.onchange =function(position) {
      servo.angle(position * 180);
    }; 
  }
}

Lisence

See LICENSE.txt

Contribute

Contribution