Skip to content

Raspberry Pi 3でWxBeaconを受信する

kob-to-wni edited this page Jul 25, 2016 · 6 revisions

必要な物

  • マイクロSDカード(8GB以上あると将来的にも余裕)
  • USBマイクロB ケーブル(スマホの充電ケーブルとして売られているものでよい)
  • USB充電器(1.0A以上だせるもの)
  • HDMIケーブル(スマホ用の小型のものではなく、通常のサイズのもの)
  • HDMIケーブルが接続できる画面
  • USB接続できるキーボード(Bluetoothキーボードは使えない)
  • インターネット回線
  • LANケーブル(既にラズパイからインターネットにアクセスできる状態なら無線LANでよい)

Raspberry Pi 3には無線LANがついてきますが、パスワード認証などが上手くいかないと時間を無駄にするので、繋いだら即インターネットが見られる有線LANでテストしましょう。

開封からOS起動まで

Under Construction

Node.jsをインストールする

賢明な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-nodeの開発をはじめる

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 }