1話 センサー1つ+Ambient編 / 2話 センサー2つ+Ambient編 / 3話 センサー4つ編
4話 SDカード記録編 / 5話 システム時刻・NTP編
あらすじ: 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の何番目をもつ関数を作りたいのですが、ちょっとよく解っていません。
となると、すこしクラスの方をいじらなくてはならない気もしています。
とりあえずこれでうまくいきました。
/*
* 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);
}
参考文献
勝手にソースコードを拝借しています。すみません。ありがとうございます。
何かあればお申し付けください。
- 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/