fbpx

AWS と Azure と Raspberry Pi (ラズパイ) で IoT してみた (1) #raspi #aws #azure

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

こんにちは!development チームでエンジニアをしている新人の星野です。
最近は IoT 関連の開発に関わることが多く、各クラウドサービスに触れる機会も増えてきました。

そこで、復習も兼ねて Raspberry Pi(以下「ラズパイ」)を使ってセンサーデータをクラウド上に送信したいと思います。
それだけだと面白くないのでひとつはアマゾン ウェブ サービス(以下「AWS」)上に、もうひとつは Microsoft Azure(以下「Azure」)上に同じような仕組みを作って比較してみたいと思います。

センサーは定番の温湿度センサーと照度センサーを使って職場の環境を記録してみます。
Node.js に慣れているのですが今回は Python でチャレンジしてみたいと思います。
イイねや PV 数が今後のモチベーションになるのでよろしくお願いします!

デバイスの準備

用意するもの
デバイス類は以下を 2セット用意しました。

デバイスとパーツのリスト

  • ラズパイ3
  • microSD カード
  • microUSB 電源アダプター
  • 温湿度センサー DHT11(写真左上)
  • 照度センサー TSL2561(DHT11 の右)
  • ブレッドボード
  • ジャンパーワイヤー(オス・メス) 7本
  • 10kΩ の抵抗
  • ケース

購入当時の金額は 1セットあたり 7,500 円くらいでした。
ラズパイは安かったネットで買い、パーツ類はお昼を食べがてら秋月電子で買い揃えました。
実際は買い忘れて何度かに分けて買い物へ出かけたのですが、会社が秋葉にあるのでこういう時にとても便利です。

初期設定をするため以下のものも用意しました。

  • ディスプレイ
  • キーボード
  • HDMI ケーブル

照度センサー(TSL2561)は半田づけが必要だったので半田とコテも用意しました。

因みにお昼は普段遠くてなかなか行けない神田たまごけんでオムライスを食べましたが写真はないです。お近くに寄られることがあれば行ってみてください。

OS のインストール

公式サイトから OS のイメージをダウンロードします。
https://www.raspberrypi.org/downloads/

今回は Raspbian の RASPBIAN JESSIE LITE(2017-03-02)にしました。
現在は新しいバージョンがリリースされています。
ZIP ファイルをダウンロードして解凍したら microSD カードにコピーします。

フォーマットには SD Card Formatter 4.0 を使いました。
https://www.sdcard.org/downloads/formatter_4/

OS の準備ができたのでラズパイに microSD カード、キーボード、HDMI ケーブルを挿してディスプレイとつなぎます。
最後に microUSB 電源アダプターをつないだらコンセントに挿して立ち上げます。

初期設定

OS のインストールが終わったらデフォルトのユーザー名とパスワードを入力してログインします。

ユーザー名 pi
パスワード raspberry

$ sudo raspi-config

今回は説明を省きますが安全のために Change User Password でデフォルトのパスワード変えるか
別途ユーザーを作ってデフォルトのユーザーから変えましょう。

Localisation Options

タイムゾーン等の設定を必要に応じてします。

I2 Change Timezone

Asia を選択してから Tokyo を選択して設定します。

ラズパイ の設定画面: Change Timezone

I4 Change Wi-fi Country

JP Japan を選択して OK します。

ラズパイ の設定画面: Change Wi-fi Country

Interfacing Options

照度センサーで I2C と SSH を使うため設定します。

P2 SSH

Yes を選択して OK します。

ラズパイ の設定画面: SSH

P5 I2C

Yes を選択して OK します。

ラズパイ の設定画面: I2C

設定を終えたら Finish を選択します。
再起動をするか求められるので Yes を選択します。
実は Locale の設定を変えてしまい、画面が豆腐だらけになった時はかなり焦りました。

無線 LAN の設定

/etc/network/interfaces を編集して wlan0 の設定を manual から dhcp に変更します。

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

次に、下記のコマンドで wpa_supplicant.conf に設定を追記します。
SSID と PASSPHRASE をお使いの無線 LAN ルーターの設定に置き換えてください。

$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'

wpa_supplicant.conf には PASSPHRASE に指定したパスワードが、コメントアウトして残ったままなのでその行を削除します。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSID"
#psk="PASSPHRASE"
psk=xxxxx…xxx
}

削除して保存したら再起動します。

$ sudo reboot

ようやく初期設定が終わりました!
無線 LAN が使えるようになったので、次はパッケージを入れていきます。

パッケージの追加

使用するパッケージ
かっこ内はバージョンです

  • build-essential (11.7)
  • git (2.1.4)
  • i2c-tools (3.1.1)
  • python-smbus (3.1.1)
  • python-dev (2.7.9)
  • python-pip (1.5.6)

$ sudo apt-get update
$ sudo apt-get install -y git build-essential python-dev python-pip python-smbus i2c-tools

update したら結構時間がかかりました。

Node.js のインストール (2017/7/6 追記)

下記のコマンドで、Node.js 4.x系をインストールします。

$ sudo git clone https://github.com/creationix/nvm.git /usr/local/nvm
$ sudo chmod 777 /usr/local/nvm
$ source /usr/local/nvm/nvm.sh
$ nvm install v4
$ sudo touch /etc/profile.d/nvm.sh
$ sudo chmod +x /etc/profile.d/nvm.sh
$ echo "source /usr/local/nvm/nvm.sh" | sudo tee -a /etc/profile.d/nvm.sh

ここまでくればあと一息です。

センサーの接続

温湿度と照度センサーを接続します。
ラズパイを終了して本体から電源を抜いて作業します。

$ sudo halt

温湿度センサー(DHT11)の接続

用意するもの

  • ブレッドボード
  • ジャンパーワイヤー(オス・メス) 3本
  • 10kΩ の抵抗

DHT11 のデータシートを参照して図のようにしてラズパイと接続します。

DHT11 の配線図

接続できたらラズパイを起動します。
ログインして温湿度センサーを扱うためのライブラリを取得します。

$ sudo git clone https://github.com/szazo/DHT11_Python.git lib/dht11

あとで照度センサーも使うので、ホームディレクトリ直下にライブラリをまとめることにしました。
取得した温湿度センサーライブラリのサンプルコードを実行して、実際にセンサーからのデータを取得してみます。

$ python lib/dht11/dht11_sample.py

センサーから温度と湿度が取得できていると思います。

Last valid input: 2017-04-07 10:10:47.651333
Temperature: 22 C
Humidity: 63 %
Last valid input: 2017-04-07 10:10:49.808183
Temperature: 22 C
Humidity: 62 %
Last valid input: 2017-04-07 10:10:50.887161
Temperature: 22 C
Humidity: 62 %
Last valid input: 2017-04-07 10:10:51.966035
Temperature: 22 C
Humidity: 62 %
Last valid input: 2017-04-07 10:10:53.044975
Temperature: 22 C
Humidity: 61 %
Last valid input: 2017-04-07 10:10:54.123979
Temperature: 22 C
Humidity: 61 %

照度センサー(TSL2561)の接続

用意するもの

  • ブレッドボード
  • ジャンパーワイヤー(オス・メス) 4本
  • 半田
  • 半田コテ

TSL2561 は事前に半田付けしておいてください。
先ほどと同様にデータシートを参照して図のようにしてラズパイと接続します。
今回も本体の電源を落としてから作業します。

TSL2561 の配線図

温湿度センサーと照度センサーを配置した写真です。
ブレッドボードの配置は抜き差ししやすいように間隔をあけていますと言いたいところですが指が太いのでこうなりました。

ブレッドボードと TSL2561

ラズパイと接続した図と実機の写真です。

DHT11 と TSL2561 の配膳図

ラズパイ と TSL2561 と DHT11

照度センサーを接続できたら電源を入れて起動します。
pip で照度センサを扱うためのライブラリをインストールします。

$ pip install tsl2561

次にサンプルコードを作成してセンサーからデータを取得してみます。

$ sudo touch tsl2561_sample.py

エディタで開いて照度を取得するコードを書いて保存します。

from tsl2561 import TSL2561

if __name__ == "__main__":
  tsl = TSL2561(debug=True)
  print(tsl.lux())

作成したサンプルコードを実行します。

$ python tsl2561_sample.py

時間帯や部屋の環境によって値が違うと思いますが成功していれば数値が表示されていると思います。
センサーの上を手で覆うと値が変わっているのが確認できると思いますがどうでしょうか?
これでラズパイのセットアップとセンサー間の動作確認が終わりました!

サクッと作れると思っていたら無線 LAN の設定でタイポになかなか気づかず地味にハマったり、
ライブラリがインストールできてもバグがあったり、互換性の問題だったりと思っていたより時間がかかってしまいました。
こうして復習してみると同じところでつまづいていたり、細かな気づきがあるので振り返りって大事ですね。
ということで、次回はセンサーデータをクラウドに上げる準備です。次回もよろしくお願いします!

新規CTA