#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_AHTX0.h>
#include "EspMQTTClient.h"
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 1200
//#define TIME_TO_SLEEP 5
#define WIFI_SSID "ANY_SSID"
#define WIFI_PASSWORD "ANY_PASSPHRASE"
#define MQTT_CLIENT_NAME "Balcony_Temp_Humi"
#define MQTT_TOPICS_TEMPHUMI "temp_humi/outer/balc"
//#define MQTT_CLIENT_NAME "Kitchen_Room_Temp_Humi"
//#define MQTT_TOPICS_TEMPHUMI "temp_humi/room/kitc"
//#define MQTT_CLIENT_NAME "Living_Dining_Room_Temp_Humi"
//#define MQTT_TOPICS_TEMPHUMI "temp_humi/room/ld"
const char TOPICS[] = MQTT_TOPICS_TEMPHUMI;
//#define MQTT_HOST_IP IPAddress(***, ***, ***, ***)
#define MQTT_HOST_IP "***.***.***.***"
#define MQTT_HOST_PORT 1883 // MQTTデフォルトポート
#define MQTT_USER_NAME "" // 省略可
#define MQTT_PASSWORD "" // 省略可
Adafruit_BMP280 bmp;
Adafruit_AHTX0 myAHT20;
EspMQTTClient client(
WIFI_SSID,
WIFI_PASSWORD,
MQTT_HOST_IP,
MQTT_USER_NAME,
MQTT_PASSWORD,
MQTT_CLIENT_NAME,
MQTT_HOST_PORT
);
uint8_t qos = 1;
void setup() {
Serial.begin(115200);
Serial.println(F("AHT20+BMP280 test"));
while (myAHT20.begin() != true) {
Serial.println(F("AHT20 not connected or fail to load calibration coefficient")); //(F()) save string to flash & keeps dynamic memory free
delay(5000);
}
Serial.println(F("AHT20 OK"));
if (!bmp.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void onMessageReceived(const String& msg) {
Serial.print("Message Received & deep sleep");
//Serial.println(msg);
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
}
void onConnectionEstablished() {
Serial.println("Connection Established.");
Serial.println("publish.");
sensors_event_t humidity, temp;
myAHT20.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
Serial.print("Temp BMP280: "); Serial.print(bmp.readTemperature()); Serial.println(" degrees C");
Serial.print("Temp AHT20: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
//Serial.print("Pressure: "); Serial.print(bmp.readPressure()); Serial.println(" Pa");
String message = (String)bmp.readTemperature() + " " + (String)humidity.relative_humidity + " " + (String)bmp.readPressure();
Serial.print("TOPICS : " + (String)TOPICS + " | ");
Serial.println("message : " + message);
Serial.println("Receiving Message ....");
//client.subscribe(TOPICS, [] (const String &payload) {
// Serial.println(payload);
//});
client.subscribe(TOPICS, onMessageReceived, qos);
client.publish(TOPICS, message);
}
void loop() {
client.loop();
}