From 9a6402f32e2b97ab75a37ed0134a617085bc5769 Mon Sep 17 00:00:00 2001 From: Jonas Arnold Date: Thu, 22 Dec 2022 18:31:57 +0100 Subject: [PATCH] implemented auto publish of battery voltage in both robot modes (ESP32) --- ADIS_ESP32_Eclipse/main/challenge_app.c | 4 +- ADIS_ESP32_Eclipse/main/challenge_com.c | 67 ++++++++++++++++--------- ADIS_ESP32_Eclipse/main/challenge_com.h | 3 ++ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/ADIS_ESP32_Eclipse/main/challenge_app.c b/ADIS_ESP32_Eclipse/main/challenge_app.c index 860aa03..4adf07e 100644 --- a/ADIS_ESP32_Eclipse/main/challenge_app.c +++ b/ADIS_ESP32_Eclipse/main/challenge_app.c @@ -56,7 +56,9 @@ static void appTask(void *pv){ // endless loop for(;;){ - vTaskDelay(pdMS_TO_TICKS(10000)); + vTaskDelay(pdMS_TO_TICKS(5000)); + // auto publish battery voltage + Challenge_Com_PublishBatteryVoltage(); } } diff --git a/ADIS_ESP32_Eclipse/main/challenge_com.c b/ADIS_ESP32_Eclipse/main/challenge_com.c index d8ea50b..264bef5 100644 --- a/ADIS_ESP32_Eclipse/main/challenge_com.c +++ b/ADIS_ESP32_Eclipse/main/challenge_com.c @@ -31,8 +31,9 @@ const char MQTT_TOPIC_ROBO_NAV_STOP[] = "/mobile/cmd/nav/stop/"; const char MQTT_TOPIC_ROBO_CALIB_CMD[] = "/mobile/cmd/line_sens/calib"; const char MQTT_TOPIC_ROBO_GET_CALIB[] = "/mobile/cmd/line_sens/get_calib"; const char MQTT_TOPIC_ROBO_CALIB_STATE[] = "/mobile/state/line_sens/calib_data"; -const char MQTT_TOPIC_ROBO_REQ_BATTERY[] = "/mobile/cmd/battery/get_volt"; +const char MQTT_TOPIC_REQ_BATTERY[] = "/both/cmd/battery/get_volt"; const char MQTT_TOPIC_ROBO_RESP_BATTERY[] = "/mobile/state/battery/voltage"; +const char MQTT_TOPIC_STAT_RESP_BATTERY[] = "/stationary/state/battery/voltage"; void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data){ /* INFO @@ -197,23 +198,14 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t MyMqtt_Publish(MQTT_TOPIC_ROBO_CALIB_STATE, (char*)payload); } - // CMD: ROBO_REQ_BATTERY - else if(McuUtility_strcmp(topic, MQTT_TOPIC_ROBO_REQ_BATTERY)==0){ - handled = true; - unsigned char voltage[20] = ""; - Robo_Wrapper_GetBatteryVoltage(voltage); - ESP_LOGI(TAG, "Read battery voltage=%s", voltage); - - // build json and respond - unsigned char payload[100] = "{\"voltage\": \""; - McuUtility_strcat(payload, sizeof(payload), voltage); - McuUtility_strcat(payload, sizeof(payload), (unsigned char*)"\"}"); - - MyMqtt_Publish(MQTT_TOPIC_ROBO_RESP_BATTERY, (char*)payload); - } } /* both robot modes allowed commands */ + // CMD: REQ_BATTERY + if(McuUtility_strcmp(topic, MQTT_TOPIC_REQ_BATTERY)==0){ + handled = true; + Challenge_Com_PublishBatteryVoltage(); + } @@ -223,15 +215,40 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t return; } +void Challenge_Com_PublishBatteryVoltage(void){ + unsigned char voltage[20] = ""; + Robo_Wrapper_GetBatteryVoltage(voltage); + ESP_LOGI(TAG, "Read battery voltage=%s", voltage); + + // build json and respond + unsigned char payload[100] = "{\"voltage\": \""; + McuUtility_strcat(payload, sizeof(payload), voltage); + McuUtility_strcat(payload, sizeof(payload), (unsigned char*)"\"}"); + + if(Challenge_App_GetRobotMode() == true){ + MyMqtt_Publish(MQTT_TOPIC_STAT_RESP_BATTERY, (char*)payload); + } + else{ + MyMqtt_Publish(MQTT_TOPIC_ROBO_RESP_BATTERY, (char*)payload); + } +} + void Challenge_Com_SubscribeToAllTopics(void){ - MyMqtt_Subscribe(MQTT_TOPIC_SF_INITALL); - MyMqtt_Subscribe(MQTT_TOPIC_SF_DISPLAY); - MyMqtt_Subscribe(MQTT_TOPIC_SF_CONFIG_SETUP); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_MODE); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_MOVE); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_TURN); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_STOP); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_CALIB_CMD); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_GET_CALIB); - MyMqtt_Subscribe(MQTT_TOPIC_ROBO_REQ_BATTERY); + /* subscribe to stationary robot interested topics */ + if(Challenge_App_GetRobotMode() == true){ + MyMqtt_Subscribe(MQTT_TOPIC_SF_INITALL); + MyMqtt_Subscribe(MQTT_TOPIC_SF_DISPLAY); + MyMqtt_Subscribe(MQTT_TOPIC_SF_CONFIG_SETUP); + } + /* subscribe to mobile robot interested topics */ + else{ + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_MODE); + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_MOVE); + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_TURN); + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_NAV_STOP); + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_CALIB_CMD); + MyMqtt_Subscribe(MQTT_TOPIC_ROBO_GET_CALIB); + } + /* subscribe to topics relevant for both modes */ + MyMqtt_Subscribe(MQTT_TOPIC_REQ_BATTERY); } diff --git a/ADIS_ESP32_Eclipse/main/challenge_com.h b/ADIS_ESP32_Eclipse/main/challenge_com.h index 8d15acb..26564f5 100644 --- a/ADIS_ESP32_Eclipse/main/challenge_com.h +++ b/ADIS_ESP32_Eclipse/main/challenge_com.h @@ -16,4 +16,7 @@ void Challenge_Com_ParseMqtt(void *handler_args, esp_event_base_t base, int32_t /*! \brief subscribes to all relevant topics */ void Challenge_Com_SubscribeToAllTopics(void); +/*! \brief publish the battery voltage */ +void Challenge_Com_PublishBatteryVoltage(void); + #endif /* MAIN_CHALLENGE_COM_H_ */