c - ESP-32 无法连接到 MQTT 代理:mqtt_client: Error network response
问题描述
我正在尝试将使用 ESP-IDF 框架运行的 ESP32 连接到 MQTT。我已成功导入此MQTT 库,并将配置设置为如下所示:
static void mqtt_app_start(void)
{
const esp_mqtt_client_config_t mqtt_cfg = {
// .host = "m15.cloudmqtt.com",
.uri = "mqtt://rxarkckf:smNb81Ppfe7T@m15.cloudmqtt.com:10793", // uri in the format (username:password@domain:port)
// .host = "m15.cloudmqtt.com", // config with host, port, user, password seperated
// .port = 10793,
// .username = "rxarkckf",
// .password = "smNb81Ppfe7T",
.event_handle = mqtt_event_handler,
// .user_context = (void *)your_context
};
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_start(client);
}
我调用 mqtt_app_start(); 在我的 app_main 函数中。上传代码后,我的 ESP-32 未连接到 MQTT 代理并输出:
␛[0;32mI (12633410) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000␛[0m
␛[0;31mE (12633710) MQTT_CLIENT: Error network response␛[0m
␛[0;32mI (12633710) MQTT_CLIENT: Error MQTT Connected␛[0m
␛[0;32mI (12633710) MQTT_CLIENT: Reconnect after 10000 ms␛[0m
␛[0;32mI (12633710) MQTT_SAMPLE: MQTT_EVENT_DISCONNECTED␛[0m
我仔细检查了主机、用户名、密码和端口的值是否正确。当我查看托管在 cloudmqtt.com 的 Web 界面上的日志时,我可以看到以下输出:
2018-11-17 03:50:53: New connection from 73.94.66.49 on port 10793.
2018-11-17 03:50:53: Invalid protocol "MQIs�" in CONNECT from 73.94.66.49.
2018-11-17 03:50:53: Socket error on client <unknown>, disconnecting.
2018-11-17 03:51:20: New connection from 73.94.66.49 on port 10793.
解决方案
我在使用 mosquitto 时也有类似的经历。
将此行添加到 mqtt_config.h 使我的 mqtt 工作。
#define CONFIG_MQTT_PROTOCOL_311
我认为设置此配置的更正确方法是在 sdkconfig.h 中,手动或使用“make menuconfig”
推荐阅读
- c# - Xamarin 使用 FontAwesome 创建自定义按钮
- sql-server - 无法理解给定连接字符串的数据源部分
- javascript - React js表单中的POST API请求?
- php - Laravel,要查看的传递变量数组
- string - Flutter拆分并使特定单词加粗
- python - 单击一个州以在 Altair 图表中显示其县
- java - System.currentTimeMillis 在 Eclipse 的 Junit 测试中无法正常工作
- javascript - Puppeteer 缺少响应并且行为与 Pyppeteer 不同
- javascript - 如何减少 eCharts 的填充?
- sql - SQL 子句中的条件 WHERE