0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-17

1話 センサー1つ+Ambient編 / 2話 センサー2つ+Ambient編 / 3話 センサー4つ編
4話 SDカード記録編 / 5話 システム時刻・NTP編

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

3話

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

用意したもの

やったこと

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);
}

4話に続きます

参考文献

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?