やっと完成しました。
温度・湿度・気圧センサー BME280
ディスプレイ SSD1306
RTC DS3231
ボタンを押すと10秒間だけ表示するス
イッチ(プルアップ方式)
通信方式はI2C方式に統一しました。
SPI通信とI2Cを同時に動かすと
どうも上手くいきませんでした。
スケッチはChatGPTに書いてもらいました。
パソコンを替えたら、コンパイルがもの凄く
早くなりました。
いえーい!
うれしい!
スケッチを下記に記載します。
ーーーーーーーーーーーーーーーーーーー
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <Adafruit_BME280.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS3231 rtc;
Adafruit_BME280 bme;
const int BUTTON_PIN = 4; // D4ボタン
bool displayActive = false;
unsigned long displayStartTime = 0;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // D4をプルアップ設定
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 初期化失敗");
while (1);
}
if (!rtc.begin()) {
Serial.println("RTC 初期化失敗");
while (1);
}
if (!bme.begin(0x76)) {
Serial.println("BME280 初期化失敗");
while (1);
}
display.clearDisplay();
display.display();
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // D4のボタンが押された
displayActive = true;
displayStartTime = millis();
}
if (displayActive) {
unsigned long elapsedTime = millis() - displayStartTime;
if (elapsedTime >= 10000) { // 10秒経過
displayActive = false;
display.clearDisplay();
display.display();
} else {
showSensorData(); // OLED に表示
}
}
}
void showSensorData() {
display.clearDisplay();
DateTime now = rtc.now();
float temp = bme.readTemperature();
float humidity = bme.readHumidity();
float pressure = bme.readPressure() / 100.0F;
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// ⏰ 時間を "09:02" のようにゼロ埋めで表示
char timeStr[6];
sprintf(timeStr, "%02d:%02d", now.hour(), now.minute());
display.setCursor(0, 0);
display.print("Time: ");
display.print(timeStr);
display.setCursor(0, 16);
display.print("Temp: "); display.print(temp); display.println(" C");
display.setCursor(0, 32);
display.print("Humidity: "); display.print(humidity); display.println(" %");
display.setCursor(0, 48);
display.print("Pressure: "); display.print(pressure); display.println(" hPa");
display.display();
}
ーーーーーーーーーーーーーーーーーー