IKEAで買った温度・湿度付きの時計がすぐにズレるのが気になったので、手持ちのM5StickCPlus + ENVⅢ Hatで簡単につくってみました。ENV Hatを本体に直付けすると熱がこもるか本体の温度に引っ張られるような感じで+2~3℃上がってしまう問題があったので適当に引き伸ばしています。
世のサンプルコードでSHT3Dのインスタンスに対してinitを呼んでないことが多かったのですが、それだと起動時点で動作が止まってしまうので sht30.init()呼んでいます。
サンプル
#include <M5StickCPlus.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include "M5_ENV.h"
#include "Adafruit_Sensor.h"
#include <Adafruit_BMP280.h>
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600 * 9); // UTC+9 日本時間
String previousTime = ""; // 前回の時刻を保存するための変数
SHT3X sht30;
const char *ssid = "********"; // あなたのWiFiのSSID
const char *password = "********"; // あなたのWiFiのパスワード
uint16_t rgbToColor(uint8_t r, uint8_t g, uint8_t b) {
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
}
void setup() {
setCpuFrequencyMhz(80);
pinMode(33, INPUT_PULLUP); // GPIO33をプルアップ入力に設定
M5.begin();
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(BLACK);
uint16_t color = rgbToColor(100, 100, 100); // 赤色を指定
M5.Lcd.setTextColor(color);
M5.Lcd.setTextSize(5); // フォントサイズを大きく設定
// M5.Axp.ScreenBreath(10); // 液晶の明るさ設定
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
M5.Lcd.print('.');
delay(500);
}
timeClient.begin();
Wire.end();
Wire.begin(0, 26);
sht30.init(); //この関数を呼ぶサンプルがなくてエラー履いていたのが、追加で動作した・・・
}
void loop() {
timeClient.update();
String currentTime = timeClient.getFormattedTime();
if (currentTime != previousTime) {
// 温度と湿度の読み取り
sht30.get();
float temperature = sht30.cTemp; //Store the temperature obtained from shT30.
float humidity = sht30.humidity; //Store the humidity obtained from the SHT30.
// センサーの値を画面に表示
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 10);
M5.Lcd.println(currentTime);
M5.Lcd.setCursor(40, 50);
M5.Lcd.printf("%.1fC", temperature);
M5.Lcd.setCursor(80, 90);
M5.Lcd.printf("%.1f%%", humidity);
previousTime = currentTime;
}
delay(250);
}