Added basic Scheduling Functionality

A JSON message can now be received on:
'vesper/DEV_ID/control/addSchedule"
Each message, must hold a "file" and "data".
The file is the month's name in 3 letter mode (eg jan, feb, mar)
The data is an entry for each day of the month.
Each day can be an array containing multiple items.
This commit is contained in:
2025-01-26 14:02:15 +02:00
parent 84534025f4
commit 7dd6f81264
254 changed files with 148509 additions and 946 deletions

View File

@@ -0,0 +1,18 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\.vscode\\arduino.json"
{
"port": "COM8",
"configuration": "UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default",
"output": "build",
"board": "esp32:esp32:esp32",
"programmer": "",
"useProgrammer": false,
"configurationRequired": true,
"monitorPortSettings": {
"port": "COM8",
"baudRate": 115200,
"lineEnding": "\r\n",
"dataBits": 8,
"parity": "none",
"stopBits": "one"
}
}

View File

@@ -0,0 +1,18 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\.vscode\\c_cpp_properties.json"
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:/Program Files/LLVM/bin/clang++.exe"
}
],
"version": 4
}

View File

@@ -0,0 +1,89 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\MQTT_Message_Handling.hpp"
#pragma once
void handlePlaybackCommands(char * command);
void setRelayDurations(JsonDocument& doc);
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Handles the incoming payload. Returns it into a "JsonDocument" format.
JsonDocument handleJSON(char * payload) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
}
return doc;
}
// Subscribes to certain topics on the MQTT Server.
void SuscribeMqtt() {
String topicPlayback = String("vesper/") + DEV_ID + "/control/playback";
String topicSetMelody = String("vesper/") + DEV_ID + "/control/setMelody";
String topicAddMelody = String("vesper/") + DEV_ID + "/control/addMelody";
String topicRelayTimers = String("vesper/") + DEV_ID + "/control/settings/relayTimers";
uint16_t control_id = mqttClient.subscribe(topicPlayback.c_str(), 2);
Serial.print("Subscribing to Playback Control topic, QoS 2, packetId: ");
Serial.println(control_id);
uint16_t set_melody_id = mqttClient.subscribe(topicSetMelody.c_str(), 2);
Serial.print("Subscribing to Set-Melody topic, QoS 2, packetId: ");
Serial.println(set_melody_id);
// doesn't work yet:
uint16_t add_melody_id = mqttClient.subscribe(topicAddMelody.c_str(), 2);
Serial.print("Subscribing to Add-Melody topic, QoS 2, packetId: ");
Serial.println(add_melody_id);
uint16_t relay_timers_id = mqttClient.subscribe(topicRelayTimers.c_str(), 2);
Serial.print("Subscribing to Relay-Timers topic, QoS 2, packetId: ");
Serial.println(relay_timers_id);
}
// Handles incoming MQTT messages on subscribed topics.
// Could move logic out of this into a dedicated function.
void OnMqttReceived(char * topic, char * payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
String topicPlayback = String("vesper/") + DEV_ID + "/control/playback";
String topicSetMelody = String("vesper/") + DEV_ID + "/control/setMelody";
String topicAddMelody = String("vesper/") + DEV_ID + "/control/addMelody";
String topicRelayTimers = String("vesper/") + DEV_ID + "/control/settings/relayTimers";
// Don't know what this is. Check it out later.
//String payloadContent = String(payload).substring(0, len);
if (String(topic) == topicPlayback){
handlePlaybackCommands(payload);
}
else if (String(topic) == topicSetMelody) {
setMelodyAttributes(handleJSON(payload));
loadMelodyInRAM(melody_steps);
}
else if (String(topic) == topicAddMelody) {
// Handle adding melody
Serial.println("Adding melody...");
// You can call a function here to handle adding the melody
}
else if (String(topic) == topicRelayTimers) {
setRelayDurations(handleJSON(payload));
}
else {
// Handle unknown topics
Serial.println("Unknown topic received.");
}
}
// Publishes a message on the MQTT server. Message passed as an argument.
void PublishMqtt(const char * data) {
String topicData = String("vesper/") + DEV_ID + "/data";
mqttClient.publish(topicData.c_str(), 0, true, data);
}

View File

@@ -0,0 +1,139 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\MQTT_WiFi_Utilities.hpp"
#pragma once
TimerHandle_t mqttReconnectTimer;
TimerHandle_t wifiReconnectTimer;
String GetPayloadContent(char * data, size_t len) {
String content = "";
for(size_t i = 0; i < len; i++)
{
content.concat(data[i]);
}
return content;
}
void ConnectToMqtt()
{
Serial.println("Connecting to MQTT...");
mqttClient.connect();
}
void OnMqttConnect(bool sessionPresent)
{
Serial.println("Connected to MQTT.");
Serial.print("Session present: ");
Serial.println(sessionPresent);
SuscribeMqtt();
}
void OnMqttDisconnect(AsyncMqttClientDisconnectReason reason)
{
Serial.println("Disconnected from MQTT.");
if(WiFi.isConnected())
{
xTimerStart(mqttReconnectTimer, 0);
}
}
void OnMqttSubscribe(uint16_t packetId, uint8_t qos)
{
Serial.println("Subscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
Serial.print(" qos: ");
Serial.println(qos);
}
void OnMqttUnsubscribe(uint16_t packetId)
{
Serial.println("Unsubscribe acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}
void OnMqttPublish(uint16_t packetId)
{
Serial.println("Publish acknowledged.");
Serial.print(" packetId: ");
Serial.println(packetId);
}
void ConnectWiFi_STA(bool useStaticIP = false)
{
Serial.println("");
WiFi.mode(WIFI_STA);
if(useStaticIP) {
WiFi.config(ip, gateway, subnet);
WiFi.setHostname(hostname);
}
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print('.');
}
Serial.println("");
Serial.print("Iniciado STA:\t");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}
void ConnectWiFi_AP(bool useStaticIP = false)
{
Serial.println("");
WiFi.mode(WIFI_AP);
while(!WiFi.softAP(ssid, password))
{
Serial.println(".");
delay(100);
}
if(useStaticIP) WiFi.softAPConfig(ip, gateway, subnet);
Serial.println("");
Serial.print("Iniciado AP:\t");
Serial.println(ssid);
Serial.print("IP address:\t");
Serial.println(WiFi.softAPIP());
}
void WiFiEvent(WiFiEvent_t event)
{
Serial.printf("[WiFi-event] event: %d\n", event);
switch(event)
{
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
ConnectToMqtt();
break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
Serial.println("WiFi lost connection");
xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi
xTimerStart(wifiReconnectTimer, 0);
break;
}
}
void InitMqtt()
{
mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(ConnectToMqtt));
wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(5000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(ConnectWiFi_STA));
mqttClient.onConnect(OnMqttConnect);
mqttClient.onDisconnect(OnMqttDisconnect);
mqttClient.onSubscribe(OnMqttSubscribe);
mqttClient.onUnsubscribe(OnMqttUnsubscribe);
mqttClient.onMessage(OnMqttReceived);
mqttClient.onPublish(OnMqttPublish);
mqttClient.setServer(MQTT_HOST, MQTT_PORT);
mqttClient.setCredentials(MQTT_USER, MQTT_PASS);
}

View File

@@ -0,0 +1,86 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\PlaybackControls.hpp"
#pragma once
extern melody_attributes melody;
bool timeToStop(unsigned long now);
bool timeToPause(unsigned long now);
bool timeToResume(unsigned long now);
void durationTimer(void *param);
// Timer TASK to control playback state
void durationTimer(void *param) {
// Task Setup
// Task Loop
while (true) {
unsigned long now = millis();
if (timeToStop(now)) {
melody.stop();
} else if (timeToPause(now)) {
melody.pause();
} else if (timeToResume(now)) {
melody.unpause();
}
vTaskDelay(pdMS_TO_TICKS(1000)); // Check every 100ms
}
}
// Check if it's time to stop playback
bool timeToStop(unsigned long now) {
if (melody.isPlaying) {
uint64_t stopTime = melody.startTime + melody.duration;
if (now >= stopTime) {
Serial.println("TIMER: Total Duration Reached");
return true;
}
}
return false;
}
// Check if it's time to pause playback
bool timeToPause(unsigned long now) {
if (melody.isPlaying && melody.loop_duration > 0) {
uint64_t pauseTimeLimit = melody.loopStartTime + melody.loop_duration;
Serial.printf("PTL: %lu // NOW: ",pauseTimeLimit);
Serial.println(now);
if (now >= pauseTimeLimit && !melody.isPaused) {
Serial.println("TIMER: Segment Duration Reached");
melody.pauseTime = now;
return true;
}
}
return false;
}
// Check if it's time to resume playback
bool timeToResume(unsigned long now) {
if (melody.isPaused) {
uint64_t resumeTime = melody.pauseTime + melody.interval;
if (now >= resumeTime) {
Serial.println("TIMER: Pause Duration Reached");
return true;
}
}
return false;
}
// Handles Incoming Commands to PLAY or STOP
void handlePlaybackCommands(char * command){
Serial.print("INCOMING COMMAND: ");
Serial.println(command);
if (command[0] == '1') {
melody.play();
PublishMqtt("OK - PLAY");
} else if (command[0] == '0') {
melody.forceStop();
PublishMqtt("OK - STOP");
}
}

View File

@@ -0,0 +1,127 @@
#include <Arduino.h>
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\Project - Vesper.ino"
#include <WiFi.h>
#include <AsyncMqttClient.h>
#include <ArduinoJson.h>
#include <FS.h>
#include <SPIFFS.h>
#include <string>
#include <Wire.h>
#include <Adafruit_PCF8574.h>
#define PCF8574_ADDR 0x24
Adafruit_PCF8574 relays;
AsyncMqttClient mqttClient;
class melody_attributes {
public:
uint16_t id; // The (internal) ID of the selected melody. Not specificly used anywhere atm. Might be used later.
std::string name = "melody1"; // Name of the Melody saved. Will be used to read the file: /name.bin
uint16_t speed = 500; // Time to wait per beat. (In Miliseconds)
uint32_t duration = 15000; // Total Duration that program will run (In Miliseconds)
uint32_t loop_duration = 0; // Duration of the playback per segment
uint32_t interval = 0; // Indicates the Duration of the Interval between finished segments, IF "inf" is true
bool infinite_play = false; // Infinite Loop Indicator (If True the melody will loop forever or until stoped, with pauses of "interval" in between loops)
bool isPlaying = false;; // Indicates if the Melody is actually Playing right now.
bool isPaused = false; // If playing, indicates if the Melody is Paused
uint64_t startTime = 0; // The time-point the Melody started Playing
uint64_t loopStartTime = 0; // The time-point the current segment started Playing
bool hardStop = false; // Flags a hardstop, immediately.
uint64_t pauseTime = 0; // The time-point the melody paused
void play() {
isPlaying = true;
hardStop = false;
startTime = loopStartTime = millis();
Serial.println("Plbck: PLAY");
}
void forceStop() {
hardStop = true;
isPlaying = false;
Serial.println("Plbck: FORCE STOP");
}
void stop() {
hardStop = false;
isPlaying = false;
Serial.println("Plbck: STOP");
}
void pause() {
isPaused = true;
Serial.println("Plbck: PAUSE");
}
void unpause() {
isPaused = false;
loopStartTime = millis();
Serial.println("Plbck: RESUME");
}
};
melody_attributes melody;
std::vector<uint16_t> melody_steps;
#include "config.h"
#include "functions.hpp"
#include "MQTT_Message_Handling.hpp"
#include "MQTT_WiFi_Utilities.hpp"
#include "PlaybackControls.hpp"
#include "bellEngine.hpp"
TaskHandle_t bellEngineHandle = NULL;
#line 79 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\Project - Vesper.ino"
void setup();
#line 117 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\Project - Vesper.ino"
void loop();
#line 79 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\Project - Vesper.ino"
void setup()
{
// Initialize Serial Communications & I2C Bus (for debugging)
Serial.begin(115200);
delay(50);
// Initialize PCF8574
Wire.begin(4,15);
relays.begin(PCF8574_ADDR, &Wire);
// Initialize Relays
for (uint8_t p=0; p<6; p++){
relays.pinMode(p, OUTPUT);
relays.digitalWrite(p, HIGH);
}
// Initialize SPIFFS
if (!SPIFFS.begin(true)) { // 'true' means format SPIFFS if initialization fails
Serial.println("Failed to mount SPIFFS");
return;
}
Serial.println("SPIFFS mounted successfully");
delay(50);
// Initialize WiFi and MQTT
WiFi.onEvent(WiFiEvent);
InitMqtt();
ConnectWiFi_STA();
delay(1000);
xTaskCreatePinnedToCore(bellEngine,"bellEngine", 8192, NULL, 1, &bellEngineHandle, 1);
xTaskCreatePinnedToCore(durationTimer, "durationTimer", 8192, NULL, 2, NULL, 1);
xTaskCreatePinnedToCore(relayControlTask, "Relay Control Task", 2048, NULL, 2, NULL, 1);
loadRelayTimings();
}
void loop()
{
}

View File

@@ -0,0 +1,256 @@
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\Project\ -\ Vesper.ino.cpp.o: \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\Project\ -\ Vesper.ino.cpp \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp_arduino_version.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/config/include/freertos/FreeRTOSConfig.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/config/xtensa/include/freertos/FreeRTOSConfig_arch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa_config.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/core.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/xtensa-versions.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/core-isa.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/core-matmap.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/system.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa_context.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/corebits.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/projdefs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/portable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/deprecated_definitions.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portmacro.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/xtruntime.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xt_instr_macros.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa/xtruntime.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/spinlock.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_cpu.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/soc_caps.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xtensa_api.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/include/xt_utils.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_bit_defs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_attr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_intr_alloc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_err.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_compiler.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_intr_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_system/include/esp_private/crosscore_int.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_macros.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_assert.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_memory_utils.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/soc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_assert.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/interrupts.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/reg_base.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/newlib/platform_include/esp_newlib.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/heap/include/esp_heap_caps.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/heap/include/multi_heap.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_rom/include/esp_rom_sys.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/reset_reasons.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_system/include/esp_system.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_common/include/esp_idf_version.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/portbenchmark.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_timer/include/esp_timer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_etm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/mpu_wrappers.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/esp_additions/include/freertos/idf_additions.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/list.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/queue.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/semphr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/queue.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/stream_buffer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/message_buffer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/stream_buffer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/event_groups.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/timers.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_sleep.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/touch_sensor_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/gpio_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/gpio_num.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-log.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_rom/include/esp32/rom/ets_sys.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/log/include/esp_log.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/log/include/esp_log_internal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-matrix.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-uart.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/uart_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/clk_tree_defs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\esp32/pins_arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_driver_gpio/include/driver/gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_rom/include/esp_rom_gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/gpio_pins.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_driver_gpio/include/driver/gpio_etm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-touch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-touch-ng.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-dac.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-adc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-spi.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-i2c.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-ledc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/ledc_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-rmt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-sigmadelta.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-timer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_driver_gptimer/include/driver/gptimer_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/timer_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-bt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-psram.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-rgb-led.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-cpu.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp8266-compat.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/soc/esp32/include/soc/gpio_reg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/stdlib_noniso.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/binary.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/extra_attr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/WCharacter.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/WString.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/pgmspace.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Stream.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Print.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Printable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/IPAddress.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/ip_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/opt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/port/include/lwipopts.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/newlib/platform_include/sys/ioctl.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/newlib/platform_include/sys/poll.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_system/include/esp_task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_random.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/port/include/sntp/sntp_get_set_time.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/port/include/sockets_ext.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/port/freertos/include/arch/sys_arch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/debug.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/arch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/port/esp32xx/include/arch/cc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/newlib/platform_include/errno.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/def.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/ip4_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/ip6_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/def.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/ip6_zone.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_netif/include/esp_netif_ip_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Client.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Server.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Udp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/HardwareSerial.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/HWCDC.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/USBCDC.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Esp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_partition/include/esp_partition.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/hal/cpu_hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/hal/cpu_ll.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/freertos_stats.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/io_pin_remap.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFi.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Print.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiType.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_wifi/include/esp_wifi_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_wifi/include/esp_wifi_types_generic.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_event/include/esp_event_base.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_hw_support/include/esp_interface.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_wifi/include/local/esp_wifi_types_native.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_wifi/include/esp_wifi_types_generic.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiSTA.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiGeneric.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_event/include/esp_event.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_wifi/include/esp_smartconfig.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_netif/include/esp_netif_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_netif/include/esp_netif_ip_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_driver.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_com.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/eth_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_spec.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_mac_spi.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_mac.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_driver_spi/include/driver/spi_master.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/hal/include/hal/spi_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_driver_spi/include/driver/spi_common.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_system/include/esp_ipc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_mac_esp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_eth/include/esp_eth_phy.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/espressif__network_provisioning/include/network_provisioning/manager.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/protocomm/include/common/protocomm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/protocomm/include/security/protocomm_security.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/espressif__network_provisioning/include/network_provisioning/network_config.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/Network.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkInterface.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Printable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkEvents.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkManager.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/WString.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkClient.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Client.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkServer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Server.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkUdp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/Udp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/cbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/esp_ringbuf/include/freertos/ringbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiAP.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiScan.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiClient.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiServer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\WiFi\src/WiFiUdp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Network\src/NetworkUdp.h \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient.h \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient.hpp \
C:\Users\espi_\Documents\Arduino\libraries\Async_TCP\src/AsyncTCP.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/pbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/lwip/lwip/src/include/lwip/err.h \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Flags.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/ParsingInformation.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/MessageProperties.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Helpers.hpp \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-log.h \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Callbacks.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/DisconnectReasons.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Errors.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Storage.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Packet.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/ConnAckPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PingRespPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/SubAckPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/UnsubAckPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PublishPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PubRelPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PubAckPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PubRecPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/PubCompPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/Connect.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/OutPacket.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/PingReq.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/PubAck.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/Disconn.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/Subscribe.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/Unsubscribe.hpp \
C:\Users\espi_\Documents\Arduino\libraries\AsyncMqttClient\src/AsyncMqttClient/Packets/Out/Publish.hpp \
C:\Users\espi_\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h \
C:\Users\espi_\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp \
C:\Users\espi_\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Configuration.hpp \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\FS\src/FS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\SPIFFS\src/SPIFFS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src/Wire.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/HardwareI2C.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_PCF8574/Adafruit_PCF8574.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_BusIO/Adafruit_BusIO_Register.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_BusIO/Adafruit_GenericDevice.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_BusIO/Adafruit_I2CDevice.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_BusIO/Adafruit_SPIDevice.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\SPI\src/SPI.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/esp32-hal-spi.h \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\config.h \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\functions.hpp \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\MQTT_Message_Handling.hpp \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\MQTT_WiFi_Utilities.hpp \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\PlaybackControls.hpp \
C:\Users\espi_\Documents\Arduino\4.\ Bell\ Systems\1.\ Main\ Projects\Project\ -\ Vesper\build\sketch\bellEngine.hpp

Binary file not shown.

View File

@@ -0,0 +1,89 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\bellEngine.hpp"
// MELODY PLAYBACK WILL BE HANDLED HERE
#include <vector>
extern melody_attributes melody;
// Define a structure to track active solenoids
struct ActiveRelay {
uint8_t relayIndex; // Index of the relay
uint64_t activationTime; // Activation start time
uint16_t duration; // Duration for which it should remain active
};
// Array of durations for each relay (configure remotely)
uint16_t relayDurations[16] = {90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90};
// Vector to track active solenoids
std::vector<ActiveRelay> activeRelays;
void loop_playback(std::vector<uint16_t> &melody_steps);
void bellEngine(void *parameter);
void relayControlTask(void *param);
void itsHammerTime(uint16_t note);
void turnOffRelays(uint64_t now);
void bellEngine(void *parameter) {
// SETUP TASK
for (;;) {
// Playback until stopped (Completes AT LEAST 1 full loop)
loop_playback(melody_steps);
/*
UBaseType_t highWaterMark = uxTaskGetStackHighWaterMark(NULL);
Serial.print("Stack high water mark: ");
Serial.println(highWaterMark);
*/
}
}
// Task to deactivate relays dynamically
void relayControlTask(void *param) {
while (true) {
uint64_t now = millis();
// Iterate through active relays and deactivate those whose duration has elapsed
for (auto it = activeRelays.begin(); it != activeRelays.end();) {
if (now - it->activationTime >= it->duration) {
relays.digitalWrite(it->relayIndex, HIGH); // Deactivate the relay
it = activeRelays.erase(it); // Remove from the active list
} else {
++it; // Move to the next relay
}
}
vTaskDelay(pdMS_TO_TICKS(10)); // Check every 10ms
}
}
void loop_playback(std::vector<uint16_t> &melody_steps) {
while(melody.isPlaying && !melody.isPaused){
// iterate through the beats and call the bell mechanism on each beat
for (uint16_t note : melody_steps) {
if (melody.hardStop) return;
itsHammerTime(note);
int tempo = melody.speed;
vTaskDelay(pdMS_TO_TICKS(tempo));
}
Serial.println("SINGLE LOOP OVER.");
//if (!melody.isPlaying) break; // Stop playback only after completing the loop
}
}
// Function to activate relays for a specific note
void itsHammerTime(uint16_t note) {
uint64_t now = millis();
for (uint8_t i = 0; i < 16; i++) {
if (note & (1 << i)) { // Check if this relay needs to activate
relays.digitalWrite(i, LOW); // Activate the relay
// Add to the activeRelays list
activeRelays.push_back({i, now, relayDurations[i]});
}
}
}

View File

@@ -0,0 +1,16 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\config.h"
const char* ssid = "SmartNet";
const char* password = "smartpass";
const char* hostname = "ESP32_mqtt_test";
const IPAddress MQTT_HOST(10,98,20,10);
const int MQTT_PORT = 1883;
#define MQTT_USER "esp32_vesper"
#define MQTT_PASS "vesper"
IPAddress ip(10, 98, 30, 150);
IPAddress gateway(10, 98, 30, 1);
IPAddress subnet(255, 255, 255, 0);
#define DEV_ID "id-96638646"

View File

@@ -0,0 +1,158 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\functions.hpp"
#pragma once
extern std::vector<uint16_t> melody_steps;
extern uint16_t relayDurations[16];
void setMelodyAttributes(JsonDocument doc);
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps);
void loadRelayTimings();
void saveRelayTimings();
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Sets incoming Attributes for the Melody, into the class' variables.
void setMelodyAttributes(JsonDocument doc){
if (doc.containsKey("name")) {
melody.name = doc["name"].as<const char*>();
}
if (doc.containsKey("id")) {
melody.id = doc["id"].as<uint16_t>();
}
if (doc.containsKey("duration")) {
melody.duration = doc["duration"].as<uint32_t>();
}
if (doc.containsKey("infinite")) {
melody.infinite_play = doc["infinite"].as<bool>();
}
if (doc.containsKey("interval")) {
melody.interval = doc["interval"].as<uint32_t>();
}
if (doc.containsKey("speed")) {
melody.speed = doc["speed"].as<uint16_t>();
}
if (doc.containsKey("loop_dur")) {
melody.loop_duration = doc["loop_dur"].as<uint32_t>();
}
// Print Just for Debugging Purposes
Serial.printf("Name: %s, ID: %d, Total Duration: %lu, Loop Duration: %lu, Interval: %d, Speed: %d, Inf: %s\n",
melody.name.c_str(),
melody.id,
melody.duration,
melody.loop_duration,
melody.interval,
melody.speed,
melody.infinite_play ? "true" : "false"
);
}
// Loads the Selected melody from a .bin file, into RAM
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps) {
std::string filePath = "/" + melody.name + ".bin";
Serial.println("New Melody Selected !!!");
Serial.println("Reading data from file...");
File bin_file = SPIFFS.open(filePath.c_str(), "r");
if (!bin_file) {
Serial.println("Failed to Open File");
return;
}
size_t fileSize = bin_file.size();
size_t steps = fileSize / 2;
melody_steps.resize(steps);
Serial.print("Opened File ! Size: ");
Serial.print(fileSize);
Serial.print(" Steps: ");
Serial.println(steps);
for (size_t i=0; i<steps; i++){
melody_steps[i] = bin_file.read() << 8 | bin_file.read();
}
for (size_t i=0; i<steps; i++){
Serial.print("Current Step: ");
Serial.printf("%03d // ", i);
Serial.print(" HEX Value: ");
Serial.printf("0x%04X\n", melody_steps[i]);
}
Serial.println("Closing File");
bin_file.close();
// closing the file
}
// Sets Incoming Relay Durations to RAM and then call funtion to save them to file.
void setRelayDurations(JsonDocument doc) {
// Iterate through the relays in the JSON payload
for (uint8_t i = 0; i < 16; i++) {
String key = String("b") + (i + 1); // Generate "b1", "b2", ...
if (doc.containsKey(key)) {
relayDurations[i] = doc[key].as<uint16_t>();
Serial.printf("Relay %d duration set to %d ms\n", i + 1, relayDurations[i]);
} else {
Serial.printf("Relay %d not found in JSON payload. Keeping previous duration: %d ms\n", i + 1, relayDurations[i]);
}
}
saveRelayTimings();
}
// Saves Relay Durations from RAM, into a file
void saveRelayTimings() {
StaticJsonDocument<512> doc; // Adjust size if needed
// Populate the JSON object with relay durations
for (uint8_t i = 0; i < 16; i++) {
String key = String("b") + (i + 1);
doc[key] = relayDurations[i];
}
// Open the file for writing
File file = SPIFFS.open("/settings/relayTimings.json", FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing");
return;
}
// Serialize JSON to the file
if (serializeJson(doc, file) == 0) {
Serial.println("Failed to write JSON to file");
} else {
Serial.println("Relay timings saved successfully");
}
file.close();
}
// Loads Relay Durations from file into RAM (called during boot)
void loadRelayTimings() {
// Open the file for reading
File file = SPIFFS.open("/settings/relayTimings.json", FILE_READ);
if (!file) {
Serial.println("Settings file not found. Using default relay timings.");
return;
}
// Parse the JSON file
StaticJsonDocument<512> doc; // Adjust size if needed
DeserializationError error = deserializeJson(doc, file);
if (error) {
Serial.println("Failed to parse settings file. Using default relay timings.");
file.close();
return;
}
// Populate relayDurations array
for (uint8_t i = 0; i < 16; i++) {
String key = String("b") + (i + 1);
if (doc.containsKey(key)) {
relayDurations[i] = doc[key].as<uint16_t>();
Serial.printf("Loaded relay %d duration: %d ms\n", i + 1, relayDurations[i]);
}
}
file.close();
}