aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/src/mqtt.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/src/mqtt.c')
-rw-r--r--firmware/src/mqtt.c93
1 files changed, 48 insertions, 45 deletions
diff --git a/firmware/src/mqtt.c b/firmware/src/mqtt.c
index 716feec..90451bc 100644
--- a/firmware/src/mqtt.c
+++ b/firmware/src/mqtt.c
@@ -27,59 +27,62 @@
27static esp_mqtt_client_handle_t client; 27static esp_mqtt_client_handle_t client;
28 28
29static void mqtt_event_handler(void *handler_args, esp_event_base_t base, 29static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
30 int32_t event_id, void *event_data) { 30 int32_t event_id, void *event_data)
31 esp_mqtt_event_handle_t event = event_data; 31{
32 esp_mqtt_event_handle_t event = event_data;
32 33
33 switch (event->event_id) { 34 switch (event->event_id) {
34 case MQTT_EVENT_CONNECTED: 35 case MQTT_EVENT_CONNECTED:
35 printf("MQTT connected!\n"); 36 printf("MQTT connected!\n");
36 esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1); 37 esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1);
37 break; 38 break;
38 39
39 case MQTT_EVENT_DATA: { 40 case MQTT_EVENT_DATA: {
40 char topic[event->topic_len + 1]; 41 char topic[event->topic_len + 1];
41 char data[event->data_len + 1]; 42 char data[event->data_len + 1];
42 memcpy(topic, event->topic, event->topic_len); 43 memcpy(topic, event->topic, event->topic_len);
43 topic[event->topic_len] = '\0'; 44 topic[event->topic_len] = '\0';
44 memcpy(data, event->data, event->data_len); 45 memcpy(data, event->data, event->data_len);
45 data[event->data_len] = '\0'; 46 data[event->data_len] = '\0';
46 47
47 printf("MQTT Msg received\nTopic: %s\nData: %s\n", topic, data); 48 printf("MQTT Msg received\nTopic: %s\nData: %s\n", topic, data);
48 49
49 char *endptr; 50 char *endptr;
50 long long sent = strtoll(data, &endptr, 10); 51 long long sent = strtoll(data, &endptr, 10);
51 if (endptr != data) { 52 if (endptr != data) {
52 long long now = esp_timer_get_time() / 1000ULL; 53 long long now = esp_timer_get_time() / 1000ULL;
53 long long rtt = now - sent; 54 long long rtt = now - sent;
54 printf("RTT: %lld ms\n", rtt); 55 printf("RTT: %lld ms\n", rtt);
55 } 56 }
56 break; 57 break;
57 } 58 }
58 59
59 default: 60 default:
60 break; 61 break;
61 } 62 }
62} 63}
63 64
64static void publisher_task(void *pvParameters) { 65static void publisher_task(void *pvParameters)
65 while (1) { 66{
66 char buf[BUFFER_SIZE]; 67 while (1) {
67 snprintf(buf, BUFFER_SIZE, "%lld", 68 char buf[BUFFER_SIZE];
68 (long long)(esp_timer_get_time() / 1000ULL)); 69 snprintf(buf, BUFFER_SIZE, "%lld",
69 esp_mqtt_client_publish(client, PUB_TOPIC, buf, 0, 1, 0); 70 (long long)(esp_timer_get_time() / 1000ULL));
70 vTaskDelay(pdMS_TO_TICKS(PUBLISH_INTERVAL_MS)); 71 esp_mqtt_client_publish(client, PUB_TOPIC, buf, 0, 1, 0);
71 } 72 vTaskDelay(pdMS_TO_TICKS(PUBLISH_INTERVAL_MS));
73 }
72} 74}
73 75
74void mqtt_app_start(void) { 76void mqtt_app_start(void)
75 esp_mqtt_client_config_t mqtt_cfg = { 77{
76 .broker.address.uri = MQTT_URI, 78 esp_mqtt_client_config_t mqtt_cfg = {
77 }; 79 .broker.address.uri = MQTT_URI,
78 client = esp_mqtt_client_init(&mqtt_cfg); 80 };
79 esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, 81 client = esp_mqtt_client_init(&mqtt_cfg);
80 NULL); 82 esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID,
81 esp_mqtt_client_start(client); 83 mqtt_event_handler, NULL);
84 esp_mqtt_client_start(client);
82 85
83 xTaskCreate(publisher_task, "publisher_task", PUBLISHER_TASK_STACK_SIZE, NULL, 86 xTaskCreate(publisher_task, "publisher_task", PUBLISHER_TASK_STACK_SIZE,
84 PUBLISHER_TASK_PRIORITY, NULL); 87 NULL, PUBLISHER_TASK_PRIORITY, NULL);
85} 88}