Mac を iBeacon の ペリフェラル にする
前置き
iOS アプリでビーコン関連のアプリを開発中だったのですが、試したくてもビーコン端末が手元にありませんでした。 そこで Mac をビーコン代わりにできるという話を聞いたのでやってみました。
ただ Mac から アドバタイズ できればいいだけだったので最低限のことしか書いてないです。
環境
- MacBook Pro (15-inch, 2017)
macOS High Sierra | node | npm | bleno |
---|---|---|---|
10.13.6 | 8.11.3 | 6.2.0 | 0.5.0 |
方法
1. 初期準備
Node.js の環境を用意したり、npm の使い方を把握するなどの部分は割愛します。各自調べてください。
今回使用するディレクトリ(フォルダ)も用意しといてください。
2. bleno 用意
詳しくは https://github.com/noble/bleno
npm install bleno
3. main.js 用意
ファイル名や中身コードはおまかせしますが、今回は最低限ということで下記のように準備します。
var bleno = require('bleno'); var uuid = 'aaaaaaaabbbbccccddddeeeeeeeeeeee'; var major = 0; var minor = 0; var measuredPower = -59; bleno.on('stateChange', function(state) { console.log('on -> stateChange: ' + state); if (state === 'poweredOn') { bleno.startAdvertisingIBeacon(uuid, major, minor, measuredPower); } });
4. 実行
node main.js
5. スキャン
今回私の目的は、このスキャンする部分を開発中のアプリでテストしたいということだったんですが、
とりあえず本当に Mac が ペリフェラル として動作してるか確証がもてないので出回ってるアプリで試してみます。
検索で最上位に出てきた Beacon Scan とかいうアプリで試して無事検知できました。
知識
説明できるほど理解してるわけではないのですが、今回出てきた値を軽くメモしておきます。
proximity UUID
Beacon端末の UUID 。16進数。
8桁-4桁-4桁-4桁-12桁
と表記される。
major / minor
0 ~ 65535 の値。
例えば major でショッピングモール識別、 minor で店舗識別などグルーピングに利用する。
ペリフェラル (Peripheral)
簡単に言えば 発信機 。対してアプリなどが 受信機(セントラル/Central) という。
Beacon の話というよりは BLE の話。
その他
- BLE, Beacon, iBeacon などの違い、関係性などは自分で調べてね。
- iOS 端末2台で ペリフェラル と セントラル にしたりできるみたいです。
- 逆に Mac を セントラル にして iOS を ペリフェラル にもできるはず。
- Android などに関してはしりません。
躓き
bleno の poweredOn
main.js
では、stete が poweredOn
になってから bleno.startAdvertisingIBeacon
をやっていますが、こうしないとエラーが発生します。
bleacon
bleno
に似た感じで bleacon
というものもありました。
こちらのほうが情報が多かったのですが、全体的に情報が古く、実際に動かしてみてもうまくいきませんでした。(自分のやり方が悪いだけの可能性もあるけど。)
GitHub - sandeepmistry/node-bleacon: A Node.js library for creating, discovering, and configuring iBeacons
Mac App
今回、あくまで iBeacon 端末の代替で手軽にやりたかっただけなのですが、自作で Mac App を作ってもいいと思います。
少し試したりしてたんですが心が折れました。
[iBeacon] Mac を iBeacon 端末にする(Swift3編) | Developers.IO