Arduino NANO を使って BME280 で計測し LCD(16x2) に表示する
Arduino NANO を使って BME280 で、温度・湿度・気圧を計測し、結果を LCD(16x2) に表示する。
当初、LCD(16x2)の使い方が分からないので、ブログの簡単な事例でトライアルしてみたが、正しいはずの Sketch で、エラー無くコンパイルされたのに、画面は真っ白のまま・・・何故なのだろうと調べた挙句、LCD裏面の可変抵抗を調整して画面の明るさを加減しないと、表示された文字が見えないという事が分かった。わかってしまえば簡単な事なのに・・・、それで表示問題は解決。
BME280 と LCD どちらも I2C で接続するにはどうすれば良いのか・・・と悩んでいたが、BME280 は SPI 接続し、LCD は I2C 接続する方法で試したら上手くできた。Arduino NANO との接続方法は、下記の Sketch の中に書き入れた。
LCD は2行表示なので、温度、湿度、気圧を同時に表示することは出来ない。 2行を使い3行分のデータを順にまわして表示するか・・・とも考えたが、Sketchが面倒なので、温度表示は固定し、湿度と気圧を 3秒毎に上書き表示するようにしてみた。1行分のデータを、それぞれめいっぱい使えば、上書き時に完全に置き換えが出来る。
シリアルモニターにも表示できるようにしておいた。
という事で、スケッチは下記のようにすれば、完成!
【注記】表示されている温度と湿度に関していえば、温度は2℃ほど高めに表示されるし、湿度は10%ほど低めに表示されるようだ。
気圧に関しても正確な値を表示していないかもしれない。それぞれ補正出来れば良いのですが・・・
《Sketch》
// Even though the sketch is correct,
// the text can not be seen without adjusting the LCD contrast.
// BME280 --- Arduino NANO (SPI connection)
// CSB --- D10
// SDA --- D11
// SDO --- D12
// SCL --- D13
// LCD(16x2) --- Arduino NANO (I2C connection)
// GND --- GND
// VCC --- 5V
// SDA --- A4
// SCL --- A5
#include <Wire.h>
#include "SparkFunBME280.h"
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x3F
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2); // I2C: 0x3F, 16x2 LCD
const int SPI_CS_PIN = 10;
BME280 sensor;
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(115200);
Wire.begin();
sensor.beginSPI(SPI_CS_PIN);
}
void loop() {
Serial.print("Temp: ");
Serial.print(sensor.readTempC(), 2);
Serial.print(" °C, Humidity: ");
Serial.print(sensor.readFloatHumidity(), 2);
Serial.print(" %, Pressure: ");
Serial.print(sensor.readFloatPressure() / 100.0, 1);
Serial.println(" hPa");
lcd.setCursor(0, 0);
lcd.print("Temp. " + String(sensor.readTempC()) + " deg");
lcd.setCursor(0, 1);
lcd.print("Humid. " + String(sensor.readFloatHumidity()) + " % ");
delay(3000);
lcd.setCursor(0, 1);
lcd.print("Prs. " + String(sensor.readFloatPressure()/ 100.0) + " hPa");
delay(3000);
}
Recent Comments