diff --git a/ADIS_ESP32_Eclipse/.project b/ADIS_ESP32_Eclipse/.project
index 38c557d..b84ad82 100644
--- a/ADIS_ESP32_Eclipse/.project
+++ b/ADIS_ESP32_Eclipse/.project
@@ -5,6 +5,11 @@
+
+ org.eclipse.xtext.ui.shared.xtextBuilder
+
+
+
org.eclipse.cdt.managedbuilder.core.genmakebuilder
clean,full,incremental,
@@ -23,6 +28,7 @@
org.eclipse.cdt.core.ccnature
org.eclipse.cdt.managedbuilder.core.managedBuildNature
org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+ org.eclipse.xtext.ui.shared.xtextNature
diff --git a/ADIS_ESP32_Eclipse/main/CMakeLists.txt b/ADIS_ESP32_Eclipse/main/CMakeLists.txt
index b4fcedb..8696903 100644
--- a/ADIS_ESP32_Eclipse/main/CMakeLists.txt
+++ b/ADIS_ESP32_Eclipse/main/CMakeLists.txt
@@ -16,6 +16,8 @@ idf_component_register(
"timer.c"
"sntp_time.c"
"robot.c"
+ "myMqtt.c"
+ "application.c"
INCLUDE_DIRS
"."
diff --git a/ADIS_ESP32_Eclipse/main/application.c b/ADIS_ESP32_Eclipse/main/application.c
new file mode 100644
index 0000000..1a1c4cc
--- /dev/null
+++ b/ADIS_ESP32_Eclipse/main/application.c
@@ -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");
+ }
+}
+
diff --git a/ADIS_ESP32_Eclipse/main/application.h b/ADIS_ESP32_Eclipse/main/application.h
new file mode 100644
index 0000000..6d0383b
--- /dev/null
+++ b/ADIS_ESP32_Eclipse/main/application.h
@@ -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_ */
diff --git a/ADIS_ESP32_Eclipse/main/myMqtt.c b/ADIS_ESP32_Eclipse/main/myMqtt.c
new file mode 100644
index 0000000..984245f
--- /dev/null
+++ b/ADIS_ESP32_Eclipse/main/myMqtt.c
@@ -0,0 +1,121 @@
+/*
+ * myMqtt.c
+ *
+ * Created on: 25.11.2022
+ * Author: jonas
+ */
+
+#include "myMqtt.h"
+#include
+#include
+#include
+#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;
+ }
+}
diff --git a/ADIS_ESP32_Eclipse/main/myMqtt.h b/ADIS_ESP32_Eclipse/main/myMqtt.h
new file mode 100644
index 0000000..b5324d2
--- /dev/null
+++ b/ADIS_ESP32_Eclipse/main/myMqtt.h
@@ -0,0 +1,21 @@
+/*
+ * myMqtt.h
+ *
+ * Created on: 25.11.2022
+ * Author: jonas
+ */
+
+#ifndef MAIN_MYMQTT_H_
+#define MAIN_MYMQTT_H_
+
+#include
+
+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_ */
diff --git a/ADIS_ESP32_Eclipse/main/platform.c b/ADIS_ESP32_Eclipse/main/platform.c
index 660df67..a260af0 100644
--- a/ADIS_ESP32_Eclipse/main/platform.c
+++ b/ADIS_ESP32_Eclipse/main/platform.c
@@ -53,6 +53,7 @@
#include "McuCriticalSection.h"
#include "esp32_mac.h"
#include "rs485.h"
+#include "application.c"
void PL_Init(void) {
McuLib_Init();
@@ -104,4 +105,7 @@ void PL_Init(void) {
#if PL_CONFIG_USE_ROBO_REMOTE
ROBOT_Init();
#endif
+#if PL_CONFIG_APPLICATION_ACTIVATED
+ Application_Start();
+#endif
}
diff --git a/ADIS_ESP32_Eclipse/main/platform.h b/ADIS_ESP32_Eclipse/main/platform.h
index 89d4a7a..001429f 100644
--- a/ADIS_ESP32_Eclipse/main/platform.h
+++ b/ADIS_ESP32_Eclipse/main/platform.h
@@ -17,10 +17,12 @@
#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_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_ROBO_REMOTE (1 && PL_CONFIG_USE_UDP_SERVER) /* UDP Remote controller for robot */
+#define PL_CONFIG_APPLICATION_ACTIVATED (1)
+
/*! \brief Module and platform initialization */
void PL_Init(void);