#include <esp_log.h>
#include
#include
#include <sys/time.h>
#include <BLEDevice.h>
#include <BLEAdvertisedDevice.h>
#include <BLEClient.h>
#include <BLEScan.h>
#include <BLEUtils.h>
#include <sdkconfig.h>
#include <WiFi.h>
#include <WebServer.h>
#include <WiFiManager.h> //GitHub - TheBrunez/WIFIMANAGER-ESP32: wifimanager-esp32
#include <SerialMP3Player.h> //Download SerialMP3Player(Jiang).zip
#include <FirebaseESP32.h> //GitHub - mobizt/HTTPClientESP32Ex: Custom version of ESP32 HTTPClient Library.
#include <FS.h> //this needs to be first, or it all crashes and burns...
#include <SPIFFS.h>
#include <Arduino.h>
#include "esp_system.h"
#include "BLEDevice.h"
#include "BLEScan.h"
#include <ArduinoJson.h>
#include <Time.h>
#include <TimeLib.h> //GitHub - PaulStoffregen/Time: Time library for Arduino
#include <BlynkSimpleEsp32.h> //GitHub - blynkkk/blynk-library: Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc.
#define BLYNK_PRINT Serial // Defines the object that is used for printing
#define BLYNK_DEBUG // Optional, this enables more detailed prints
#define BLYNK_NO_BUILTIN // Disable built-in analog & digital pin operations
#define FIREBASE_HOST "fireplace-d81eb.firebaseio.com" //Do not include https:// in FIREBASE_HOST
#define FIREBASE_AUTH "HWzDSrP8WYfsYWrJAnluflxqwr4nPtVIUiZylv2k"
#define DEVICE_ID "Remote_Fireplace_1"
#define FAN_CTL 26
#define MP3_PWR_CTL 27
#define WIFI_STAT 13
#define FIRE_CTL 23
#define FAN_ON digitalWrite(FAN_CTL, HIGH);
#define FAN_OFF digitalWrite(FAN_CTL, LOW);
#define MP3_PWR_ON digitalWrite(MP3_PWR_CTL, HIGH);
#define MP3_PWR_OFF digitalWrite(MP3_PWR_CTL, LOW);
#define FIRE_ON digitalWrite(FIRE_CTL, HIGH);
#define FIRE_OFF digitalWrite(FIRE_CTL, LOW);
#define WIFI_LED_ON digitalWrite(WIFI_STAT, HIGH);
#define WIFI_LED_OFF digitalWrite(WIFI_STAT, LOW);
// ------------------------------------- Function Definition ---------------------------------------
// Pin Configuration of ESP32
void PIN_Init() {
pinMode(FAN_CTL, OUTPUT); // Initialize the FAN_CTL pin as an output
pinMode(MP3_PWR_CTL, OUTPUT); // Initialize the MP3_PWR_CTL pin as an output
pinMode(WIFI_STAT, OUTPUT); // Initialize the WIFI_STAT pin as an output
pinMode(FIRE_CTL, OUTPUT); // Initialize the FIRE_CTL pin as an output
}
// --------------------------------------------------------------------------------------------------
BlynkTimer timer_;
SerialMP3Player mp3;
WiFiManager wifiManager;
FirebaseData firebaseData;
static boolean connected = false, didItRun = false;
uint8_t* pData;
float temp;
float humi;
int n=0;
unsigned long startTime;
String path = "/Fireplace/" + String(DEVICE_ID);
int app_change, app_fan, app_fire, app_mp3, app_temp, app_volume;
int device_fan, device_fire, device_mp3;
int ble_check_cnt;
/* Defined in FreeRTOSConfig.h. */
extern void vConfigureTimerForRunTimeStats( void );
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vConfigureTimerForRunTimeStats()
TaskHandle_t BLEtaskHandle = NULL;
extern "C" {
#include "freertos/FreeRTOS.h"
#include "freertos/timers.h"
}
//#include <PubSubClient.h>
#define MQTT_SECURE false
#define UPDATE_TIME 60000
#define UPDATE_LIMIT 180000
static BLEUUID advertisedUUID("0000180f-0000-1000-8000-00805f9b34fb");
//static BLEUUID advertisedUUID("226c0000-6476-4566-7562-66734470666d");
// The remote service we wish to connect to.
static BLEUUID serviceUUID("226c0000-6476-4566-7562-66734470666d");
//static BLEUUID serviceUUID("180f-0000-1000-8000-00805f9b34fb");
// The characteristic of the remote service we are interested in.
static BLEUUID charUUID("226caa55-6476-4566-7562-66734470666d");
static BLEAddress* pServerAddresses[20];
static BLEAddress pServerAddress;
//BLEClient pClient;
static boolean doConnect = false;
static boolean connected_ = false;
//BLERemoteCharacteristic* pRemoteCharacteristic;
static int count=0;
static int current=0;
static bool scanning = true;
static double temperature;
static double humidity;
static unsigned long lastUpdate = 0;
//RTC retained values
RTC_NOINIT_ATTR float temp_rtc = 0.0;
RTC_NOINIT_ATTR float humi_rtc = 0.0;
RTC_NOINIT_ATTR static uint8_t FAN_CTL_ret = 0;
RTC_NOINIT_ATTR static uint8_t FIRE_CTL_ret = 0;
RTC_NOINIT_ATTR static uint8_t MP3_PWR_CTL_ret = 0;
//flag for saving data
bool shouldSaveConfig = false;
hw_timer_t * timer = NULL;
volatile SemaphoreHandle_t timerSemaphore;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
volatile uint32_t isrCounter = 0;
volatile uint32_t lastIsrAt = 0;