乐鑫技术交流
直播中

王凯

7年用户 1249经验值
私信 关注
[问答]

如何在rtos mqtt示例中获取客户端句柄?

我正在使用 RTOS SDK 附带的示例之一:(examples/protocols/mqtt/tcp) 并且我添加了串行端口,因为我想发送要发布到 MQTT 代理的数据。所以在我的 UART 队列中,我调用
代码:全选esp_mqtt_client_publish()

但我没有客户端句柄,它只在回调中设置。我尝试使用客户端句柄的全局副本,但它没有用,除了是个坏主意:
代码:全选esp_mqtt_client_handle_t gclient = NULL;

static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
{
    esp_mqtt_client_handle_t client = event->client;
    gclient = client;
    int msg_id;
    // your_context_t *context = event->context;
    switch (event->event_id) {
        case MQTT_EVENT_CONNECTED:
            ESP_LOGI(TAG, \"MQTT_EVENT_CONNECTED\");
            msg_id = esp_mqtt_client_subscribe(client, \"debug/test1\", 0);
            ESP_LOGI(TAG, \"sent subscribe successful, msg_id=%d\", msg_id);

            msg_id = esp_mqtt_client_subscribe(client, \"debug/test2\", 1);
            ESP_LOGI(TAG, \"sent subscribe successful, msg_id=%d\", msg_id);
            /*
            msg_id = esp_mqtt_client_publish(client, \"/topic/qos1\", \"data_3\", 0, 1, 0);
            ESP_LOGI(TAG, \"sent publish successful, msg_id=%d\", msg_id);

有没有什么优雅的方法可以让客户端在回调之外处理?或者另一种方法是创建自定义事件并将该消息发送到回调?




                        

更多回帖

发帖
×
20
完善资料,
赚取积分