Raspberry Pi 3でWxBeaconを受信する
- マイクロSDカード(8GB以上あると将来的にも余裕)
- USBマイクロB ケーブル(スマホの充電ケーブルとして売られているものでよい)
- USB充電器(1.0A以上だせるもの)
- HDMIケーブル(スマホ用の小型のものではなく、通常のサイズのもの)
- HDMIケーブルが接続できる画面
- USB接続できるキーボード(Bluetoothキーボードは使えない)
- インターネット回線
- LANケーブル(既にラズパイからインターネットにアクセスできる状態なら無線LANでよい)
Raspberry Pi 3には無線LANがついてきますが、パスワード認証などが上手くいかないと時間を無駄にするので、繋いだら即インターネットが見られる有線LANでテストしましょう。
Under Construction
賢明なDebianユーザーの方であれば、Debianには「aptitude」というインストール(パッケージ管理)用コマンドがあることをご存じでしょう。しかし、Debianの公式リポジトリからインストールできるアプリは、バグが少なく安定している代わりに、想像を絶するほどバージョンが古いのです(これはDebianの流儀です)。
そこで、この記事では、nodebrewというNode.jsを管理するアプリをまず導入して、nodebrewが管理する新しいバージョンのNode.jsをRaspberry Piに導入することにします。
nodebrewの公式サイトを開き、インストール手順を確認します。
指示されたとおりにインストール作業を進めましょう。
curl -L git.io/nodebrew | perl - setup
nodebrewコマンドが使えるように、.bashrcファイルに検索パスを追記します。
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> .bashrc
.bashrcを再読込しましょう。
source .bashrc
これでnodebrewコマンドが使えるようになりました。バージョンを確認します。
nodebrew -v
nodebrew 0.9.5がインストールされました。では、Node.jsのインストールをはじめましょう。Node.jsの公式サイトを開いて、最新の安定版を調べます。
バージョンが2つ並んでいます。LTSは長期サポート(Long Term Support)の略で、通常よりも長い期間バグ修正などが行われるバージョンで、新しい機能よりも、バグが少ないという安心を追究しているバージョンです。この記事ではv5.10.1を使用します。
nodebrew install-binary v5.10.1
インストールが完了したら、使うバージョンを決めます。1個しか入れていませんが、ちゃんとバージョンを指定しないと使えません。
nodebrew use v5.10.1
さて、これでNode.jsが使えるようになったはずです。バージョンを確認してみましょう。
node -v
「v5.10.1」と表示されれば完了です。
WxBeaconの開発をはじめましょう。まずは、ライブラリ一式をダウンロードします。gitコマンドが入っていない場合は、sudo aptitude install git
を実行して、gitコマンドをインストールしてからチャレンジしてください。
git clone https://github.com/weathernews/WxBeacon-node.git
ダウンロードしたライブラリーのディレクトリに移動します。
cd WxBeacon-node
WxBeaconのライブラリは、Bleaconという別のライブラリが必要で、Bleaconはさらに別のライブラリを必要とします。これを「依存関係」と言いますが、先ほどgitコマンドで持ってきたWxBeaconライブラリには、依存関係のライブラリは入っていません。ライブラリを持ってくる作業が必要です。
この作業を自動化してくれるのが、Node.jsについているnpm(Node Package Manager)というコマンドです。npmを使うと、依存関係を自動で調べて、ダウンロード、設定、コンパイルなどの作業をすべて自動でやってくれます。以下のコマンドを実行してください。
npm install
大量の絵文字が流れ、コマンド入力状態になったら準備完了です。サンプルも兼ねて確認用のプログラムがindex.jsという名前でライブラリに入っていますので、それを実行してみましょう。
node index.js
noble warning: adapter state unauthorized, please run as root or with sudo
or see README for information on running without root/sudo:
https://github.com/sandeepmistry/noble#running-on-linux
bleno warning: adapter state unauthorized, please run as root or with sudo
or see README for information on running without root/sudo:
https://github.com/sandeepmistry/bleno#running-on-linux
おっと、何か小難しいことを言われました。慌てずに英語を読んでみましょう。どうやらBluetoothアダプタを使うには管理者権限が必要なようですが、Bluetoothを使おうとするたびに管理者権限が必要とされると、今後の自動化に支障が出てしまいます。そこで、指示されたURLを開いてみると、対策用のコマンドがあるようです。ページに書いてあるコマンドを打ってみましょう。
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
さて、もう一度チャレンジです。
node index.js
以下のようなログが出力されれば成功です。
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -36 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -36 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -35 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -39 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -35 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -35 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -39 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -35 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -36 }
WxBeacon { temperature: 22.2, humidity: 50, pressure: 1019.5, rssi: -34 }