Windows10でbleaconが出来なかったのでUbuntuで環境構築した

## 概要

bleaconはNode.jsが動くマシンで [bleaconの公式ドキュメント（https://github.com/sandeepmistry/node-bleacon）](https://github.com/sandeepmistry/node-bleacon) にある通り `npm install bleacon` をすればインストール可能．数行コーディングするだけで簡単にibeaconを扱える．  
はずなのだが，Windows10での環境構築時にエラーが出たり実行出来なかったりしたので最終的にUbuntuに切り替えた．その変遷を備忘録的に書いている．  

注意として文章が煩雑なので時間の無い方には向かない．  
私と同じような状況に居て，何か少しでもとっかかりが欲しい方向け．

### やろうとしたこと

Windows10でNode.jsを使ってibeaconを受信．
送信にBLEビーコン，受信にBLEドングルを使用する． 
使用するパッケージは [node-bleacon（https://github.com/sandeepmistry/node-bleacon）](https://github.com/sandeepmistry/node-bleacon)

### 最終的な環境

OSをUbuntuに変更し，かつ18.04からのアップデートも行った．

- OS : Ubuntu 22.04
- node : v9.10.1
- パッケージ : bleacon@0.5.1
- BLEドングル : [RTL8761B搭載Bluetooth 5.0 USB](https://www.amazon.co.jp/dp/B08DRD2W8R/ref=sspa_dk_detail_0?psc=1&pd_rd_i=B08DRD2W8R&pd_rd_w=tSBTy&pf_rd_p=0a3391fe-e127-45bc-a728-7c0df531bf8a&pd_rd_wg=RVpW9&pf_rd_r=8R189GEN2NCS7AJT5A2W&pd_rd_r=c1124ddb-d050-48f0-86aa-3cc38efbd6ac&smid=A2SPXMA24Z3DLL&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyWjVBQVhJT0Q2SkVMJmVuY3J5cHRlZElkPUEwMzk1NzkxMUdKNFVRRjgxT0szQiZlbmNyeXB0ZWRBZElkPUEyRFdJTzZXUVBTVVREJndpZGdldE5hbWU9c3BfZGV0YWlsX3RoZW1hdGljJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)
- BLEビーコン : サンワサプライ [MM-BLEBC1](https://www.monotaro.com/p/8704/7038/?utm_id=g_pla&utm_medium=cpc&utm_source=Adwords&utm_campaign=246-833-4061_6466659573&utm_content=96539050923&utm_term=_419857551521__aud-368712506548:pla-879931899835&gclid=CjwKCAiAwKyNBhBfEiwA_mrUMoNwaOEjwy6KXYn9699GAG7jerKmvx3S4kR4NzGx2LleDKvG57_5qxoCjSQQAvD_BwE)

### この記事でわかること

- 私の苦労
- 柔軟な対応力とググり力の大切さ

## はじめに

もし貴方が「Windowsマシンでbleaconを利用してiBeaconを触りたい」と思っているなら，**やめて他の選択肢を探した方が良いと私は思う．**ただ，私が出来なかったというだけで恐らくおま環なのでこれは**あくまで個人の感想**．  
[bleak（https://bleak.readthedocs.io/en/latest/）](https://bleak.readthedocs.io/en/latest/) ならWindowsでも問題なくibeaconを受信出来たし．Ubuntuではbleaconも正常に動かせた．  
言語やOS，ライブラリにこだわらないのであればibeaconを受信するための選択肢は他にもあるということを忘れずに．私はこのことを忘れて時間を無駄にした．  

また，nvmを使ったWindows/UbuntuへのNode.jsのインストールについては別に [メモ書き](https://qiita.com/nozomiruD/items/aba42c0135fecd183a74) があるのでそちらをどうぞ．

## bleaconって何ぞ

>Node.jsでiBeaconを作成，発見，設定するためのライブラリ．

と，英語で [公式ページ（https://github.com/sandeepmistry/node-bleacon）](https://github.com/sandeepmistry/node-bleacon)に書いてある．  
iBeaconとはBlue tooth Low Energyを利用した技術のことで，BLEを通して情報（アドバタイズパケット）を一定間隔で送信するもの．

つまりbleaconを使えばNode.jsを用いてBLEビーコンが発する電波を受信（発見）出来るということ．

## bleaconのインストールとWindowsへの環境構築断念

[公式ページ](https://github.com/sandeepmistry/node-bleacon) のInstallに書いてある通り `npm install bleacon` を実行するだけ．

のはずなのだが，私はこのインストールとtest.jsの実行時に大量のエラーメッセージを見ることとなった．
エラーを解決するためにやったことは覚えている限りで以下の通り．

なお極限状態だったためそのエラーがインストール時に出たのか，それともbleacon実行時だったのかまでは覚えていないし，そもそもどういう状況の組み合わせで起きたのかメモしていなかったのであまり参考にならないと思う．

- node-gypのバージョンの確認と再インストール
- Compiled against a different Node.js version とのことなので要求されているNODE_MODULE_VERSIONであるnodeを `nvm install` しrebuild
- node_modulesディレクトリを削除してからwindows-build-toolsなど，依存関係のパッケージを再インストール

また，windows-build-toolsのpythonインストール時にプログレスバーが止まってしまうことがあった．ただ一旦プロセスを抜けて `npm list –global –depth=0` してみるとインストールはされているようだった．それでもエラーが出たため，一応toolsの中身を直接落として試したが特に変わらず．

他，逐一バージョンを確認したり手順をやり直したりなど，転がっている情報を参考にしながらしらみつぶしにやれることをやったが解決出来なかった．
色々な所で異なる問題が発生して自分では処理しきれなくなってきたところで，ようやくUbuntuでやってみようとなったわけ．~~もっとはよせえ~~

## Ubuntuへのbleaconインストール

最初に書いたコマンドで問題なくインストール出来た．
`npm ls -depth=0` としたときにbleaconが表示されていて，node_modulesにフォルダがあれば大丈夫．
![Screenshot from 2021-12-03 20-48-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528521/cb61990a-ee76-40ad-68eb-d7cd68f57de2.png)

## 新たな問題，UbuntuでBLEドングルが認識されない

用意していたドングルがプラグ・アンド・プレイされず．  
`lsusb` で確認すると接続はされているようだが，設定でBluetoothをONに出来ない．

ここまで問題だらけで正直心が折れかかっていたのだが，以下のサイトの情報に救われた．このページが無ければ今も私はエラーの海を泳いでいたと思う．本当に感謝してもしきれない．  
[参考ページ：Boot macOS RTL8761B搭載BLUETOOTH 5.0 USBドングルをUBUNTUで動かす（https://bootmacos.com/archives/13602）](https://bootmacos.com/archives/13602)

どうやら**カーネルのバージョンが古い**ことが原因のようだ．Linuxカーネルが5.8未満ならアップデートをしなければならないらしい．また，設定ファイルを落としてきて所定の場所へ配置．詳しくは参考ページへ．

そのとき使用していたOSとカーネルのバージョンは以下の通り．![OSとカーネルのバージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528521/814d2741-df1c-879e-ba95-ff31f8540d24.png)
調べると現在のOSのバージョンではカーネル5.8以上にできなかったので，OSを18.04から22.04へアップデートした．

その後BLEドングルを指し直してみると正常に認識され，ビーコンの電波を受信できた．
![ブルートゥース成功.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528521/5feb19bb-a3b6-fe91-6119-73345f996cfb.png)



## bleaconのtest実行

[bleaconの公式ドキュメント（https://github.com/sandeepmistry/node-bleacon）](https://github.com/sandeepmistry/node-bleacon) のUsageを参考に以下をコーディング．

```javascript:test.js
console.log('hi');
var Bleacon = require('bleacon');
var uuid = 'ここにBLEビーコンのuuidを入れる';

Bleacon.on('discover', function(bleacon)) {
    if (bleacon.major == 1){
        console.log('Beacon detected : ' + JSON.stringify(bleacon));
    }
}
Bleacon.startScanning(uuid);
```

ビーコンには設定用のアプリがあるのでMajor，Minorを設定しておけば同じuuidを持つビーコンが複数あってもそれらで個体を判別出来る．

### 実行結果
![bleacon実行確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528521/a7aeecdc-4a20-fd91-8076-0f996d3fcff2.png)
予めパスを通すか `$(which node)` として実行する．
正常に実行出来た．

一部のエラーはパスが正常に通っていなかったことから起こったのではないかと，今になって思う．

## 最後に

簡単にできると思っていたらかなり時間を使ってしまった．最終的な目的を忘れてWin10での環境構築に意味もなく固執していたことが原因なので，こだわりが無ければ他の可能性を模索しようという自戒，あと調べる力も大事だなと改めて実感した．