ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)
·
文章目录
1 实验目的
学习ESP32连接阿里云物联网平台并实现相互通信;
2 在阿里云物联网平台添加实验设备
- 在阿里云物联网平台添加本次实验设备,详细步骤请参考:阿里云物联网平台创建产品与设备
3 ESP32连接阿里云物联网平台
3.1 准备ESP32工程
- 复制官方例程 examples\protocols\mqtt\tcp
3.2 准备ESP32所需的MQTT相关参数
ESP32使用MQTT协议连接阿里云物联网平台需要用到如下参数:
#define host xxx //或称mqttHostUrl、Broker Address
#define port xxx
#define client_id xxx
#define username xxx
#define password xxx
在阿里云物联网平台查看可查看上诉参数
3.4 ESP32工程主要代码分析
mqtt相关函数详细操作请参考:乐鑫官方说明
/*由阿里网平台可得如下信息*/
// "clientId":"xxxxxFwJvIO.light_02|securemode=2,signmethod=hmacsha256,timestamp=1718174871589|"
// "username":"light_02&xxxxxFwJvIO"
// "mqttHostUrl":"xxxxxFwJvIO.iot-as-mqtt.cn-shanghai.aliyuncs.com"
// "passwd":"xxxxxac7f1796e87ad43fd4dd0ead023d9b8c7e3050a9bae91ab58505dc8a514"
// "port":1883
#define Aliyun_hostname "xxxxxFwJvIO.iot-as-mqtt.cn-shanghai.aliyuncs.com" //或称mqttHostUrl、Broker Address
#define Aliyun_port 1883
#define Aliyun_client_id "xxxxxFwJvIO.light_02|securemode=2,signmethod=hmacsha256,timestamp=1718174871589|"
#define Aliyun_username "light_02&xxxxxFwJvIO"
#define Aliyun_password "xxxxxac7f1796e87ad43fd4dd0ead023d9b8c7e3050a9bae91ab58505dc8a514"
void mqtt_app_start(void)
{
// 官方例程原程序
// esp_mqtt_client_config_t mqtt_cfg = {
// .broker.address.uri = CONFIG_BROKER_URL,
// };
esp_mqtt_client_config_t mqtt_cfg = {
// idf 新版本(esp-idf-V5.2.1)参数配置如下
.broker.address.transport = MQTT_TRANSPORT_OVER_TCP,
.broker.address.hostname = Aliyun_hostname,
.broker.address.port = Aliyun_port,
.credentials.client_id = Aliyun_client_id,
.credentials.username = Aliyun_username,
.credentials.authentication.password = Aliyun_password,
// idf 旧版本参数配置如下
// .host = Aliyun_hostname,
// .port = Aliyun_port,
// .client_id = Aliyun_client_id,
// .username = Aliyun_username,
// .password = Aliyun_password,
};
client = esp_mqtt_client_init(&mqtt_cfg);
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, client);
esp_mqtt_client_start(client);
}
3.5 配置并烧录工程
idf.py menuconfig
配置wifi- 烧录程序
3.6 ESP32连接阿里云物联网验证
- 通过上诉初始化等操作,给esp32烧录程序复位后,esp32串口数据显示连接成功
- 阿里云物联网平台也显示设备在线
4 ESP32与阿里云物联网平台通信
-
复制如下Topic,
-
在程序中修改如下
#define AliyunPublishTopic_user_update "/xxxxxFwJvIO/light_02/user/update"
#define AliyunSubscribeTopic_user_get "/xxxxxFwJvIO/light_02/user/get"
static const char mqtt_publish_data3[] = "hello aliyun, i am esp32.i and you connected ok";
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
esp_mqtt_event_handle_t event = event_data;
esp_mqtt_client_handle_t client = event->client;
int msg_id;
switch ((esp_mqtt_event_id_t)event_id) {
case MQTT_EVENT_CONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
//1. 连接成功后发消息到阿里云物联网平台
msg_id = esp_mqtt_client_publish(client, AliyunPublishTopic_user_update, mqtt_publish_data3, strlen(mqtt_publish_data3), 1, 0);
ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
//2. 订阅阿里云物联网平台 user get topic
msg_id = esp_mqtt_client_subscribe(client, AliyunSubscribeTopic_user_get, 0);
ESP_LOGI(TAG, "execute subscribe event, msg_id=%d", msg_id);
break;
case MQTT_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
break;
case MQTT_EVENT_SUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_UNSUBSCRIBED:
ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_PUBLISHED:
ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
break;
case MQTT_EVENT_DATA:
ESP_LOGI(TAG, "MQTT_EVENT_DATA");
printf("TOPIC=%.*s\r\n", event->topic_len, event->topic);
printf("DATA=%.*s\r\n", event->data_len, event->data);
break;
case MQTT_EVENT_ERROR:
break;
default:
ESP_LOGI(TAG, "Other event id:%d", event->event_id);
break;
}
}
- 编译并烧录程序后,阿里云物联网平台数据如下
- 阿里云发数据给esp32
阅读全文
AI总结
更多推荐
相关推荐
查看更多
鸿蒙开发工具大赶集

本仓将收集和展示鸿蒙开发工具,欢迎大家踊跃投稿。通过pr附上您的工具介绍和使用指南,并加上工具对应的链接,通过的工具将会成功上架到我们社区。
OpenManus

No fortress, purely open ground. OpenManus is Coming.
G-Star公益行

G-Star 公益行 是 GitCode G-Star 计划旗下专为公益机构打造的技术赋能计划,依托 GitCode 开源平台、生态流量、云计算与 AI 支持,旨在连接开源技术与公益组织,通过技术赋能帮助公益组织实现数字化转型,以提升运营效率、优化资源配置、拓展公益影响力。
热门开源项目
活动日历
查看更多
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
直播时间 2025-03-05 14:35:37

国产工作流引擎 终结「996」开发困局!
直播时间 2025-02-25 14:38:13

免费开源宝藏 ShopXO,电商系统搭建秘籍大公开!
直播时间 2025-02-18 14:31:04

从数据孤岛到数据智能 - 企业级数据管理利器深度解析
目录
所有评论(0)