Raspberry Piで取得したセンサーデータをリアルタイムに可視化する(導入編)

Posted: / Modified: / Tags: Raspberry_Pi Node.js



Raspberry Piを買ったは良いもののLチカで止まってる、なんて人は少なくないんじゃないでしょうか?

センサーデータがうまく取得できなかったり、通信の部分がよくわからなかったり、色々な理由があるかと思います。

そこで今回は、Raspberry Piでセンサーデータを取得して、Milkcocoaを使ってリアルタイムにブラウザ上にグラフ化する過程を、導入部分からひとつひとつ説明したいと思います。

今回は導入編ということで、以下の流れで説明してきます。

  1. Raspberry Piのインストール
  2. Raspberry Piを持ち運べるようにする
  3. Node.jsのインストール
  4. Milkcocoaのインストール
  5. Milkcocoaのメソッドの動作テスト

Raspberry Piのインストール

Raspberry Piでは、まず作業用PCでSDカードにRaspberry PiのOSインストール用ファイルを入れます。そのSDカードをRapberry Piに差し込んでインストールを行います。2つの方法を紹介するので自分にあった方法を選択してください。

方法1. Raspberry Piで直接インストールする方法

Raspberry PiにUSBキーボードを接続して直接コマンドを入力する、一般的なインストール方法です。こちらの記事がわかりやすいので、そちらを参考にしながらインストールして下さい。

この方法でインストールする場合は以下の機材が必要になります(全部持っていない場合は、ちょっと初期コスト高めですが...)

  • HDMI端子があるディスプレイとそれをつなげるHDMIケーブル(最安で1万円くらい)
  • USBキーボード(最安で1,000円くらい)
  • ルーターとそれをつなげるLANケーブル
  • MicroUSB電源(Android機を充電するやつ)
  • MicroSDカード(16GBで1,000円くらい)とそれを読めるPC

Raspberry Piとあわせると20,000円くらいいきそうです。

方法2. 作業用PCからRaspberry Piのコマンドを叩いてインストールする方法

※追記(11月8日):「ディスプレイ・キーボード・LANケーブルが必須っていうのはちょっと・・・」という方ののために、それらを使わずにインストールする方法も紹介します。

作業用PCからscreenコマンドを使って、Raspberry Piのコマンドを叩いてインストールする方法です。

この方法でインストールする場合は以下の機材が必要になります。

  • MicroUSB電源&ケーブル(RasPiへの電源供給用のケーブル)
  • MicroUSBケーブル(こっちはシリアル通信用のケーブル)
  • MicroSDカード(16GBで1,000円くらい)とそれを読めるPC
  • FTDI USBシリアル変換アダプター(スイッチサイエンスで1,500円)

手順は以下です。

・SDカードにRaspberry Pi OSインストール用ファイルを書き込む

  1. 作業用PCでSD Formatterをダウンロード&インストールする
  2. 作業用PCにSDカードを差し込み、先ほどのSD Formatterを使ってフォーマット(注:カードの名前は全て大文字で「上書きフォーマット」を使用してください)
  3. Raspberry Pi公式サイトのダウンロードページから、Raspbian OSのZIPをダウンロードします(種類がいくつかありますがよくわからない方はJESSIEで大丈夫です)。
  4. こちらの記事(Raspberry Pi OSをインストールする)を参考にSDカードにOSを書き込む(書き込み先を間違えると作業用PCのシステムを壊す可能性あるので慎重に)

・作業用PCでRaspberry Piのコマンドラインを操作できるようにする

  1. こちらのページから、変換アダプタのためのFTDIドライバ(お使いの環境にあった)をダウンロード&インストール
  2. PCと変換アダプターをMicroUSBで接続&変換アダプターとRaspberry Piをジャンパワイヤーで3カ所接続(RasPiのGNDをアダプタのGND、RasPiのRXをアダプタのTX、RasPiのTXをアダプタのRX
  3. 作業用PCのコマンドラインでls /dev/tty.まで打ってタブキーを押して、ls /dev/tty.usbserial-ABCD123みたいなのが出てくるので確認。
  4. 確認した英数字を使って、screen -l /dev/tty.usbserial-ABCD123 115200というコマンドを叩くと、Raspberry Piのコマンドラインに入れます。

・Raspberry Piの電源を入れてコマンドが打てるか確認

  1. Raspberry PiにMicroUSB電源を差す(勝手に起動する)
  2. raspberrypi login:が出るか確認

こちらは、Raspberry Piとあわせても、8,000円くらいで済むかと思います。

Raspberry Piを持ち運べるようにする

上記の機器と繋いだままで問題なく使えるんですが、センサーを付ける以上いろいろな場所に置きたいので、あらゆるしがらみから解放してあげます。

持ち運べるようにしたい場合は追加で以下の機材も必要です。

  • USB無線LAN子機(最安で750円くらい)
  • モバイルバッテリー

以下の3つを行います。

  • USB無線LAN子機を付けてセットアップする
  • モバイルバッテリーを付けてみる
  • PCからRaspberry Piにsshで接続する

USB無線LAN子機を付けてセットアップする

※追記(2015-12-09):環境の違いなどで成功したり成功しなかったりするため、以前紹介したものは全部消して、以下WPA/WPA2で成功した方法を紹介します。(ハッカソン等、大人数が同じアクセスポイントを使っていると失敗しやすいので注意です)

Raspberry Piに無線LANアダプタを差したら、lsusbでアダプタが認識されているか確認してみます。

Raspberry Piコマンド
$ lsusb
Bus 001 Device 004: ID 2019:ab2a PLANEX GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]
...

商品名が表示されるかと思います。確認ができたら設定を始めます。まず以下で、暗号化されたパスフレーズを取得します。

Raspberry Piコマンド
$ wpa_passphrase your_SSID your_Passphrase
network={
  ssid="your_SSID"
  #psk="your_Passphrase"
  psk=XXXXXXXXXXXXXXXXXXXXXXX
}

これを/etc/wpa_supplicant/wpa_supplicant.confの一番下に貼付けます。

Raspberry Piコマンド
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# ここ以下が追加した部分
network={
  ssid="your_SSID"
  #psk="your_Passphrase"
  psk=XXXXXXXXXXXXXXXXXXXXXXX
}

※Raspberry Piのviコマンドでは、INSERTモードで矢印キーが使えないので注意です。

これでSSIDとPassphraseの設定が完了しました。次はIPに関する設定をします。

Raspberry Piコマンド
$ sudo vim /etc/network/interfaces
...
iface wlan0 inet manual
...

上記のように出てくるので、wlan0の部分のmanualの部分をdhcpにします。

Raspberry Piコマンド
$ sudo vim /etc/network/interfaces
...
#iface wlan0 inet manual
iface wlan0 inet dhcp
...

書き換えたら、wlan0を再起動します。

Raspberry Piコマンド
$ sudo ifdown wlan0
Killed old client process
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
...

$ sudo ifup wlan0
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
Internet Systems Consortium DHCP Client 4.3.1
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
...
bound to 192.168.0.6 -- renewal in 34911 seconds.

最後にbound to 192.168.0.6といったような文があれば成功です。

ネットに繋がってるか確認するためにvimをインストールしてみましょう。

Raspberry Piコマンド
sudo apt-get update
sudo apt-get install vim

アップデート&インストールできたら、成功です。

※以下は以前書いていた方法です。


こちらの記事を参考に、購入&セットアップして下さい(私はPLANEXの方を買って、ちゃんと動いています)。

ただ、最後のファイル(/etc/network/interfaces)は、記事の書き方では動かなかったので、私がやって動いたやり方を以下に書きます。

まず、/etc/network/interfacesの中身を見ます。

Raspberry Piコマンド
$ cat /etc/network/interfaces

すると以下のようなコードが出てくるんじゃないかと思います(わかりやすいようにコメントを入れています)。

/etc/network/interfaces
auto lo

iface lo inet loopback
# Ethernet(LANケーブルで繋いでいるネットワーク)の設定
iface eth0 inet dhcp

# 無線LANの設定
allow-hotplug wlan0
iface wlan0 inet manual

wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

ここで、(LANケーブルを繋いでいることを確認して)以下のコマンドでEthernetのIPアドレスを確認します。

Raspberry Piのコマンド
$ ifconfig
#出力#
eth0      Link encap:Ethernet  HWaddr b8:27:eb:4f:3f:e3
          inet addr:192.168.1.38  Bcast:192.168.1.255  Mask:255.255.255.0
          ...以下略

IPは私の場合、192.168.1.38だと確認できました。確認できたら、先ほどの/etc/network/interfacesを以下のように書き換えます。

Raspberry Piのコマンド
$ sudo vi /etc/network/interfaces
/etc/network/interfaces
auto lo

iface lo inet loopback
#iface eth0 inet dhcp

# EthernetのIPを固定する
iface eth0 inet static
address 192.168.1.38
netmask 255.255.255.0
gateway 192.168.1.1

auto wlan0
allow-hotplug wlan0
# 今度は無線LANのIPを自動設定する
iface wlan0 inet dhcp

#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

私は、上記のコードで問題なく動作しています(指定したIPアドレスから1ずれることがありますので、その場合は再度その数字をstaticにしなおしてください)。同じ要領で無線LANのIPをstaticにすることはできませんでした。。運が悪かっただけかもしれませんので、試してみてもいいかもしれません。


これで、LANケーブルのしがらみから解放されました。

モバイルバッテリーを付けてみる

こちらのまとめを参考に、既に持っているor新しく買ったモバイルバッテリーを繋いで、起動するか確認してみて下さい。

私はRaspberry Piを置きたい場所にコンセントがあって、そちらを利用しているので「このバッテリーは動きました」という動作確認の報告が出来ません、悪しからず。。

とりあえずこれで、コンセントのしがらみから解放されました。

PCからRaspberry Piにsshで接続する

残りはディスプレイとキーボードですが、作業用のパソコンでssh接続をすれば解決します。

ssh接続をする前に、先ほどの無線LANの方のIPアドレスをifconfigで確認します。

Raspberry Piのコマンド
$ ifconfig
#出力
wlan0     ...
          inet addr:192.168.1.6  Bcast:192.168.1.255  Mask:255.255.255.0
          ...以下略

IPが192.168.1.6だとわかったので、作業用パソコンから(作業用パソコンがRaspberry Piと同じネットワークに接続していることを確認して)ssh接続をします。

作業用パソコンのコマンド
$ ssh pi@192.168.1.6

パスワードを聞かれるので'raspberry'を入力したら、接続できるかと思います。

これで、ディスプレイとキーボードのしがらみから解放されて持ち運べるようになりました。

※なお、起動のたびにIPを自動設定するので、こちらの記事(Raspberry PiでAvahi を使ってホスト名でアクセスする)を参考に、ホスト名でsshできるようにすることをおすすめします。そうすると、以下のようにssh接続できるようになります。

作業用パソコンのコマンド
$ ssh pi@myraspi.local

Node.jsのインストール

Raspberry Piのハード側の準備が完了したので、ソフト側を導入していきます。

Node.jsは、こちらの方法でインストールできるかと思います。

私は、バージョン10.18をインストールして問題なく使えています。

Raspberry Piのコマンド
wget http://nodejs.org/dist/v0.10.18/node-v0.10.18-linux-arm-pi.tar.gz
...以下略

Milkcocoaのインストール

npm installでMilkcocoaをインストールします。

プロジェクトディレクトリをつくって、そこにインストールします。

Raspberry Piのコマンド
$ mkdir -p work/milkgraph
$ cd work/milkgraph
$ npm install milkcocoa

Milkcocoaに登録していない方は、Milkcocoaで登録をして、アプリの管理画面のapp idを控えておいてください。

これでAPIを使う準備が終わりました。

Milkcocoaのメソッドの動作テスト

準備が終わったので、Milkcocoaのメソッドが動くかどうかテストをしましょう。

Raspberry Piのコマンド
$ vi test.js
test.js
var MilkCocoa = require('milkcocoa');
// your-app-idの部分は、Milkcocoaに(無料)登録してアプリを作成した際に生成されるアプリ固有の文字列です。
var milkcocoa = new MilkCocoa('your-app-id.mlkcca.com');
var ds = milkcocoa.dataStore('test');

ds.on("push", function(data){
  console.log(data.value.message);
});

ds.push({message:'Hello World!'});

これを実行して、コンソールに'Hello World!'が表示されたら成功です。

Raspberry Piのコマンド
$ node test.js
Hello World!

次回はセンサーデータの取得方法を説明します。

今回は、Raspberry PiでMilkcocoaを使い始めるまでを説明しました。次回は、照度センサーのデータを取得してデータストアに保存するまでを説明したいと思います。

以下のキットを使用するので、早めに準備しておきたい方は買っておくと良いかと思います。

ハック ラズベリーパイ Raspberry Pi 電子工作入門キット。

次回:Raspberry Piで取得したセンサーデータをリアルタイムに可視化する(センサー編)


※Raspberry PiやTesselでMilkcocoaを使うハンズオンが7月6日に開催されます。マイコンボードを持っていない方も会場で購入できるので、興味を持たれた方は是非参加してみて下さい!