diff options
Diffstat (limited to 'firmware/src/mqtt.c')
| -rw-r--r-- | firmware/src/mqtt.c | 93 |
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 @@ | |||
| 27 | static esp_mqtt_client_handle_t client; | 27 | static esp_mqtt_client_handle_t client; |
| 28 | 28 | ||
| 29 | static void mqtt_event_handler(void *handler_args, esp_event_base_t base, | 29 | static 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 | ||
| 64 | static void publisher_task(void *pvParameters) { | 65 | static 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 | ||
| 74 | void mqtt_app_start(void) { | 76 | void 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 | } |
