aboutsummaryrefslogtreecommitdiffstats
path: root/src/mqtt.c
diff options
context:
space:
mode:
authorFilip Wandzio <contact@philw.dev>2025-09-04 01:11:11 +0200
committerFilip Wandzio <contact@philw.dev>2025-09-04 01:11:11 +0200
commite00f3a9ede1b8e46b480bd68daf48da0bb08acae (patch)
treef666b9aa4d0a03246ab9880e11802d91a23ab1e7 /src/mqtt.c
downloade1-e00f3a9ede1b8e46b480bd68daf48da0bb08acae.tar.gz
e1-e00f3a9ede1b8e46b480bd68daf48da0bb08acae.zip
Initial
Diffstat (limited to 'src/mqtt.c')
-rw-r--r--src/mqtt.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/mqtt.c b/src/mqtt.c
new file mode 100644
index 0000000..716feec
--- /dev/null
+++ b/src/mqtt.c
@@ -0,0 +1,85 @@
1#include "mqtt.h"
2#include "config.h"
3#include "esp_log.h"
4#include "esp_timer.h"
5#include "freertos/FreeRTOS.h"
6#include "freertos/task.h"
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10
11#ifndef BUFFER_SIZE
12#define BUFFER_SIZE 64
13#endif
14
15#ifndef PUBLISH_INTERVAL_MS
16#define PUBLISH_INTERVAL_MS 1000
17#endif
18
19#ifndef PUBLISHER_TASK_STACK_SIZE
20#define PUBLISHER_TASK_STACK_SIZE 4096
21#endif
22
23#ifndef PUBLISHER_TASK_PRIORITY
24#define PUBLISHER_TASK_PRIORITY 5
25#endif
26
27static esp_mqtt_client_handle_t client;
28
29static void mqtt_event_handler(void *handler_args, esp_event_base_t base,
30 int32_t event_id, void *event_data) {
31 esp_mqtt_event_handle_t event = event_data;
32
33 switch (event->event_id) {
34 case MQTT_EVENT_CONNECTED:
35 printf("MQTT connected!\n");
36 esp_mqtt_client_subscribe(event->client, SUB_TOPIC, 1);
37 break;
38
39 case MQTT_EVENT_DATA: {
40 char topic[event->topic_len + 1];
41 char data[event->data_len + 1];
42 memcpy(topic, event->topic, event->topic_len);
43 topic[event->topic_len] = '\0';
44 memcpy(data, event->data, event->data_len);
45 data[event->data_len] = '\0';
46
47 printf("MQTT Msg received\nTopic: %s\nData: %s\n", topic, data);
48
49 char *endptr;
50 long long sent = strtoll(data, &endptr, 10);
51 if (endptr != data) {
52 long long now = esp_timer_get_time() / 1000ULL;
53 long long rtt = now - sent;
54 printf("RTT: %lld ms\n", rtt);
55 }
56 break;
57 }
58
59 default:
60 break;
61 }
62}
63
64static void publisher_task(void *pvParameters) {
65 while (1) {
66 char buf[BUFFER_SIZE];
67 snprintf(buf, BUFFER_SIZE, "%lld",
68 (long long)(esp_timer_get_time() / 1000ULL));
69 esp_mqtt_client_publish(client, PUB_TOPIC, buf, 0, 1, 0);
70 vTaskDelay(pdMS_TO_TICKS(PUBLISH_INTERVAL_MS));
71 }
72}
73
74void mqtt_app_start(void) {
75 esp_mqtt_client_config_t mqtt_cfg = {
76 .broker.address.uri = MQTT_URI,
77 };
78 client = esp_mqtt_client_init(&mqtt_cfg);
79 esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler,
80 NULL);
81 esp_mqtt_client_start(client);
82
83 xTaskCreate(publisher_task, "publisher_task", PUBLISHER_TASK_STACK_SIZE, NULL,
84 PUBLISHER_TASK_PRIORITY, NULL);
85}