Arduino UNO R4 WiFi で外気温を測る ① BME280をつなぐ
4回の連載で、外気の気温や湿度を測り、Wi-Fi経由で室内側のPCやArduinoで読み込みます。Wi-Fiで通信するので、マイコン・ボードは Arduino UNO R4 WiFiモデルを利用します。
製作した測定システムを家の外に設置すれば一番ベストですが、そのためには電源を用意しなければなりません。
ここでの実験では、I2Cバスを数mほど伸ばしてセンサを室外に置き、マイコン・ボードは室内に置いて利用します。
●環境
- Arduino IDE;2.3.8
- Windows11;25H2
- Arduino UNO R4 WiFi 1.5.3 PCはマザーボードのUSBポートから直接つなぐ。
●利用するセンサはBME280
ポピュラな温度、湿度、気圧を測定できるボッシュのセンサBME280を利用します。I2CバスのインターフェースはQWIICの4ピン・コネクタです。
AdafruitのBME280ボードをArduino UNO R4 WiFiにつなぎました。
I2CバスにつながっているBME280のスレーブ・アドレスを調べるために、次に示すscanner.inoを動かします。
Arduino UNO R4 WiFiのQWIICコネクタのI2CインスタンスはWire1です。
#include <Wire.h>
// Set I2C bus to use: Wire, Wire1, etc.
#define WIRE Wire1
void setup() {
WIRE.begin();
Serial.begin(9600);
while (!Serial)
delay(10);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
WIRE.beginTransmission(address);
error = WIRE.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
実行します。0x77に見つけてきました。
BME280は、Adafruitのライブラリを利用します。
インストールの途中で別の画面が出ますが、必要なので、全てをインストールします。
サンプル例bme280testを読み込みます。
QUIICコネクタにつないでいるので、下図のように&Wire1に修正します。
実行します。
温度、気圧、湿度を表示しました。
●長いケーブルを作る
I2Cバスは近距離用なので、せいぜい20cm程度の長さで使うことが多いです。でも、室外にセンサだけを出したいので、長めのケーブルを用意しました。
電源は赤(Vcc)と黒色(GND)のケーブルですが、信号線の2本は、手元に合った色のケーブルを使いました。