obnizをBLEにてperipheralとして動かす

以前の記事にてobniz買ってなんか作ってみたという記事をあげました

しかし、このマイコンを買った理由はBLEが簡単にできるという点です

さっそくobnizをBLEのperipheral(接続される側)として、データを一定間隔(継続的に)で送信するプログラムを作ってみたので記載しておきます

はじめに

obnizは、obniz独自のエディタで作れる他にもNode.jsでも作ることが可能です

作りやすさから本プログラムではNode上でつくりました

公式に従って初期化をします

動作

プログラム

今日時点(2018/08/30)にて動作を確認したプログラムを記載しておきます

プログラムの簡単な流れは

  1. obnizライブラリを読み込み
  2. advertiseの設定
  3. characteristicの設定(ここでnotifyを設定している)
  4. Serviceの設定
  5. BLEスタート
  6. 1秒毎ごとに値を更新

です

プログラムの補足説明

  • “your obniz id”のところに各自のobniz IDを入れてください

  • obniz.ble.advertisement.setScanRespDataにてアドバタイズでだす名称を設定しています
    例では名称を”obniz BLE”としています

  • var Characteristicにてデータの送受信の定義をしています
    とりあえず2byteのデータ列を出力しています
    注意として、descriptorsのdataにも2byteを定義していますが、これと一致させなければなりません今回は一定間隔でデータを送信し、セントラル側に値を変わってことを教えたいためproperitesはnotifyにしています

  • var Serviceにてcharacteristicの箱のようなものを作っています
    Serviceを作り、この中にはこんなcharacteristicが入っているよーとしてあげています

    characteristicsにて先程作ったCharacteristicをいれます
    またServiceには複数のCharacteristicを入れることができます (ex: characteristics: [Characteristic1, Characteristic2])

  • addServiceとsetAdvDataにてServiceを追加してあげます
  • obniz.ble.advertisement.start()にてBLEの電波を発します

  • obnizの接続状態も知りたいためにonconnectionupdatesを入れています

  • 一定間隔で通知をしたいためsetIntervalをつけています
    通知間隔は1秒毎としています

    writeWait()のなかに値を書き込み、notify()にて値が変わったことを接続している側へ通知をしています

    重要なこととして、必ずwriteWait()したあとにnotify()をしないと値が変わったこと通知していくれません

余談

obnizでBLEをするときに「Notifyなくね?」となり、フォーラムに質問したところ1~2週間で実装してくれました

すばらしい

Hi みやかわ, obniz sdk version 1.9.5 released and it includes BLE notifications. The document is here You can use like this. Don't forget to set CCCD descriptor (0x...

実際にobnizでBLEをやってみてJavaScirptでBLEができていいじゃんと思いましたが、obniz自体がwifiを繋がなければ動かないため、「wifi環境あるんだったらBLEじゃなくてもよくい?」感があります

BLEにしか対応していないマイコン(BLEnano2とか)に繋げてなにかするしか利用する価値がないような・・・

あとBLEの接続プロセスしってないと難しい感じします
obnizドキュメントにてBLEのやり方をみると(記事)、初心者にはとっつきにくい感じになってます

次はBLEのCentral(接続する側)をやってみたいと思います

スポンサーリンク







フォローする

スポンサーリンク