ラズパイ+BME280でIoT環境センサー構築(その1)

##概要
Raspberry Piと[スイッチサイエンスのBME280モジュール](https://www.switch-science.com/catalog/2323/)を使用して、屋外の気温・湿度・気圧をモニターするIoTセンサーを構築する。Raspberry PiにWEBサーバーを入れ、ブラウザでグラフ化して表示できるようにする。スイッチサイエンスがサンプルコードを公開しているので流用する。
※はんだ付けが面倒なので、ピンヘッダー実装済みを使いました。
※Raspberry PiはすべてSSHからの操作です。SSHは接続できる前提とします。

いろんな方が同じ記事を書いていて今更感あるけど、備忘録として。
実際は半年くらい使っていますが、Pi3からZero Wに置き換えたついでで、手順をメモします。

##BME280をRaspberry Piに接続する
BME280はBOSHのセンサーICで、1チップで温度、湿度、気圧が測定できます。詳細はメーカーのデータシートを確認してください。また、センサーモジュールの回路図やデータシートはスイッチサイエンスのWEBからダウンロードできます。

###1.Raspberry Piとの接続
I2Cなのでデータ(SDI)とCLK(SCK)、電源(Vio)とGND(GND)のみつなげばいいはずですが、[WEBページ](https://www.switch-science.com/catalog/2236/)みるとI2Cアドレス設定のためにSDOをつなぐ必要があります。私は、GNDにつなぎました。
>I2Cアドレスの設定方法
I2Cアドレスは、
SDO端子をGNDにつなぐと0x76
SDO端子をVioにつなぐと0x77
になります。必ずどちらかにつないでください。

ブレッドボード上でSDOとGNDを接続し、4本をRaspberry Piに接続。写真じゃ配線は見えないけど。
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/8ea86e4c-6763-efec-85b4-0409e4f6f72b.jpeg)
基板のロットによって、PIN配置が違うようなので、古いblog等の情報は危険。
[回路図](https://docid81hrs3j1.cloudfront.net/medialibrary/2015/08/BME280_breakout.pdf)見ながら配線するのが安全。

###2.I2Cの有効化
まず、必要なライブラリを入れる。

```
sudo apt update
sudo apt -y upgrade    (必要に応じて)
sudo apt install -y i2c-tools
```
ハードウエアの設定画面を表示

```
sudo raspi-config
```
設定画面が表示されるので、Interfacing Optionsを選択(Enter)。これもOSのバージョンによってメニュー番号が変わることがあるので項目名で選ぶこと。
![キャプチャ3.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/4619e68d-5f05-0279-db31-4cba4c5df938.jpeg)
I2Cを選択。
![キャプチャ4.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/4c0fe73c-553c-1c38-06d1-1c2569af9ebf.jpeg)
有効にするか聞かれるので、はいを選択。
![キャプチャ5.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/c1d0987e-a390-2321-5625-e82631a2c9aa.jpeg)
古いOSだと自動起動にするか聞かれたようですが、特に聞かれず勝手に自動起動になります。
![キャプチャ6.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/4ec171a9-42dd-2730-e836-554420bf537c.jpeg)
最初の画面に戻るのでFinishで終了。

再起動する。

###3.動作確認
SDO端子をGNDにつないだので、下記コマンドで0x76が読めればOK。

```
sudo i2cdetect -y 1
```
![キャプチャ7.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/b24ebe78-42f9-72b3-e013-50a0932e778a.jpeg)

###4.サンプルコードの実行
smbus2をインストールする。
スイッチサイエンスのライブラリをダウンロードして準備する。

```
sudo apt install -y python-smbus
sudo pip install smbus2

wget https://github.com/SWITCHSCIENCE/BME280/archive/master.zip
unzip master.zip
cd BME280-master/Python27
```

動作確認。

```
sudo python ./bme280_sample.py
```
![キャプチャ8.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/dc45f36b-0b09-b7b8-02a2-f80db08af4c0.jpeg)
とりあえず動いたが、自動実行するにあたり、root権限ではなくユーザー権限で実行できるようにする必要がある。そのためにはI2Cを動かしているグループにユーザーを参加させればよい。
まず、I2CのデバイスIDを確認する。

```
sudo i2cdetect 1
```
![キャプチャ9.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/db2041ca-4e2c-8e3b-3180-72935ca1c9f8.jpeg)
yでもnでもいいので抜ける。
`/dev/i2c-1`なので、グループIDを確認する。

```
ls -la /dev/i2c-1
```
![キャプチャ10.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/36fcfa5a-16f9-7d04-980e-0d3abcf9c917.jpeg)
グループ名はi2cとわかったので、ユーザーpiをi2cに参加させる。

```
sudo usermod -aG i2c pi
```
再起動し、所属グループを確認する。

```
groups
```
![キャプチャ11.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/92fbb364-4dbd-1eb1-4ae6-b7bf574807bf.jpeg)
i2cがあればよい。他は使用環境により異なります。
ユーザー権限でサンプルコードを実行できることを確認。

```
python bme280_sample.py
```
![キャプチャ12.JPG](https://qiita-image-store.s3.amazonaws.com/0/276188/0bbe9e63-927c-a77c-f649-5b0a9bada810.jpeg)

とりあえずここまで。
[ラズパイ+BME280でIoT環境センサー構築(その2)](https://qiita.com/hawk777/items/a556a8542ce05d37afc6)でWEBサーバーを作り、ブラウザで表示できるようにします。

##参考
- [第39回「ラズベリーパイで温度・湿度・気圧をまとめて取得！AE-BME280でIC2通信」](https://deviceplus.jp/hobby/raspberrypi_entry_039/)