Node.js에서 BLE을 다루는 패키지의 noble과 noble-device로 비공식 SDK 같은 것을 만들어 보자.

Node.js 어드벤트 캘린더 8일째입니다! 어제는 Go의 어드벤트 캘린더에 BLE 자료를 썼지만 오늘은 Node.js입니다.

소개



요 전날 JavaScript에서 FlowerPower를 사용하는 기사를 썼습니다.

자바스크립트에서 방의 식물을 모니터링합니다. Parrot Flower Power를 Node.js에서 제어

메이커측이 SDK를 공개하고 있지 않아도, BLE 디바이스는 BLE 제어용의 정보만 알면 제어하는 ​​것도 가능하게 됩니다.

그래서 noble과 noble-device를 사용하여 SDK 등의 구현을 추구하려고합니다.

noble



Node.js에서 BLE을 처리하는 패키지. 설명을 보면 central로 동작합니다.


참고 : 단 6 라인! 가장 쉽게 iBeacon의 전파를 "발신"하는 방법
참고 : Mac이나 Linux에서 node를 사용하여 iBeacon을 만드는 것은 무엇입니까?

noble-device



noble을 감싸고 사용하기 쉽게 해주는 패키지.

noble-device를 내부적으로 이용하는 패키지



다양한 디바이스의 비공식 SDK적인 것이 noble과 noble-device를 사용해 만들어지고 있습니다.
  • tethercell
  • ble-bean
  • sentortag
  • Flower Power

  • PlayBulb을 사용해보십시오.



    이러한 구현을 바탕으로 PlayBulb Candle 이라는 전자 촛불을 제어하는 ​​SDK를 만들어 보겠습니다.

    참고 : Go에서 BLE 제어로 PLAYBULB Candle의 조작을 해본다



    단순화하고 싶기 때문에 우선 [A]色を変えるメソッド[B]名前を変えるメソッド 를 구현해 보았습니다.

    playbulb.js
    var util = require('util');
    var NobleDevice = require('noble-device');
    
    var SERVICE_UUID = 'ff02'; //キャンドル制御自体のService
    var COLOR_CHARA_UUID = 'fffc'; //[A]キャンドルの色のCharacteristic
    var NAME_CHARA_UUID = 'ffff'; //[B]名前情報のCharacteristic
    
    function PlayBulb(peripheral) {
      NobleDevice.call(this, peripheral);
      this.name = peripheral.advertisement.localName;
    }
    
    NobleDevice.Util.inherits(PlayBulb, NobleDevice);
    PlayBulb.SCAN_UUIDS = [SERVICE_UUID];
    //[A]色を変えるメソッド
    PlayBulb.prototype.setColor = function(color, callback) {
      var data = new Buffer('00'+color, 'hex');
      this.writeDataCharacteristic(SERVICE_UUID, COLOR_CHARA_UUID, data, callback);
    };
    //[B]名前を変えるメソッド
    PlayBulb.prototype.setName = function(name, callback) {
      var data = new Buffer(name);
      this.writeDataCharacteristic(SERVICE_UUID, NAME_CHARA_UUID, data, callback);
    };
    
    module.exports = PlayBulb;
    
    

    소스 코드의 [A][B]의 기능과 UUID는 마지막 기사 에도 기재되어 있습니다.

    FlowerPower의 구현을 모방합니다. setColor 이나 setName 라는 메소드를 만들고 있고, 내부에서 writeDataCharacteristic 라는 메소드를 실행하고 있습니다.
    writeDataCharacteristic 에 Service의 UUID와 사용하고 싶은 기능의 Characteristic의 UUID, 입력치를 주는 것으로 BLE 디바이스에 명령을 보낼 수 있습니다.

    센서등 데이터를 취득하는 것만의 경우는 readDataCharacteristic (을)를 똑같이 사용하는 것으로 값 취득을 할 수 있습니다.

    사용해보기


    .discover 등의 메소드는 noble 측에서 미리 설정되어 있는 메소드입니다.
    연결 후 setColor를 호출합니다.

    setColor.js
    var PlayBulb = require('./playbulb');
    
    console.log('PLAYBULBを探しています...');
    PlayBulb.discover(function(pb){
      console.log('PLAYBULB:'+pb.name+'を見つけました。接続中です...');
      pb.connectAndSetup(function(err){
        if(err) return;
        console.log('接続しました。');
        //色を変更
        pb.setColor(process.argv[2],function(hoge){
          console.log(hoge);
        });
      });
    });
    
    $ node app.js ff0000
    

    등으로 실행하면 촛불이 붉게 빛납니다.
    이것도 어제 기사를 참조하십시오.

    요약



    Bluetooth Code의 정보조차 주울 수 있으면, 마음대로 SDK같은 것을 만들 수 있는 것을 알았습니다.
    우선 PlayBulb은 좀 더 만져보고 싶습니다.

    BLE 개발할 수 있으면 여러가지 가능성 퍼지네요!
    noble, bleno, noble-device 등의 리포지토리는 필수 체크입니다.

    그럼

    좋은 웹페이지 즐겨찾기