「せばな」は言わない

綱の上を歩いたり、壁を登ったりする田舎のプログラマーのおはなし

【Raspberry Pi】IoT入門 温湿度・気圧の測定

f:id:tk_thunder:20180204105746j:plain

はじめに

ラズベリーパイを入手したは良いものの、これで何をしようか誰もが悩んだことがあるのではないでしょうか。例に漏れず僕も同じです。

さて、ひとしきり悩んだ後に決めたのはBME280というセンサを使用した温度、湿度、気圧の測定。
まぁ、単純にネット上の情報が多かったという理由なんですけどね!!

電子工作ド素人のメモですが一応残しておきます。

やることが決まれば早速準備に移りましょう。
まずは道具を揃えるところからです!大丈夫、アマゾンなら2日くらいで届けてくれますよ。

買うぞオラァ!

ブレッドボード

普通のブレッドボード

普通のブレッドボード

ジャンパーワイヤー(オス・メス)

BME280(今回のメイン)

はんだ付けが必要です!大丈夫簡単だから!

Raspberry Pi3(分かっていると思うがこれがないと始まらん)

↑僕はこれを買いましたが、電源やMicroSDが付属しないので、最初ならフルセットのやつ買ったほうがいいかもしれません。

組むぞ!

下記を前提とします。

  • Raspberry Pi OSインストール済み
  • ネットワーク、SSHなど接続におけるセットアップ済み
はんだ付け

今回使用するセンサは端子と基板が別れているのではんだ付けが必須です。
ハンダゴテがないなら準備しておきましょう。ハンダもね。
f:id:tk_thunder:20180204112534j:plain

こんな感じ。
「端子をブレッドボードに挿して、その上に基板を重ねてハンダ付けすると快適だよ^^^^^^」ってBOSS(上司)に教えてもらいました。

通信準備とか

さて、BME280はI2Cで制御するため、ラズパイのコンフィグからI2Cを有効にする必要があります。

$ sudo raspi-config

コンフィグ画面で
「5 Interfacing Options」→「P5 I2C」→「YES」を選択

I2Cを制御するツールをインストールします。

$ sudo apt-get install i2c-tools

Pythonのライブラリをインストールしておく。

$ sudo apt-get install python-smbus

スイッチサイエンス様が公開しているPythonのプログラムでセンサを制御します。
とりあえず保存しておきましょう。

bme280_sample.py

配線

終わって見れば簡単だったんですが、正直一番苦労しました。
だって間違えて燃えたりしたら嫌じゃないですか!ネット上に同じケースが無かったので、断片的な情報を組み合わせてやりました。

一番参考にしたのは下記の記事です。本当にありがとうございます。
algorithm.joho.info

まずはBME280とラズベリーパイのGPIOポートの配線図をラクガキしました。
○の横の数字がGPIOのピンの番号です。
f:id:tk_thunder:20180204200937j:plain

あとはラズベリーパイのGPIOも確認しておきましょう。
数字がGPIOのピン番号です。
f:id:tk_thunder:20180204113016p:plain


配線した感じ


動かす!

配線が終わったらまずはI2Cがセンサを認識しているか確認します。
下記のコマンドを投げましょう。

$ sudo i2cdetect -y 1

$ sudo i2cdetect -y 1←エルではなく数字のイチです

そしてこんな結果が帰ってくれば動作確認OKです。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --   

さて、いよいよPythonプログラムの実行です。

今回はPython3で実行しますので、下記のコマンドになります。

$ sudo python3 bme280.py 

すると…

  File "bme280.py", line 95
    print "pressure : %7.2f hPa" % (pressure/100)
                               ^
SyntaxError: invalid syntax

Oops!
エラー発生です。ん?よく見ると、print 〜ってのはPython2系の書き方ですね。
ちょっと修正しましょう。
面倒かもしれませんが、簡単ですよ。

$ sudo nano bme280.py

まずはエディタでプログラムを開きましょう。
ファイル名は自分でつけたものを指定してください。

おそらく3箇所あると思いますが、下記のようにprintメソッドが使われている箇所を変更します。
( )をつけるだけです。

print "pressure : %7.2f hPa" % (pressure/100)
↓に変更
print("pressure : %7.2f hPa" % (pressure/100))

修正できたら再度実行しましょう!ワクワク!!

Traceback (most recent call last):
  File "bme280.py", line 3, in <module>
    from smbus2 import SMBus
ImportError: No module named 'smbus2'

あぁん?(ブチギレ)

なんか「smbus2」が見つからんとか言ってますね。
Python3の環境にライブラリがインストールされていないんでしょう。

下記のコマンドでさっさとインストールしてしまいます。

$ sudo pip3 install smbus2

※もしこのコマンドでエラーが出たらpip3をインストールしていない可能性があります。
下記でインストールしちゃいましょう。

$ sudo apt-get install python3-pip

さて、気を取り直して実行です!

$ sudo python3 bme280.py 
temp : 23.21  ℃
pressure : 1003.94 hPa
hum :  25.03 %

うおおおおおおおおおおおおおお!
とれた!とれました!なんだか湿度が微妙に低すぎる気もしますが、ひとまずOKですね!!!

次はもう少し工夫して見ましょう!
DBとかと連携したいですね!