obnizがLINE Thingsに対応しました。
LINE Thingsのgithubレポジトリにもサンプルが載っています
今回はこちらを使ってみます
LINEの準備
まずはLINE側の準備をします。
といっても、LIFFアプリを作るのはめんどくさいので、LINEがテスト用に作ってくれているサンプルをそのまま使います。(プログラムは書きません)
LINEのアップデート
LINEのアプリを最新のものへアップデートしてください。
古いものだと、LINE Thingsの機能がまだ入っていないことがあります。
LINE Thingsと友だちになる
LINE公式ブログの記事、LINE の IoT プラットフォーム LINE Things の Developer Trial を試してみる
内にある、QRコードより、LINE Thingsのアカウントと友達になります
LINE と LINE Things デバイスを連携させてみよう
次に、ファームウェアの書き込みが完了したら、実際に LINE へデバイスを連携してみましょう。
LINE Things を利用するために、まずお使いの LINE をインストールしたスマートフォン上で、以下の QR コードを読み取って規約に同意していただき、LINE Things の機能を有効化してください。
その後、以下のようなデバイス連携画面が見えるはずです。(一度有効化したら、次回からは “設定” → “LINE Things” からデバイス連携画面を開くことが出来ます) ここで、ファームウェアを書き込んだデバイスの電源を入れると、LINE Things デバイスが検出され “連携可能なデバイス” に “LINE Things Trial (Default Firmware)” が表示がされるはずです。表示されない場合には、スマートフォンの Bluetooth がオフになっていないか確認してください。
obnizの準備
obnizのBLEの機能がfirmware v1.1.0より強化されていますので、それ以降のファームウェアで動かす必要があります。
また、firmware v1.1.0はobniz.js v1.15.0以降でないと動きませんので、SDKのバージョンもそれ以降である必要があります。
obnizファームウェアのアップデート
ファームウェアの確認の仕方
obnizのスイッチを押した状態で電源を投入することでメニューが表示されます。
その中からDisplay infoを選ぶことで、ファームウェアバージョンを確認することができます。
ユーザー登録をした後、クラウドコンソールから確認することもできます。
ファームウェアアップデートの仕方
ユーザー登録をした後、クラウドコンソールよりアップデートするとができます
https://obniz.io/doc/about_cloud_console
プログラムを書く
Javascript部分のみ記載しています.
node.jsでもhtmlでもどちらでも動きます。
最初の行のYOUR_OBNIZ_ID のみ、自分のobniz idを入力ください
const obnizId = 'YOUR_OBNIZ_ID';
let obniz = new Obniz(obnizId);
obniz.onconnect = async function() {
obniz.display.clear();
obniz.display.print('OFF');
setSecuritySettings(obniz);
let { PSDIService } = createSPDIService(obniz);
let { userService, writeCharacteristic, notifyCharacteristic } = createUserSerivice(obniz);
writeCharacteristic.onwritefromremote = async function( deviceAddress, newValue ) {
console.log('remote button state changed : ' + newValue[0]);
if (newValue[0]) {
obniz.display.clear();
obniz.display.print('ON');
} else {
obniz.display.clear();
obniz.display.print('OFF');
}
};
obniz.switch.onchange = async function(state) {
console.log('button state changed : ' + state);
if (state === 'push') {
await notifyCharacteristic.writeWait([0x01]);
} else {
await notifyCharacteristic.writeWait([0x00]);
}
notifyCharacteristic.notify();
};
let advDataFromService = userService.advData;
advDataFromService.localName = 'obniz';
obniz.ble.advertisement.setAdvData(advDataFromService);
obniz.ble.advertisement.setScanRespData({
localName: 'LINE Things Trial obniz',
});
console.log('start advertisement');
obniz.ble.advertisement.start();
};
function setSecuritySettings(obniz) {
obniz.ble.security.onerror = function() {
console.error('security set params error');
obniz.reboot();
};
obniz.ble.security.clearBondingDevicesList();
obniz.ble.security.setModeLevel(1, 2);
}
function createUserSerivice(obniz) {
let writeCharacteristic = new obniz.ble.characteristic({
uuid: 'E9062E71-9E62-4BC6-B0D3-35CDCD9B027B',
data: [0x00],
properties: ['read', 'write'],
permissions: ['read_encrypted', 'write_encrypted'],
descriptors: [
{
uuid: '2901',
text: 'Write to change display',
},
],
});
let notifyCharacteristic = new obniz.ble.characteristic({
uuid: '62FBD229-6EDD-4D1A-B554-5C4E1BB29169',
data: [0x00],
properties: ['read', 'notify'],
permissions: ['read_encrypted', 'write_encrypted'],
descriptors: [
{
uuid: '2901',
text: 'Notify when push button on LINE app',
},
{
uuid: '2902', //2byte for CCCD
data: [0x00, 0x00], //2byte for CCCD
permissions: ['read_encrypted', 'write_encrypted'],
},
],
});
let userService = new obniz.ble.service({
uuid: '91E4E176-D0B9-464D-9FE4-52EE3E9F1552',
characteristics: [writeCharacteristic, notifyCharacteristic],
});
obniz.ble.peripheral.addService(userService);
return {
userService,
writeCharacteristic,
notifyCharacteristic,
};
}
function createSPDIService(obniz) {
let PSDIService = new obniz.ble.service({
uuid: 'E625601E-9E55-4597-A598-76018A0D293D',
characteristics: [
{
uuid: '26E2B12B-85F0-4F3F-9FDD-91D114270E6E',
text: obnizId, //unique id
permissions: ['read_encrypted', 'write_encrypted'],
descriptors: [
{
uuid: '2901',
text: 'PSDI',
},
],
},
],
});
obniz.ble.peripheral.addService(PSDIService);
return { PSDIService };
}
動かす
LINE Thingsの画面を表示しておき、obnizのプログラムを実行します。
このように選択肢が出てきます
今すぐ利用を押せば、インターフェース画面に遷移して、動かすことができます。
今回のプログラムは、obnizのボタンを押したらLINE上のボタンが操作されてカウントが上がっていき、逆にLINE上のボタンを押したらobnizのディスプレイにON/OFFが表示されます。
obnizでLINE Things! pic.twitter.com/LgLOHfeEH1
— 9wick (@9wick) 2019年2月5日
まとめ
obnizとLINE Thingsが簡単に連携できるようになりました。どちらもプログラムをサクッと作ってサクッとデバッグできてサクッと修正できるので、BLE関係のプロトタイプ作るときに便利なんじゃないかなと思います。