#include <M5StickCPlus.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_SHT31.h>
#include <Wire.h>
#include <ArduinoJson.h>
#include <WiFi.h>
#include <HTTPClient.h>
Adafruit_SHT31 sht3x = Adafruit_SHT31(&Wire);
Adafruit_BMP280 bme = Adafruit_BMP280(&Wire);
const char* ssid = "TP-Link_9320"; // ご自身のWi-Fi情報に置き換えてください
const char* password = "31037433"; // ご自身のWi-Fi情報に置き換えてください
const char* apiKey = "32ba3c602e6cf9a4a7ab63dd691bbe0f"; // ご自身のOpenWeatherMap APIキーに置き換えてください
const char* cityID = "1850147"; // 取得したい都市のIDに置き換えてください
float sensorTemp = 0.0;
float sensorHum = 0.0;
float outsideTemp = 0.0;
float outsideHum = 0.0;
void setup() {
M5.begin();
Wire.begin(32,33);
M5.Lcd.setRotation(3);
M5.Lcd.setTextSize(3);
Serial.begin(115200);
// Wi-Fi接続
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to WiFi");
// センサー初期化
Serial.println(F("Initializing sensors..."));
while (!bme.begin(0x76)) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
M5.Lcd.println("Could not find a valid BMP280 sensor, check wiring!");
}
while (!sht3x.begin(0x44)) {
Serial.println("Could not find a valid SHT3X sensor, check wiring!");
M5.Lcd.println("Could not find a valid SHT3X sensor, check wiring!");
}
// ディスプレイ初期化
M5.Lcd.fillScreen(TFT_BLACK);
}
void loop() {
// センサーから温度と湿度を取得
sensorTemp = sht3x.readTemperature();
sensorHum = sht3x.readHumidity();
// 外部APIから温度と湿度を取得
outsideTemp = getOutsideTemperature();
outsideHum = getOutsideHumidity();
// 温度と湿度の表示
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.setTextColor(TFT_WHITE);
M5.Lcd.setTextSize(2);
M5.Lcd.printf("SensTemp: %.2f C\n", sensorTemp);
M5.Lcd.printf("SensHumidity: %.2f%%\n", sensorHum);
M5.Lcd.printf("OutTemp: %.2f C\n", outsideTemp);
M5.Lcd.printf("OutHumidity: %.2f%%\n", outsideHum);
M5.Lcd.println();
// 誤差の表示
float tempError = sensorTemp - outsideTemp;
float humError = sensorHum - outsideHum;
M5.Lcd.printf("TemError: %.2f C\n", tempError);
M5.Lcd.printf("HumidityError: %.2f%%\n", humError);
delay(5000); // 5秒ごとに更新
}
float getOutsideTemperature() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.openweathermap.org/data/2.5/weather?id=" + String(cityID) + "&appid=" + String(apiKey) + "&units=metric";
Serial.println("Weather API URL: " + url);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
float temp = doc["main"]["temp"];
http.end();
return temp;
} else {
Serial.println("Error getting weather data");
return -273.15; // エラー時は絶対零度を返す
}
} else {
Serial.println("WiFi Disconnected");
return -273.15; // エラー時は絶対零度を返す
}
}
float getOutsideHumidity() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.openweathermap.org/data/2.5/weather?id=" + String(cityID) + "&appid=" + String(apiKey) + "&units=metric";
Serial.println("Weather API URL: " + url);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
float humidity = doc["main"]["humidity"];
http.end();
return humidity;
} else {
Serial.println("Error getting weather data");
return -1; // エラー時は-1を返す
}
} else {
Serial.println("WiFi Disconnected");
return -1; // エラー時は-1を返す
}
}