学生かえるエンジニアのブログ

iOSを主にやる勉強中エンジニア。かえるが好き。ピクルスってかわいいよね。

Mac を iBeacon の ペリフェラル にする

前置き

iOS アプリでビーコン関連のアプリを開発中だったのですが、試したくてもビーコン端末が手元にありませんでした。 そこで Mac をビーコン代わりにできるという話を聞いたのでやってみました。

ただ Mac から アドバタイズ できればいいだけだったので最低限のことしか書いてないです。

環境

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. 実行

MacBluetooth をオンにしてから。

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

参考