ESP32 MQTT 事件处理

ESP32 MQTT event processing

我正在尝试为我的 ESP32/Arduino IDE 项目使用文件 mqtt_client.h 中定义的 arduino-esp32 方法:

我正在努力制作一个事件处理程序。

我目前有:

#include <mqtt_client.h>

void MQTTEvent(esp_mqtt_event_t event) {
  // process event
}

void setup() {
  esp_mqtt_client_config_t mqtt_cfg;
  mqtt_cfg.host = "192.168.0.126";
  mqtt_cfg.port = 1883;
  mqtt_cfg.client_id = "ESP32";
  mqtt_cfg.uri = "HOMEPC";
  mqtt_cfg.event_handle = MQTTEvent;

  esp_mqtt_client_handle_t mqtt_client = esp_mqtt_client_init(&mqtt_cfg);
  esp_mqtt_client_start(mqtt_client);
}

void loop() {

}

...但它失败了:

*invalid conversion from 'void (*)(esp_mqtt_event_t)' to 'mqtt_event_callback_t {aka int (*)(esp_mqtt_event_t*)}' [-fpermissive]*

on line mqtt_cfg.event_handle = MQTTEvent;

我找不到任何示例。有人可以帮我解决这个问题吗?

您的事件句柄类型错误,它应该 return 和 esp_err_t 所以应该是:

esp_err_t MQTTEvent(esp_mqtt_event_t *event) {
  ...
  return ESP_OK; // you will need to return esp error codes
}

在此处查看定义:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/mqtt.html#_CPPv419esp_mqtt_event_id_t