温湿度・気圧のロガーを作る #3

**[1話 センサー1つ+Ambient編](https://qiita.com/after-a-rain/items/20d337702f93cd589044)** / **[2話 センサー2つ+Ambient編](https://qiita.com/after-a-rain/items/80fe94cb3b2870ea9f0c)** / **[3話 センサー4つ編](https://qiita.com/after-a-rain/items/f64626f3f72e62b783c0)**
**[4話 SDカード記録編](https://qiita.com/after-a-rain/items/d736854791fa27aea543)** / **[5話 システム時刻・NTP編](https://qiita.com/after-a-rain/items/ec9e772df0c6ea029e84)**

あらすじ: 2個BME280をつけて、データ取得しAmbientに飛ばすことができました。

# 3話

4つ一度にデータを取得できるかどうかを試していきます。Ambientまでは大変そうなのでやっていません。

## 用意したもの

- Arduino的なもの ESP-WROOM-02開発ボード (SwitchScience)  **×1**  
  https://www.switch-science.com/catalog/2500/
- 温湿度・気圧センサー BME280 (SwitchScience)  **×4**  
  https://www.switch-science.com/catalog/2236/



## やったこと

SPI接続のCSを指定してあげれば何個でもいけるのではないか、と考えそのままやってみました。

| SPI接続 | ESPr Developer | BME280           |
| :------ | :------------- | ---------------- |
| MISO    | IO12           | SDO              |
| CLK     | IO14           | SCK              |
| MOSI    | IO13           | SDI              |
| **CS**  | **IO15**       | CSB (**BME(1)**) |
| **CS**  | **IO16**       | CSB (**BME(2)**) |
| **CS**  | **IO02**       | CSB (**BME(3)**) |
| **CS**  | **IO05**       | CSB (**BME(4)**) |
| GND     | GND            | GND              |
| +3.3V   | 3v3            | Vcore            |
| +3.3V   | 3v3            | Vio              |

写真を見てもらえると分かる通り**(更新予定)**、BME280が1つの時を単純に4倍した配線をしているのでぐちゃくちゃです。
仕組みは簡単ですがこの先8つ付けるとなると、I2C接続を検討しなければならないと思っています。

ソースコードは次の通りで、こちらもただ4倍にしただけです。

ここまでくると、流石に関数化したいです。(それがプログラムの強みなのに・・・)
forループで1~4まで指定して回して、引数にBMEの何番目をもつ関数を作りたいのですが、ちょっとよく解っていません。
となると、すこしクラスの方をいじらなくてはならない気もしています。
とりあえずこれでうまくいきました。

```c#
/*
 * BME280で5秒毎に温度、湿度、気圧を測定し、シリアルモニタに出力する
 */

#include <ESP8266WiFi.h>
#include <SPI.h>
#include "BME280_SPI.h"

#define BME_CS1 15
#define BME_CS2 16
#define BME_CS3 2
#define BME_CS4 5

#define PERIOD 5

BME280 bme1;
BME280 bme2;
BME280 bme3;
BME280 bme4;

void setup()
{
    Serial.begin(115200);
    delay(10);

    Serial.println("Start");

    bme1.begin(BME_CS1);
    bme2.begin(BME_CS2);
    bme3.begin(BME_CS3);
    bme4.begin(BME_CS4);
}

void loop()
{
    double temp, humid, pressure;


    temp = bme1.readTemperature();
    humid = bme1.readHumidity();
    pressure = bme1.readPressure();

    Serial.print("BME1:: ");
    Serial.print("temp: ");
    Serial.print(temp);
    Serial.print(", humid: ");
    Serial.print(humid);
    Serial.print(", pressure: ");
    Serial.println(pressure);

    temp = bme2.readTemperature();
    humid = bme2.readHumidity();
    pressure = bme2.readPressure();

    Serial.print("BME2:: ");
    Serial.print("temp: ");
    Serial.print(temp);
    Serial.print(", humid: ");
    Serial.print(humid);
    Serial.print(", pressure: ");
    Serial.println(pressure);

    temp = bme3.readTemperature();
    humid = bme3.readHumidity();
    pressure = bme3.readPressure();

    Serial.print("BME3:: ");
    Serial.print("temp: ");
    Serial.print(temp);
    Serial.print(", humid: ");
    Serial.print(humid);
    Serial.print(", pressure: ");
    Serial.println(pressure);

    temp = bme4.readTemperature();
    humid = bme4.readHumidity();
    pressure = bme4.readPressure();

    Serial.print("BME4:: ");
    Serial.print("temp: ");
    Serial.print(temp);
    Serial.print(", humid: ");
    Serial.print(humid);
    Serial.print(", pressure: ");
    Serial.println(pressure);
    

    delay(PERIOD * 1000);
}
```
 
   
   
**[4話に続きます](https://qiita.com/after-a-rain/items/d736854791fa27aea543)**


## 参考文献

勝手にソースコードを拝借しています。すみません。ありがとうございます。
何かあればお申し付けください。

+ ESP8266 with two BME280 Sensors over SPI – Robot Zero OneRobot Zero One  
  https://robotzero.one/esp8266-two-bme280-sensors-spi/
+ 温度、湿度、気圧を測定し、記録する - AmbientでIoTをはじめよう  
  https://pages.switch-science.com/letsiot/temphumidpress/