BluemixでIoT　温湿度、気圧を収集・蓄積・可視化＋LED制御 その３

##０．はじめに
[前回](http://qiita.com/hino9966/items/c4ed3109a34d4cc93299)の続きです。今回は、センサとLEDをブレッドボードでRaspberry Piに接続します。簡単な動作確認までを範囲とします。

## １．必要なもの（今回準備したもの）
|項目|数量|メモ|
|---|:---:|---|
|ブレッドボード|1個|[ブレッドボード BB-102](http://akizukidenshi.com/catalog/g/gP-09257/)|
|温度・湿度・気圧センサ|1個|[BME280使用　温湿度・気圧センサ(AE-BME280)](http://akizukidenshi.com/catalog/g/gK-09421/)|
|ハンダごて|1個|[電子工作用はんだこてセット(X-2000E)](http://www.goot.jp/handakote/x-2000e/)|
|はんだ|1個|[高密度集積基板用はんだ](http://www.goot.jp/handakanren/sd-51/)|
|フルカラーLED|1個|[RGBフルカラーLED(OSTA5131A)](http://akizukidenshi.com/catalog/g/gI-02476/)|
|ジャンパーワイヤ(固い)|1セット|[ジャンパーワイヤ(EIC-J-L)](http://akizukidenshi.com/catalog/g/gP-00288/)|
|ジャンパーワイヤ(柔かい)|1セット|[ジャンパーワイヤ（オス－メス）](http://akizukidenshi.com/catalog/g/gP-03472/)|
|抵抗 51Ω|1セット|[カーボン抵抗(炭素皮膜抵抗)1/2W 51Ω(100本入)](http://akizukidenshi.com/catalog/g/gR-07800/)|
|抵抗 68Ω|1セット|[カーボン抵抗(炭素皮膜抵抗)1/2W 68Ω(100本入)](http://akizukidenshi.com/catalog/g/gR-07801/)|
|抵抗 330Ω|1セット|[カーボン抵抗(炭素皮膜抵抗)1/2W 330Ω(100本入)](http://akizukidenshi.com/catalog/g/gR-07812/)|

##２．参考にさせていただいたところ
[第39回「ラズベリーパイで温度・湿度・気圧をまとめて取得！AE-BME280でIC2通信」](http://deviceplus.jp/hobby/raspberrypi_entry_039/)
[https://github.com/karuru6225/bme280i2c(BME280 I2C用Node.jsソース)](https://github.com/karuru6225/bme280i2c)
[[Raspberry Pi 2] フルカラーLチカ](http://making.mrlittlebig.com/?p=54)
[LED抵抗値計算](http://diy.tommy-bright.com/)

##３．センサ・LEDの準備
手順を書こうとしたところ、すでに記載されているサイトがありましたので、[こちら](http://deviceplus.jp/hobby/raspberrypi_entry_039/)を参照ください。

**①BME280本体とピンヘッダをハンダ付けをする。**
**②BME280本体のジャンパ(J3)をハンダ付けをする。**
　こちらのセンサは、通信方式が2種類（I2C、SPI)をサポートしています。
　今回はI2Cを使用します。その場合は、ジャンパ(J3)部分を接続する必要があるため、
　ハンダ付けが必要になります。
**③フルカラーLED(OSTA5131A)に必要な抵抗値を求める。**
●抵抗値を求める計算式
　(電源電圧[V] - 順方向電圧降下(VF)[V]) ÷ 順方向電流(IF)[A] = 抵抗値[Ω]

VFとIF条件を[http://akizukidenshi.com/catalog/g/gI-02476/](http://akizukidenshi.com/catalog/g/gI-02476/) より抽出
☆IF=20mA（標準電流は20mA以下と記載されている）
VF(IF=20mAを標準として算出されている)
☆赤のVF：2.0V
☆緑のVF：3.6V
☆青のVF：3.6V

☆電源電圧=3.3V(Raspberry PiのGPIOポートの電圧）

上記5つの☆条件を元に、計算する。
赤の抵抗：(3.3-2.0)/(20*(1/1000))=1.3/0.02=65Ω
緑の抵抗：(3.3-3.6) この時点でマイナスなので、抵抗なし
青の抵抗：(3.3-3.6) この時点でマイナスなので、抵抗なし

よって、赤だけ抵抗が65Ω必要となります。

**※補足**
[LEDのページ](http://akizukidenshi.com/catalog/g/gI-02476/)に記載されている20mAにおける各色の輝度を見ると、下記のように赤・緑・青の明るさがそろっていません。
>◆輝度(IF=20mAにおける標準値）：
>　・赤：2000mcd
>　・緑：7000mcd
>　・青：2500mcd

そのため、このまま実行すると、各色の明るさがバラバラになってしまうので、
緑に330Ω、青に51Ωをつけて、明るさを微調整しました。

##４．Raspberry Piとセンサ・LEDを接続
**①BME280センサを接続する。**

|[AE-BME280]|結線|[ラズパイGPIO]|
|---|:---:|---|
|1番ピン(VDD)|<－－－－>|1番ピン(3.3v DC Power)|
|2番ピン(GND)|<－－－－>|6番ピン(Ground)|
|3番ピン(CSB)|未使用|N/A|
|4番ピン(SDI)|<－－－－>|3番ピン(SDA1,I2C)|
|5番ピン(SDO)|<－－－－>|6番ピン(Ground)|
|6番ピン(SCK)|<－－－－>|5番ピン(SCL1,I2C)|

接続図は、前述の[こちら](http://deviceplus.jp/hobby/raspberrypi_entry_039/)を参照ください

**②フルカラーLEDを接続する。**
　　　![image](https://qiita-image-store.s3.amazonaws.com/0/113879/8ba1bc95-3789-15d7-3370-bcc7b8129dcc.png)　RGBフルカラーLED(OSTA5131A)の図
　●一番長い部分はカソード。
　●右側が赤色LED
　●左側が緑色LED
　●緑とカソードの間が青色LED

|[OSTA5131A]|結線|[ラズパイGPIO]|
|:---:|:---:|---|
|赤|<－ 抵抗68Ω  －>|15番ピン(GPIO 22)|
|カソード|<－－－－－－－>|14番ピン(Ground)|
|青|<－ 抵抗51Ω －>|12番ピン(GPIO 18)|
|緑|<－抵抗330Ω－>|16番ピン(GPIO 23)|　
##５．Raspberry Piの準備
**①OSを最新状態にする。**
　次のコマンドを実行し、全て完了後に再起動する。

```text:コマンド
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo rpi-update

sudo reboot
```

**②I2Cの設定を有効にする。**

```text:コマンド
sudo raspi-config
```

 「8 Advanced Options      Configure advanced settings」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/45bc05e4-3f04-96af-9b5a-d093369e3244.png)

 「A7 I2C       Enable/Disable automatic loading」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/33a6ca95-2d95-f1ca-b173-7b9fa5896e17.png)
 
 「<はい>」を選択する。
 ![image](https://qiita-image-store.s3.amazonaws.com/0/113879/fab589de-b2c9-9786-5d2b-9e21beed025f.png)

 「<了解>」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/6342c8fb-ab1a-f415-50ca-65398bb3e636.png)

 「<はい>」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/a89382d3-4973-e66d-b521-0c47dad79cf0.png)

 「<了解>」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/36b363e1-9df4-f443-bf0f-4eaaedc35ffb.png)

 「<Ｆｉｎｉｓｈ>」を選択する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/dac7f9c0-87a6-c0d3-8168-e54f85ff4cc3.png)

 「<はい>」を選択し、OSを再起動する。
![image](https://qiita-image-store.s3.amazonaws.com/0/113879/a8324547-6e9e-7126-5dc0-a603bfb18d88.png)

**③OS起動時にカーネルモジュールを自動的に読み込むために設定変更する。**
/etc/modulesに、「i2c-dev」を追記する。

```text:/etc/modules
・・・(略)
i2c-dev
```
設定変更後、sudo rebootコマンドにてOSを再起動する。

**④I2C関連コマンドをインストールする。**

```text:インストールコマンド
sudo apt-get install i2c-tools　
```

**⑤確認用のpython-smbusをインストールする。**

```text:インストールコマンド
sudo apt-get install python-smbus
```

##５．BME280センサの動作確認
**①センサが読み込めるかを確認する。**

```text:確認コマンド
sudo i2cdetect -y 1
```
次のメッセージが出力されていれば、正しく認識されています。

```text:成功時のメッセージ
     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 -- 
```

**②サンプルプログラム(bme280_sample.py)を実行する。**
[こちら](http://deviceplus.jp/hobby/raspberrypi_entry_039/)にも記載されていますが、スイッチサイエンスさんにてPython用のサンプルソースが公開されていますので、こちらをそのまま利用します。
[bme280_sample.py](https://github.com/SWITCHSCIENCE/BME280/blob/master/Python27/bme280_sample.py)をダウンロードし、実行します。

```text:サンプル実行コマンド
sudo python bme280_sample.py
```
```text:実行結果(例)
temp : 28.18  ℃
pressure :  995.69 hPa
hum :  60.62 ％
```
##６．フルカラーLEDの動作確認
**①赤、緑、青がそれぞれを1回ずつ点灯させるサンプルPythonソース(color.py)を作成する。**

```py:フルカラーLED点灯サンプルソース(color.py)
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)

for x in range(1):
   GPIO.output(22, GPIO.HIGH)
   time.sleep(1)
   GPIO.output(22, GPIO.LOW)
   time.sleep(1)

for x in range(1):
   GPIO.output(23, GPIO.HIGH)
   time.sleep(1)
   GPIO.output(23, GPIO.LOW)
   time.sleep(1)

for x in range(1):
   GPIO.output(18, GPIO.HIGH)
   time.sleep(1)
   GPIO.output(18, GPIO.LOW)
   time.sleep(1)

GPIO.cleanup()
```

**②Pythonソースを実行する。**

```text:実行
sudo python color.py
```

赤　=> 緑 => 青の順でそれぞれ1秒ずつ点灯すれば、確認完了です。

以上で、BME280センサとLEDの確認は完了となります。

次回([その４](http://qiita.com/hino9966/items/0086cff6be2c82335def)）に続く。