This project is meant to monitor the temperature for a certain room: the room where the sensor will be placed. It only prints data when the temperature changes by at least 0.5 °C since the last printed temperature value. It also plays a notification sound when this change of temperature occurs. The project consists of two separate parts:
Following hardware components were used in order to achieve the desired result:
The following libraries were necessary:
#include "Zanshin_BME680.h" #include <Arduino.h> #include <WiFi.h> #include <Firebase_ESP_Client.h>
The Wi-Fi setup and connection:
WiFi.begin (WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to Wi-Fi..."); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(300); }
The BME680 setup:
// Code taken from the "I2CDemo" example. BME680_Class BME680; float altitude(const int32_t press, const float seaLevel = 1013.25); float altitude(const int32_t press, const float seaLevel) { static float Altitude; Altitude = 44330.0 * (1.0 - pow(((float)press / 100.0) / seaLevel, 0.1903)); return (Altitude); }
Firebase setup:
config.api_key = API_KEY; config.database_url = DATABASE_URL; /* Sign up */ if (Firebase.signUp(&config, &auth, "", "")) { Serial.println("ok"); signupOK = true; } else { Serial.printf("%s\n", config.signer.signupError.message.c_str()); } /* Assign the callback function for the long running token generation task */ config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h Firebase.begin(&config, &auth); Firebase.reconnectWiFi(true);
The loop() function:
void loop() { if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 1000 || sendDataPrevMillis == 0)) { sendDataPrevMillis = millis(); static int32_t temp, humidity, pressure, gas; // BME readings BME680.getSensorData(temp, humidity, pressure, gas); if (Firebase.RTDB.setFloat(&fbdo, "test/float", (float)(temp / 100.0f))) { Serial.println("PASSED"); Serial.println("PATH: " + fbdo.dataPath()); Serial.println("TYPE: " + fbdo.dataType()); } else { Serial.println("FAILED"); Serial.println("REASON: " + fbdo.errorReason()); } } }
As said before, the data read from sensor is saved in Firebase and is updated in real time in the output of the python script.
In order for the Python script to run, the playsound3 library needs to be installed. Here is a simple way to install it via pip:
pip install git+https://github.com/sjmikler/playsound3.git
Running the python script is done as follows: