Help us understand the problem. What is going on with this article?

2019年2月版 JavaScript/Node.jsでBluetoothを触れるライブラリやAPIをまとめてみた #html5j #iotlt #linethings

More than 1 year has passed since last update.

2019年2月版 JavaScript/Node.jsでBluetoothを触れるライブラリやAPIをまとめてみた #html5j #iotlt #linethings

by n0bisuke
1 / 19

この資料について


自己紹介


今日の内容

  • JavaScriptでやれるBluetooth周りの話

モチベなど

  • こんな事案
    • Webやってる人に「IoTやろうよ〜」みたいな事を言う
    • だいたいの人が「興味はあるけど、モノがない」と返答する
  • よくある学習サービスがやりやすい理由
    • -> PCだけあればやれる
  • IoTとかモノづくりってそもそも始めにくい
    • -> デバイス用意が必要
      • ここに圧倒的な入門障壁があると思ってます

Q.IoTやモノづくり領域ってデバイスないと"全く"やれない?

A. そんなことはないはず


PCとスマホがあればやりはじめが出来る内容を検討したい

  • Web Bluetooth
  • WebRTC
  • WebMIDI
  • WebAudio
  • その他, ちょっとデバイス必要かも

JSで扱えるBluetooth周りのAPIたち

ブラウザ - WebBluetooth


Node.js (今回のメインこの辺)

  • 1. noble
  • 2. bleno
  • 3. node-bluetooth
  • 4. LINE Simple Becon
  • 5. CYLON

noble


bleno


最近のMacでBlenoが使えない(2019/2/19)


nobleやbleno使うときはBluebirdでプロミス化が良さそう

noble.on('discover', function(peripheral) {
    peripheral.connect(function(err) {
        peripheral.discoverServices([pizzaServiceUuid], function(err, services) {
            services.forEach(function(service) {
                service.discoverCharacteristics([], function(err, characteristics) {
                    characteristics.forEach(function(characteristic) {
                        CrustCharacteristic.write(crust, false, function(err) {
                            //ここでやっと書き込みができる
                        }
                    }
                }
            }
        }
    }
}
const discovered = async (peripheral) => {
    const p = Promise.promisifyAll(peripheral); //Promisify
    await p.connectAsync();
    const services = await p.discoverSomeServicesAndCharacteristicsAsync(serviceUUIDs,characteristicUUIDs);
    const characteristic = services.reduce((pre, current) => (current.uuid === serviceUUIDs[0]))
                            .characteristics
                            .reduce((pre, current) => (current.uuid === characteristicUUIDs[0]));
    const c = Promise.promisifyAll(characteristic); //Promisify

    //書き込み
    await c.writeAsync(new Buffer.from([state]), true);
}

node-bluetooth

  • BLEではなくBluetoothシリアルを読み込んだりするライブラリ
  • いわゆるペアリングなどが発生するデバイス(Bluetooth v3まで?)はこちらで一覧が見れる
const bluetooth = require('node-bluetooth');
const device = new bluetooth.DeviceINQ();
device.listPairedDevices(console.log);
$ node app.js
[ { name: 'u-sen-lan',
    address: 'xx-xx-xx-xx-xx-xx',
    services:
     [ [Object],
       [Object] ] },
  { name: 'Joy-Con (L)',
    address: 'xx-xx-xx-xx-xx-xx',
    services: [ [Object], [Object], [Object] ] },
  { name: 'Nexus 5',
    address: 'xx-xx-xx-xx-xx-xx',
    services:
     [ [Object],
       [Object] ] },
  { name: 'AB Shutter 3',
    address: 'xx-xx-xx-xx-xx-xx',
    services: [ [Object], [Object], [Object] ] } ]

↑僕のMacで連携中のBluetoothデバイスの一覧が出ます。

一番最後の「AB Shutter 3」は買ったばかりのBluetooth シャッター

https://www.instagram.com/p/BuD9tqYDCwU/


LINE Simple Becon


CYLON


デバイス用意しないでどうやってやりはじめる?

  • スマホアプリでデバイスのエミュレートが出来ます。
  • スマホ <-> PCで連携してプログラムを試したり出来ます。

その他、面白いAPI見つけ方

  • chrome://flags/をチェック

  • navigator.~をチェック

  • 「Web x 既存の通信技術名」で検索してみると意外とヒットするものもある(かも)

    • WebNFCなど
  • npmを探ってみる

    • npm内で「bluetooth」「usb」などで検索してみると面白い

皆さんも見つけたらシェアしましょう〜
そして毎月開催している「IoTLT」で話しにきてね☆ (番宣)


まとめ

  • JavaScript/Node.jsとか使うとBluetoothけっこうやれるのでみんな楽しんでいきましょ。
  • Webエンジニアがこっち側きてくれるようになるといいな
n0bisuke
プロトタイピング専門スクール「プロトアウトスタジオ」で教えたりしてます。 プロフ -> https://dotstud.io/members/n0bisuke
https://protoout.studio
dotstudio
全ての人がモノづくりを楽しむ世界を目指して活動しています。
https://dotstud.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした