implemented myMqtt and application in ESP32 project for Challenge

main
Jonas Arnold 4 years ago
parent 970fda699d
commit 51a85c441d
  1. 6
      ADIS_ESP32_Eclipse/.project
  2. 2
      ADIS_ESP32_Eclipse/main/CMakeLists.txt
  3. 59
      ADIS_ESP32_Eclipse/main/application.c
  4. 13
      ADIS_ESP32_Eclipse/main/application.h
  5. 121
      ADIS_ESP32_Eclipse/main/myMqtt.c
  6. 21
      ADIS_ESP32_Eclipse/main/myMqtt.h
  7. 4
      ADIS_ESP32_Eclipse/main/platform.c
  8. 4
      ADIS_ESP32_Eclipse/main/platform.h

@ -5,6 +5,11 @@
<projects> <projects>
</projects> </projects>
<buildSpec> <buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand> <buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers> <triggers>clean,full,incremental,</triggers>
@ -23,6 +28,7 @@
<nature>org.eclipse.cdt.core.ccnature</nature> <nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures> </natures>
<linkedResources> <linkedResources>
<link> <link>

@ -16,6 +16,8 @@ idf_component_register(
"timer.c" "timer.c"
"sntp_time.c" "sntp_time.c"
"robot.c" "robot.c"
"myMqtt.c"
"application.c"
INCLUDE_DIRS INCLUDE_DIRS
"." "."

@ -0,0 +1,59 @@
/*
* application.s
*
* Created on: 25.11.2022
* Author: jonas
*/
#include "application.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "myMqtt.h"
#include "wifi.h"
static TaskHandle_t appTaskHandle;
static void appTask(void *pv){
if(pv != NULL){
printf("task argument: %s\n", (char*)pv);
}
printf("Application was started");
fflush(stdout);
while(WiFi_isConnected() == false){
vTaskDelay(pdMS_TO_TICKS(1000));
}
// wifi now connected
printf("Application task detected that WiFi is connected\n");
if(MyMqtt_Init()){
vTaskDelay(pdMS_TO_TICKS(1000));
printf("5s done\n");
MyMqtt_Subscribe("scada/status");
printf("Application endless task was started\n");
fflush(stdout);
// endless loop
for(;;){
MyMqtt_Publish("scada/status", "Testmessage from ESP");
vTaskDelay(pdMS_TO_TICKS(10000));
}
} else {
printf("Init of MyMqtt failed! Quitting application task.\n");
}
}
BaseType_t res;
void Application_Start(void){
res = xTaskCreate(appTask, "task1", 4096/sizeof(StackType_t), (void*)"ARG_0", tskIDLE_PRIORITY, &appTaskHandle);
if(res != pdPASS){
printf("creating myTask failed!\r\n");
}
}

@ -0,0 +1,13 @@
/*
* application.h
*
* Created on: 25.11.2022
* Author: jonas
*/
#ifndef MAIN_APPLICATION_H_
#define MAIN_APPLICATION_H_
void Application_Start(void);
#endif /* MAIN_APPLICATION_H_ */

@ -0,0 +1,121 @@
/*
* myMqtt.c
*
* Created on: 25.11.2022
* Author: jonas
*/
#include "myMqtt.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include "esp_log.h"
#include "mqtt_client.h"
// Settings
#define CONFIG_BROKER_URL "mqtt://10.180.254.80"
// tag for logging with ESP_LOG
static const char *TAG = "MY_MQTT";
// declarations
static void log_error_if_nonzero(const char *message, int error_code);
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);
// variables
esp_mqtt_client_handle_t client;
bool MyMqtt_Init(void){
esp_mqtt_client_config_t mqtt_cfg = {
.uri = CONFIG_BROKER_URL,
};
client = esp_mqtt_client_init(&mqtt_cfg);
/* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
esp_err_t mqtt_error = esp_mqtt_client_start(client);
return mqtt_error == ESP_OK;
}
void MyMqtt_Deinit(void){
client = NULL;
}
void MyMqtt_Publish(const char *topic, const char *data){
int msg_id = esp_mqtt_client_publish(client, topic, data, 0, 1, 0);
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
}
void MyMqtt_Subscribe(const char *topic){
int msg_id = esp_mqtt_client_subscribe(client, topic, 0);
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d, success=%s", msg_id, msg_id==-1 ? "false" : "true");
}
/***********/
/* HELPERS */
/***********/
static void log_error_if_nonzero(const char *message, int error_code)
{
if (error_code != 0) {
ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code);
}
}
/*
* @brief Event handler registered to receive MQTT events
*
* This function is called by the MQTT client event loop.
*
* @param handler_args user data registered to the event.
* @param base Event base for the handler(always MQTT Base in this example).
* @param event_id The id for the received event.
* @param event_data The data for the event, esp_mqtt_event_handle_t.
*/
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
esp_mqtt_event_handle_t event = event_data;
// unused: esp_mqtt_client_handle_t client = event->client;
switch ((esp_mqtt_event_id_t)event_id) {
case MQTT_EVENT_CONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
break;
case MQTT_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
break;
case MQTT_EVENT_SUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_UNSUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_PUBLISHED:
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_DATA:
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
printf("DATA=%.*s\r\n", event->data_len, event->data);
break;
case MQTT_EVENT_ERROR:
ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno);
ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
}
break;
default:
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
break;
}
}

@ -0,0 +1,21 @@
/*
* myMqtt.h
*
* Created on: 25.11.2022
* Author: jonas
*/
#ifndef MAIN_MYMQTT_H_
#define MAIN_MYMQTT_H_
#include <stdbool.h>
bool MyMqtt_Init(void);
void MyMqtt_Deinit(void);
void MyMqtt_Publish(const char *topic, const char *data);
void MyMqtt_Subscribe(const char *topic);
#endif /* MAIN_MYMQTT_H_ */

@ -53,6 +53,7 @@
#include "McuCriticalSection.h" #include "McuCriticalSection.h"
#include "esp32_mac.h" #include "esp32_mac.h"
#include "rs485.h" #include "rs485.h"
#include "application.c"
void PL_Init(void) { void PL_Init(void) {
McuLib_Init(); McuLib_Init();
@ -104,4 +105,7 @@ void PL_Init(void) {
#if PL_CONFIG_USE_ROBO_REMOTE #if PL_CONFIG_USE_ROBO_REMOTE
ROBOT_Init(); ROBOT_Init();
#endif #endif
#if PL_CONFIG_APPLICATION_ACTIVATED
Application_Start();
#endif
} }

@ -17,10 +17,12 @@
#define PL_CONFIG_USE_SHELL (1) /*!< implements shell between robot and ESP32 */ #define PL_CONFIG_USE_SHELL (1) /*!< implements shell between robot and ESP32 */
#define PL_CONFIG_USE_RS485 (1) /*!< ESP32 using RS-485 to split-flaps */ #define PL_CONFIG_USE_RS485 (1) /*!< ESP32 using RS-485 to split-flaps */
#define PL_CONFIG_USE_SNTP_TIME (0 && PL_CONFIG_USE_WIFI) #define PL_CONFIG_USE_SNTP_TIME (1 && PL_CONFIG_USE_WIFI)
#define PL_CONFIG_USE_TIME_DATE (1) /*!< if using Time and Date information */ #define PL_CONFIG_USE_TIME_DATE (1) /*!< if using Time and Date information */
#define PL_CONFIG_USE_ROBO_REMOTE (1 && PL_CONFIG_USE_UDP_SERVER) /* UDP Remote controller for robot */ #define PL_CONFIG_USE_ROBO_REMOTE (1 && PL_CONFIG_USE_UDP_SERVER) /* UDP Remote controller for robot */
#define PL_CONFIG_APPLICATION_ACTIVATED (1)
/*! \brief Module and platform initialization */ /*! \brief Module and platform initialization */
void PL_Init(void); void PL_Init(void);

Loading…
Cancel
Save