Added initial Melody Playback Ability

Now, controlled via MQTT a Playback of a melody can Start, Stop, Pause 
etc. 

Settings like speed, total duration, pauses etc can be set.
This commit is contained in:
2025-01-19 21:15:07 +02:00
parent 2cbbc8d591
commit a33f626dde
36 changed files with 4263 additions and 236 deletions

17
.vscode/arduino.json vendored Normal file
View File

@@ -0,0 +1,17 @@
{
"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"
}
}

16
.vscode/c_cpp_properties.json vendored Normal file
View File

@@ -0,0 +1,16 @@
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
]
}
],
"version": 4
}

View File

@@ -1,64 +0,0 @@
#pragma once
const IPAddress MQTT_HOST(10,98,20,10);
const int MQTT_PORT = 1883;
AsyncMqttClient mqttClient;
String GetPayloadContent(char* data, size_t len) {
String content = "";
for(size_t i = 0; i < len; i++)
{
content.concat(data[i]);
}
return content;
}
void SuscribeMqtt() {
String topicPlayback = String("vesper/") + DEV_ID + "/control/playback";
String topicAddMelody = String("vesper/") + DEV_ID + "/control/add_melody";
uint16_t control_id = mqttClient.subscribe(topicPlayback.c_str(), 2);
Serial.print("Subscribing to playback topic, QoS 2, packetId: ");
Serial.println(control_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);
}
void PublishMqtt(unsigned long data) {
String topicData = String("vesper/") + DEV_ID + "/data";
String payload = String(data);
mqttClient.publish(topicData.c_str(), 0, true, (char*)payload.c_str());
}
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 topicAddMelody = String("vesper/") + DEV_ID + "/control/add_melody"; // doesn't work yet.
String payloadContent = String(payload).substring(0, len);
if (String(topic) == topicPlayback) {
// Handle the playback command
handleJSON(payload);
}
else if (String(topic) == topicAddMelody) {
// Handle adding melody
Serial.println("Adding melody...");
// You can call a function here to handle adding the melody
}
else {
// Handle unknown topics
Serial.println("Unknown topic received.");
}
}

81
MQTT_Message_Handling.hpp Normal file
View File

@@ -0,0 +1,81 @@
#pragma once
void handlePlaybackCommands(char * command);
void handleJSON(char * payload) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
setMelodyAttributes(doc);
loadMelodyInRAM(melody_steps);
}
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/add_melody";
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);
}
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/add_melody";
//String payloadContent = String(payload).substring(0, len);
if (String(topic) == topicPlayback){
handlePlaybackCommands(payload);
}
else if (String(topic) == topicSetMelody) {
handleJSON(payload);
}
else if (String(topic) == topicAddMelody) {
// Handle adding melody
Serial.println("Adding melody...");
// You can call a function here to handle adding the melody
}
else {
// Handle unknown topics
Serial.println("Unknown topic received.");
}
}
// void PublishMqtt(unsigned long data) {
//
// //Doesn't publish anything yet.
// String topicData = String("vesper/") + DEV_ID + "/data";
// String payload = String(data);
// mqttClient.publish(topicData.c_str(), 0, true, (char*)payload.c_str());
//
// }
void PublishMqtt(const char *data) {
String topicData = String("vesper/") + DEV_ID + "/data";
mqttClient.publish(topicData.c_str(), 0, true, data);
}

138
MQTT_WiFi_Utilities.hpp Normal file
View File

@@ -0,0 +1,138 @@
#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);
}

84
PlaybackControls.hpp Normal file
View File

@@ -0,0 +1,84 @@
#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;
}
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");
}
}

68
bellEngine.hpp Normal file
View File

@@ -0,0 +1,68 @@
// MELODY PLAYBACK WILL BE HANDLED HERE
#include <vector>
extern melody_attributes melody;
extern uint16_t relayMask;
void loop_playback(std::vector<uint16_t> &melody_steps);
void itsHammerTime(uint16_t note);
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);
*/
}
}
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
}
}
void itsHammerTime(uint16_t note){
// THIS NEEDS REWORK, TO WAIT, DYNAMICLY PER RELAY
// MUST BE CONFIGURABLE REMOTELY
for (uint8_t i=0; i<16; i++) {
if (note & (1 << i)) {
relays.digitalWrite(i, LOW);
}
}
vTaskDelay(pdMS_TO_TICKS(relayDurations[0]));
for (uint8_t i=0; i<16; i++) {
relays.digitalWrite(i, HIGH);
}
}

9
build/build.options.json Normal file
View File

@@ -0,0 +1,9 @@
{
"additionalFiles": "..\\..\\..,..\\..,..\\..,..\\..,..\\..,..\\..,..\\..,..\\..,..\\..",
"compiler.optimization_flags": "-Os",
"customBuildProperties": "build.warn_data_percentage=75",
"fqbn": "esp32:esp32:esp32: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",
"hardwareFolders": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages",
"otherLibrariesFolders": "C:\\Users\\espi_\\Documents\\Arduino\\libraries",
"sketchLocation": "C:\\Users\\espi_\\Documents\\Arduino\\vesper"
}

0
build/build_opt.h Normal file
View File

View File

@@ -0,0 +1,3 @@
{
"result": false
}

0
build/file_opts Normal file
View File

287
build/includes.cache Normal file
View File

@@ -0,0 +1,287 @@
[
{
"Sourcefile": null,
"Include": "",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\cores\\esp32"
},
{
"Sourcefile": null,
"Include": "",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\variants\\esp32"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "WiFi.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "Network.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "AsyncMqttClient.h",
"Includepath": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "AsyncTCP.h",
"Includepath": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Async_TCP\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "ArduinoJson.h",
"Includepath": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\ArduinoJson\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "FS.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\FS\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "SPIFFS.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPIFFS\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "Wire.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Wire\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "Adafruit_PCF8574.h",
"Includepath": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_PCF8574"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "Adafruit_BusIO_Register.h",
"Includepath": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_BusIO"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "SPI.h",
"Includepath": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPI\\src"
},
{
"Sourcefile": "c:\\Users\\espi_\\Documents\\Arduino\\vesper\\build\\sketch\\vesper.ino.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\AP.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\STA.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFi.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFiAP.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFiGeneric.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFiMulti.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFiSTA.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src\\WiFiScan.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkClient.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkEvents.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkInterface.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkManager.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkServer.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src\\NetworkUdp.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\ConnAckPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\Connect.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\Disconn.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\OutPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\PingReq.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\PubAck.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\Publish.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\Subscribe.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\Out\\Unsubscribe.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PingRespPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PubAckPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PubCompPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PubRecPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PubRelPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\PublishPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\SubAckPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient\\Packets\\UnsubAckPacket.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src\\AsyncMqttClient.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Async_TCP\\src\\AsyncTCP.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\FS\\src\\FS.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\FS\\src\\vfs_api.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPIFFS\\src\\SPIFFS.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Wire\\src\\Wire.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_PCF8574\\Adafruit_PCF8574.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_PCF8574\\Adafruit_PCF8575.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_BusIO\\Adafruit_BusIO_Register.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_BusIO\\Adafruit_I2CDevice.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_BusIO\\Adafruit_SPIDevice.cpp",
"Include": "",
"Includepath": null
},
{
"Sourcefile": "C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPI\\src\\SPI.cpp",
"Include": "",
"Includepath": null
}
]

1
build/libraries.cache Normal file
View File

@@ -0,0 +1 @@
["C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\cores\\esp32","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\variants\\esp32","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\WiFi\\src","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Network\\src","C:\\Users\\espi_\\Documents\\Arduino\\libraries\\AsyncMqttClient\\src","C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Async_TCP\\src","C:\\Users\\espi_\\Documents\\Arduino\\libraries\\ArduinoJson\\src","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\FS\\src","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPIFFS\\src","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\Wire\\src","C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_PCF8574","C:\\Users\\espi_\\Documents\\Arduino\\libraries\\Adafruit_BusIO","C:\\Users\\espi_\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.7\\libraries\\SPI\\src"]

7
build/partitions.csv Normal file
View File

@@ -0,0 +1,7 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x140000,
app1, app, ota_1, 0x150000,0x140000,
spiffs, data, spiffs, 0x290000,0x160000,
coredump, data, coredump,0x3F0000,0x10000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x140000
5 app1 app ota_1 0x150000 0x140000
6 spiffs data spiffs 0x290000 0x160000
7 coredump data coredump 0x3F0000 0x10000

2734
build/sdkconfig Normal file

File diff suppressed because it is too large Load Diff

18
build/sketch/.vscode/arduino.json vendored Normal file
View File

@@ -0,0 +1,18 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\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

@@ -1,3 +1,4 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\ESP32_Utils.hpp"
void ConnectWiFi_STA(bool useStaticIP = false)
{
Serial.println("");

View File

@@ -1,3 +1,4 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\ESP32_Utils_MQTT_Async.hpp"
#pragma once
TimerHandle_t mqttReconnectTimer;
@@ -62,7 +63,6 @@ void OnMqttUnsubscribe(uint16_t packetId)
Serial.println(packetId);
}
void OnMqttPublish(uint16_t packetId)
{
Serial.println("Publish acknowledged.");

89
build/sketch/MQTT.hpp Normal file
View File

@@ -0,0 +1,89 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\MQTT.hpp"
#pragma once
const IPAddress MQTT_HOST(10,98,20,10);
const int MQTT_PORT = 1883;
AsyncMqttClient mqttClient;
extern bool forceStop;
extern volatile bool playing;
String GetPayloadContent(char * data, size_t len) {
String content = "";
for(size_t i = 0; i < len; i++)
{
content.concat(data[i]);
}
return content;
}
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/add_melody";
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(topic_eBrake.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);
}
void PublishMqtt(unsigned long data) {
//Doesn't publish anything yet.
String topicData = String("vesper/") + DEV_ID + "/data";
String payload = String(data);
mqttClient.publish(topicData.c_str(), 0, true, (char*)payload.c_str());
}
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/add_melody";
String payloadContent = String(payload).substring(0, len);
if (String(topic) == topicPlayback){
if (len == 1 && payload[0] == '0') { // Checking for raw '0' byte
forceStop = true;
Serial.println("STOPPING Playback!");
}
else if (len == 1 && payload[0] == '1'){
playing = true;
}
}
else if (String(topic) == topicSetMelody) {
// Handle the playback command
handleJSON(payload);
}
else if (String(topic) == topicAddMelody) {
// Handle adding melody
Serial.println("Adding melody...");
// You can call a function here to handle adding the melody
}
else {
// Handle unknown topics
Serial.println("Unknown topic received.");
}
}

28
build/sketch/Timers.hpp Normal file
View File

@@ -0,0 +1,28 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\Timers.hpp"
#pragma once
extern volatile uint64_t startTime;
extern melody_attributes melody;
extern volatile bool playing;
void durationTimer(void *param);
void durationTimer(void *param){
// SETUP TASK
for (;;){
if (playing){
uint64_t now = millis();
uint64_t timeToStop = startTime + melody.duration;
if (now > timeToStop) {
playing = false;
Serial.println("Time Limit Reached. Stopping !");
}
}
}
}

View File

@@ -0,0 +1,78 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\bellEngine.hpp"
// MELODY PLAYBACK WILL BE HANDLED HERE
#include <vector>
extern volatile bool playing;
extern melody_attributes melody;
extern uint16_t relayMask;
extern bool forceStop;
void loop_playback(std::vector<uint16_t> &melody_steps);
void itsHammerTime(uint16_t note);
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);
*/
}
}
void loop_playback(std::vector<uint16_t> &melody_steps) {
while(playing){
// iterate through the beats and call the bell mechanism on each beat
for (uint16_t note : melody_steps) {
if (forceStop) return;
itsHammerTime(note);
int tempo = melody.speed;
vTaskDelay(pdMS_TO_TICKS(tempo));
}
// pause for "interval_duration"
vTaskDelay(pdMS_TO_TICKS(melody.interval_duration));
// pause for standard "breath-out" duration if interval was less than 3000ms
if (melody.interval_duration<3000) vTaskDelay(pdMS_TO_TICKS(3000));
}
}
void itsHammerTime(uint16_t note){
// THIS NEEDS REWORK, TO WAIT, DYNAMICLY PER RELAY
// MUST BE CONFIGURABLE REMOTELY
for (uint8_t i=0; i<16; i++) {
if (note & (1 << i)) {
relays.digitalWrite(i, LOW);
}
}
vTaskDelay(pdMS_TO_TICKS(relayDurations[0]));
for (uint8_t i=0; i<16; i++) {
relays.digitalWrite(i, HIGH);
}
}

11
build/sketch/config.h Normal file
View File

@@ -0,0 +1,11 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\config.h"
const char* ssid = "SmartNet";
const char* password = "smartpass";
const char* hostname = "ESP32_mqtt_test";
IPAddress ip(10, 98, 30, 150);
IPAddress gateway(10, 98, 30, 1);
IPAddress subnet(255, 255, 255, 0);
#define MQTT_USER "esp32_vesper"
#define MQTT_PASS "vesper"

View File

@@ -0,0 +1,92 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\functions.hpp"
#pragma once
extern std::vector<uint16_t> melody_steps;
void setMelodyAttributes(JsonDocument doc);
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps);
void handleJSON(String * payload) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
setMelodyAttributes(doc);
loadMelodyInRAM(melody_steps);
}
void setMelodyAttributes(JsonDocument doc){
melody.name = doc["name"].as<const char*>(); // Convert to std::string "name" : "eortastiko"
melody.id = doc["id"].as<uint16_t>();
melody.duration = doc["duration"].as<uint32_t>();
melody.infinite_play = doc["infinite"].as<bool>();
melody.interval_duration = doc["inter_dur"].as<uint16_t>();
melody.speed = doc["speed"].as<uint16_t>();
// Print Just for Debugging Purposes
Serial.printf("Name: %s, ID: %d, Duration: %lu, Inf: %s, Inter: %d, Speed: %d\n",
melody.name.c_str(),
melody.id,
melody.duration,
melody.infinite_play ? "true" : "false",
melody.interval_duration,
melody.speed);
}
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps) {
//if (!newMelody || !playing) return;
// read the file and save in RAM
std::string filePath = "/" + melody.name + ".bin";
Serial.println("New Melody Selected !!!");
Serial.println("Reading data from file...");
//Serial.println(filePath);
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
}

View File

@@ -0,0 +1 @@
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\hammerTime.hpp"

108
build/sketch/vesper.ino.cpp Normal file
View File

@@ -0,0 +1,108 @@
#include <Arduino.h>
#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\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;
#define DEV_ID "id-96638646"
struct melody_attributes {
std::string name; // Contains the name of each Melody saved
uint16_t id; // The (internal) ID of the selected melody
uint32_t duration; // Indicates the total Duration in Minutes
bool infinite_play; // Infinite Loop Indicator (If True the melody will loop forever or until stoped, with pauses of "interval duration in between loops")
uint16_t interval_duration; // Indicates the Duration of the Interval between finished loops, IF "inf" is true
uint16_t speed; // Indicates the Speed in 9 Steps. 1-9 (Steps can be adjusted in the bellEngine function)
};
melody_attributes melody;
std::vector<uint16_t> melody_steps;
volatile bool playing = false;
uint16_t relayMask = 0; // Bitmask indicating which relays to activate
uint8_t relayDurations[16] = {100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100}; // Deactivation timers for each relay in milliseconds
volatile uint64_t startTime = 0;
bool forceStop = false;
#include "functions.hpp"
#include "config.h" // Sustituir con datos de vuestra red
#include "MQTT.hpp"
#include "ESP32_Utils.hpp"
#include "ESP32_Utils_MQTT_Async.hpp"
#include "bellEngine.hpp"
#include "hammerTime.hpp"
#include "Timers.hpp"
TaskHandle_t bellEngineHandle = NULL;
#line 47 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\vesper.ino"
void setup();
#line 99 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\vesper.ino"
void loop();
#line 47 "C:\\Users\\espi_\\Documents\\Arduino\\vesper\\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, // Task function
"bellEngine", // Task name
8192, // Stack size
NULL, // Task input parameters
1, // Task priority, be carefull when changing this
&bellEngineHandle, // Task handle, add one if you want control over the task (resume or suspend the task)
1 // Core to run the task on
);
xTaskCreatePinnedToCore(
durationTimer, // Task function
"durationTimer", // Task name
8192, // Stack size
NULL, // Task input parameters
1, // Task priority, be carefull when changing this
NULL, // Task handle, add one if you want control over the task (resume or suspend the task)
1 // Core to run the task on
);
}
void loop()
{
}

View File

@@ -0,0 +1,248 @@
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\vesper.ino.cpp.o: \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\vesper.ino.cpp \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp_arduino_version.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/FreeRTOS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/esp_additions/include/freertos/FreeRTOSConfig.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/esp_additions/arch/xtensa/include/freertos/FreeRTOSConfig_arch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_config.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/esp32/include/xtensa/config/core.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtensa-versions.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\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.1-632e0c2a\esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/esp32/include/xtensa/config/system.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos/xtensa_context.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtensa_context.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/corebits.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/projdefs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/portable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\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.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtruntime.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xt_instr_macros.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtruntime.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/spinlock.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/esp_cpu.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/soc_caps.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtensa_api.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xtensa/xtensa_context.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/include/xt_utils.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_bit_defs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_attr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/esp_common/include/esp_err.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_compiler.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/esp_common/include/esp_macros.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_assert.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/soc/esp32/include/soc/soc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_assert.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/reg_base.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/newlib/platform_include/esp_newlib.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/heap/include/esp_heap_caps.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/heap/include/multi_heap.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_rom/include/esp_rom_sys.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/reset_reasons.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_system/include/esp_system.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_common/include/esp_idf_version.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\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.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/list.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/semphr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/queue.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/esp_sleep.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/touch_sensor_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/gpio_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/queue.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/freertos/FreeRTOS-Kernel/include/freertos/timers.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-log.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_timer/include/esp_timer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/esp_etm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/log/include/esp_log.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/log/include/esp_log_internal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-matrix.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-uart.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/uart_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/clk_tree_defs.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\variants\esp32/pins_arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/driver/gpio/include/driver/gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_rom/include/esp_rom_gpio.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/gpio_pins.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/driver/gpio/include/driver/gpio_etm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-touch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-dac.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-adc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-spi.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-i2c.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-ledc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/ledc_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-rmt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-sigmadelta.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-timer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/driver/gptimer/include/driver/gptimer_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/timer_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-bt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-psram.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-rgb-led.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-cpu.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp8266-compat.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/soc/esp32/include/soc/gpio_reg.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/stdlib_noniso.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/binary.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/extra_attr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/WCharacter.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/WString.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/pgmspace.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Stream.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Print.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Printable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/IPAddress.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/opt.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/lwip/port/include/lwipopts.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/newlib/platform_include/sys/ioctl.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/newlib/platform_include/sys/poll.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_system/include/esp_task.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/esp_random.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/lwip/port/include/sockets_ext.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/debug.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/arch.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/lwip/port/esp32xx/include/arch/cc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/newlib/platform_include/errno.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/def.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\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.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/def.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/esp_netif/include/esp_netif_ip_addr.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Client.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Server.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Udp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/HardwareSerial.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/HWCDC.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/USBCDC.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Esp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_partition/include/esp_partition.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/esp_hw_support/include/hal/cpu_ll.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/io_pin_remap.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Arduino.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFi.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Print.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiType.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_wifi/include/esp_wifi_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_wifi/include/esp_private/esp_wifi_types_private.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/esp_interface.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_event/include/esp_event_base.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiSTA.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiGeneric.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_event/include/esp_event.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_event/include/esp_event_base.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_wifi/include/esp_smartconfig.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_netif/include/esp_netif_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/esp_eth/include/esp_eth_driver.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_eth/include/esp_eth_com.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/eth_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_eth/include/esp_eth_spec.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_eth/include/esp_eth_mac.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/driver/spi/include/driver/spi_master.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/hal/include/hal/spi_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/driver/spi/include/driver/spi_common.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_system/include/esp_ipc.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_hw_support/include/intr_types.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_eth/include/esp_eth_phy.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.1-632e0c2a\esp32/include/protocomm/include/common/protocomm.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/protocomm/include/security/protocomm_security.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/espressif__network_provisioning/include/network_provisioning/network_config.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/Network.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkInterface.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Printable.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkEvents.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkManager.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/WString.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkClient.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Client.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkServer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Server.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Network\src/NetworkUdp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/Udp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/cbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\esp32/include/esp_ringbuf/include/freertos/ringbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiAP.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiScan.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiClient.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiServer.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\WiFi\src/WiFiUdp.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\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.1-632e0c2a\esp32/include/lwip/lwip/src/include/lwip/pbuf.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-632e0c2a\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.0.7\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.0.7\libraries\FS\src/FS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\SPIFFS\src/SPIFFS.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\Wire\src/Wire.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\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_I2CDevice.h \
C:\Users\espi_\Documents\Arduino\libraries\Adafruit_BusIO/Adafruit_SPIDevice.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\libraries\SPI\src/SPI.h \
C:\Users\espi_\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.7\cores\esp32/esp32-hal-spi.h \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\functions.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\config.h \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\MQTT.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\ESP32_Utils.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\ESP32_Utils_MQTT_Async.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\bellEngine.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\hammerTime.hpp \
c:\Users\espi_\Documents\Arduino\vesper\build\sketch\Timers.hpp

Binary file not shown.

View File

@@ -2,9 +2,14 @@ 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 MQTT_USER "esp32_vesper"
#define MQTT_PASS "vesper"
#define DEV_ID "id-96638646"

Binary file not shown.

Binary file not shown.

View File

@@ -1 +0,0 @@
[0000000000000001,0000000000000000,0000000000000010,0000000000000000,0000000000000001,0100000000010010,0000000000000001,0000000000001010,0000000000000000,0000000000000001]

BIN
data/melody2.bin Normal file

Binary file not shown.

BIN
data/melody3.bin Normal file

Binary file not shown.

View File

@@ -1,71 +1,70 @@
#pragma once
extern volatile bool playing;
extern std::vector<uint16_t> melody_steps;
void playback(JsonDocument doc){
if (doc["playback"].as<bool>()){
playing = true;
Serial.println("START Playback!");
}
else if (doc["playback"].as<bool>()){
playing = false;
Serial.println("STOP Playback!");
}
}
void setMelodyAttributes(JsonDocument doc);
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps);
void selectMelody(JsonDocument doc){
void setMelodyAttributes(JsonDocument doc){
melody.name = doc["name"].as<const char*>(); // Convert to std::string
melody.name = doc["name"].as<const char*>(); // Convert to std::string "name" : "eortastiko"
melody.id = doc["id"].as<uint16_t>();
melody.duration = doc["duration"].as<uint32_t>();
melody.infinite_play = doc["infinite"].as<bool>();
melody.interval_duration = doc["inter_dur"].as<uint16_t>();
melody.speed = doc["speed"].as<uint8_t>();
melody.interval = doc["interval"].as<uint32_t>();
melody.speed = doc["speed"].as<uint16_t>();
melody.loop_duration = doc["loop_dur"].as<uint32_t>();
Serial.printf("Name: %s, ID: %d, Duration: %lu, Inf: %s, Inter: %d, Speed: %d\n",
// 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.infinite_play ? "true" : "false",
melody.interval_duration,
melody.speed);
melody.loop_duration,
melody.interval,
melody.speed,
melody.infinite_play ? "true" : "false"
);
}
void handleJSON(String payload) {
void loadMelodyInRAM(std::vector<uint16_t> &melody_steps) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload);
// read the file and save in RAM
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
std::string filePath = "/" + melody.name + ".bin";
Serial.println("New Melody Selected !!!");
Serial.println("Reading data from file...");
//Serial.println(filePath);
File bin_file = SPIFFS.open(filePath.c_str(), "r");
if (!bin_file) {
Serial.println("Failed to Open File");
return;
}
selectMelody(doc);
playback(doc);
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
/*
possible topics:
vesper/client-id/control
/play
/stop
vesper/client-id/select_melody
vesper/client-id/update_melody
vesper/client-id/add_melody
*/
}

View File

@@ -1,86 +0,0 @@
// MELODY PLAYBACK WILL BE HANDLED HERE
#include <vector>
#include <Adafruit_PCF8574.h>
#include <Wire.h>
#define PCF8574_ADDR 0x24 // Change the address if it's different
Adafruit_PCF8574 pcf8574; // Create an instance of the PCF8574 class
extern volatile bool playing;
void bellEngine(void *parameter);
void tempEngine(void *parameter);
void bellEngine(void *parameter) {
uint16_t melodyMap[5500];
// read the melody from file and store it in RAM
File melody_file = SPIFFS.open("/melody1.bin", "r");
if (!melody_file) {
Serial.println("failed to open file");
}
for (;;){
Serial.println("Initializing Melody Read");
std::vector<uint16_t> melody;
size_t fileSize = melody_file.size();
size_t steps = fileSize / 2;
melody.resize(steps);
Serial.print("Debuggin - FileSize: ");
Serial.print(fileSize);
Serial.print(" Steps: ");
Serial.println(steps);
Serial.println("Continuing with Assignment");
for (size_t i=0; i<steps; i++){
melody[i] = melody_file.read() << 8 | melody_file.read();
}
for (size_t i=0; i<steps; i++){
Serial.print("Current Step: ");
Serial.print(i);
Serial.print(" Current Beat in HEX: ");
Serial.println(melody[i], HEX);
}
vTaskDelay(pdMS_TO_TICKS(5000));
Serial.println("Closing File");
melody_file.close();
UBaseType_t highWaterMark = uxTaskGetStackHighWaterMark(NULL);
Serial.print("Stack high water mark: ");
Serial.println(highWaterMark);
}
}
void tempEngine(void *parameter){
// setup
Wire.begin(4, 15);
pcf8574.begin(PCF8574_ADDR);
pcf8574.pinMode(0, OUTPUT);
for (;;){
//loop
if (playing) {
Serial.println("DING!");
pcf8574.digitalWrite(0, LOW);
vTaskDelay(pdMS_TO_TICKS(500));
pcf8574.digitalWrite(0, HIGH);
vTaskDelay(pdMS_TO_TICKS(500));
}
}
}

View File

@@ -4,40 +4,96 @@
#include <FS.h>
#include <SPIFFS.h>
#include <string>
#include <Wire.h>
#include <Adafruit_PCF8574.h>
#define DEV_ID "id-96638646"
#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; // Name of the Melody saved. Will be used to read the file: /name.bin
uint16_t speed; // 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");
}
struct melody_attributes {
std::string name; // Contains the name of each Melody saved
uint16_t id; // The (internal) ID of the selected melody
uint32_t duration; // Indicates the total Duration in Minutes
bool infinite_play; // Infinite Loop Indicator (If True the melody will loop forever or until stoped, with pauses of "interval duration in between loops")
uint16_t interval_duration; // Indicates the Duration of the Interval between finished loops, IF "inf" is true
uint8_t speed; // Indicates the Speed in 9 Steps. 1-9 (Steps can be adjusted in the bellEngine function)
};
melody_attributes melody;
std::vector<uint16_t> melody_steps;
volatile bool playing = false;
uint16_t relayMask = 0; // Bitmask indicating which relays to activate
uint8_t relayDurations[16] = {5,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100}; // Deactivation timers for each relay in milliseconds
#include "config.h"
#include "functions.hpp"
#include "config.h" // Sustituir con datos de vuestra red
#include "MQTT.hpp"
#include "ESP32_Utils.hpp"
#include "ESP32_Utils_MQTT_Async.hpp"
#include "melody_handling.hpp"
#include "MQTT_Message_Handling.hpp"
#include "MQTT_WiFi_Utilities.hpp"
#include "PlaybackControls.hpp"
#include "bellEngine.hpp"
TaskHandle_t myTaskHandle = NULL;
TaskHandle_t bellEngineHandle = NULL;
void setup()
{
// Initialize Serial Communication (for debuggin)
// 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");
@@ -46,6 +102,7 @@ void setup()
Serial.println("SPIFFS mounted successfully");
delay(50);
// Initialize WiFi and MQTT
WiFi.onEvent(WiFiEvent);
InitMqtt();
@@ -58,18 +115,16 @@ void setup()
8192, // Stack size
NULL, // Task input parameters
1, // Task priority, be carefull when changing this
&myTaskHandle, // Task handle, add one if you want control over the task (resume or suspend the task)
&bellEngineHandle, // Task handle, add one if you want control over the task (resume or suspend the task)
1 // Core to run the task on
);
vTaskSuspend(myTaskHandle);
xTaskCreatePinnedToCore(
tempEngine, // Task function
"tempEngine", // Task name
durationTimer, // Task function
"durationTimer", // Task name
8192, // Stack size
NULL, // Task input parameters
1, // Task priority, be carefull when changing this
2, // Task priority, be carefull when changing this
NULL, // Task handle, add one if you want control over the task (resume or suspend the task)
1 // Core to run the task on
);