more work on queues

added sendSensorDataOverMQTT task on core 1
pull/2/head
Andrew Woodlee 3 months ago
parent 2807f22e59
commit 6009fa1f72

@ -13,7 +13,8 @@
"initializer_list": "cpp",
"type_traits": "cpp",
"new": "cpp",
"ctime": "cpp"
"ctime": "cpp",
"*.tcc": "cpp"
},
"julia.environmentPath": "/home/andrew/Projects/SeniorDesign/esp32-tm-code"
}

@ -7,6 +7,7 @@
#include <freertos/task.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
#include <idf_additions.h>
@ -117,38 +118,46 @@ struct xformerMonitorData {
unsigned short SysStatus, meterStatus;
double activeCurrent, passiveCurrent, lineCurrent, lineVoltage,
activePower, passivePower, importEnergy, exportEnergy;
tm *timeInfo;
tempData temps;
};
xformerMonitorData xformerMonData;
// Global to be used in ISR
xformerMonitorData sensorData;
hw_timer_t *readEICTimer = NULL;
void IRAM_ATTR ReadData(){
// Variables for tasks
TaskHandle_t taskReadEIC;
TaskHandle_t taskSendData;
QueueHandle_t eicDataQueue;
// Obtain DS18B20 sensor data
monitorTempSensors.cabinet.requestTemperatures();
monitorTempSensors.oil.requestTemperatures();
// Get temp data in Celsius and Fahrenheit
float cabinetTemperatureC = monitorTempSensors.cabinet.getTempCByIndex(0);
float cabinetTemperatureF = monitorTempSensors.cabinet.getTempFByIndex(0);
void readEICData( void * pvParameters );
void sendSensorDataOverMQTT( void * pvParameters );
void IRAM_ATTR ReadData(){
// Get the current time and store it in a variable
time(&now);
struct tm* timeinfo = gmtime(&now);
sensorData.timeInfo = gmtime(&now);
char timeBuffer[32];
strftime(timeBuffer, sizeof(timeBuffer), "%FT%TZ", timeinfo);
// Obtain DS18B20 sensor data
monitorTempSensors.cabinet.requestTemperatures();
monitorTempSensors.oil.requestTemperatures();
// Get temp data in Celsius and Fahrenheit
float cabinetTemperatureC = monitorTempSensors.cabinet.getTempCByIndex(0);
float cabinetTemperatureF = monitorTempSensors.cabinet.getTempFByIndex(0);
// set {"time":"2021-05-04T13:13:04Z"}
xformerMonData.lineVoltage = eic.GetLineVoltage();
xformerMonData.temps.cabinetTemp = monitorTempSensors.cabinet.getTempCByIndex(0);
xformerMonData.temps.oilTemp = monitorTempSensors.oil.getTempCByIndex(0);
sensorData.lineVoltage = eic.GetLineVoltage();
sensorData.temps.cabinetTemp = monitorTempSensors.cabinet.getTempCByIndex(0);
sensorData.temps.oilTemp = monitorTempSensors.oil.getTempCByIndex(0);
}
xQueueSend(eicDataQueue, &sensorData, portMAX_DELAY);
TaskHandle_t Task1;
void readEICData( void * pvParameters );
}

@ -17,6 +17,8 @@ void setupEnergyMonitor();
// const char* test_client_cert = ""; //to verify the client
void setup()
{
eicDataQueue = xQueueCreate( 50, sizeof( xformerMonitorData ) );
// configure time
// TODO: make dst and timezone configurable
int timezone = 3;
@ -43,8 +45,17 @@ void setup()
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&Task1, /* Task handle. */
&taskReadEIC, /* Task handle. */
0); /* Core where the task should run */
xTaskCreatePinnedToCore(
sendSensorDataOverMQTT, /* Function to implement the task */
"Task1", /* Name of the task */
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&taskSendData, /* Task handle. */
1); /* Core where the task should run */
}
void connect()
@ -99,17 +110,6 @@ void messageReceived(String &topic, String &payload)
void loop()
{
StaticJsonDocument<256> eicJsonData;
JsonObject temp = eicJsonData.createNestedObject("temps");
lastMillis = millis();
mqttClient.loop();
delay(10); // <- fixes some issues with WiFi stability
if (!mqttClient.connected())
{
connect();
}
// mqttClient.publish("xfmormermon", "buffer");
@ -126,6 +126,7 @@ void setupMQTTClient()
mqttClient.setClient(wifiClient);
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setBufferSize(512);
}
// this function initializes the energy monitor
@ -168,4 +169,30 @@ void readEICData(void *pvParameters)
for (;;)
{
}
}
// sendSensorDataOverMQTT: reads the EIC and inserts data into queue
void sendSensorDataOverMQTT(void *pvParameters)
{
Serial.print("Task1 running on core ");
Serial.println(xPortGetCoreID());
StaticJsonDocument<512> eicJsonData;
JsonObject temp = eicJsonData.createNestedObject("temps");
xformerMonitorData sensorData;
for (;;)
{
char timeBuffer[32];
strftime(timeBuffer, sizeof(timeBuffer), "%FT%TZ", sensorData.timeInfo);
lastMillis = millis();
mqttClient.loop();
delay(10); // <- fixes some issues with WiFi stability
if (!mqttClient.connected())
{
connect();
}
}
}
Loading…
Cancel
Save