1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)

ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)

时间:2020-09-25 01:45:41

相关推荐

ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)

文章目录

1 实验目的2 在阿里云物联网平台添加实验设备3 ESP32连接阿里云物联网平台3.1 准备ESP32工程3.2 准备ESP32所需的MQTT相关参数3.4 ESP32工程主要代码分析3.5 ESP32连接阿里云物联网验证3.5.1 ESP32发布数据到阿里云物联网平台3.5.2 阿里云物联网平台发布数据给ESP324 工程链接

1 实验目的

学习ESP32连接阿里云物联网平台并实现相互通信;

2 在阿里云物联网平台添加实验设备

在阿里云物联网平台添加本次实验设备,详细步骤请参考:阿里云物联网平台创建产品与设备

3 ESP32连接阿里云物联网平台

3.1 准备ESP32工程

选择 app-wifi-station 作为基础工程,并更改工程名为app-MqttToAliyun参考官方例程examples\protocols\mqtt\tcpexamples\protocols\mqtt\tcp例程相关文件复制到app-MqttToAliyun工程中,在此基础上修改。

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

获取上述参数有两种方法:

方法1:直接在阿里云物联网平台查看(旧版本中不能直接查看)

方法2:根据阿里云物联网提供的数据自行计算

在阿里云物联网平台查找如下参数

ProductKey、DeviceName、DeviceSecret、Region

打开阿里云物联网平台新建的ESP32设备页面

从上图中我们可以得到如下数据:

/*由阿里网平台可得如下数据*/// ProductKey:"a1tUbQR2faQ"; // DeviceName:"dev-esp32"; // DeviceSecret:"e624520f1xxxxxxe0d02cd0ca99c94c1";// Region:"cn-shanghai";

根据上诉查找数据按格式转换为程序中mqtt配置参数(注意client_id中的112233可自己随意设定)

/*Broker Address(host):${YourProductKey}.iot-as-mqtt.${YourRegionId}.*/#define host "a1tUbQR2faQ.iot-as--"#define port 1883 /*固定*//*Client ID:${ClientID}|securemode=${Mode},signmethod=${SignMethod}|*/#define client_id "112233|securemode=2,signmethod=hmacsha1|"/*User Name:${DeviceName}&${ProductKey}*/#define username "dev-esp32&a1tUbQR2faQ"/*使用官网 MQTT_Password 工具生成*/#define password "9ABE732ED28xxxxxxE7336FA824C26E744413360"

Address(host)、port、client_id详细配置过程请参考官方说明:使用MQTT.fx接入物联网平台

username、password详细配置过程请参考官方说明:使用MQTT.fx接入物联网平台

3.4 ESP32工程主要代码分析

mqtt相关函数详细操作请参考:乐鑫官方说明

/*!!!!!!如下信息请替换成自己在阿里云的信息!!!!!!*//*由阿里网平台可得如下信息*/// ProductKey:"a1tUbQR2faQ"; // DeviceName:"dev-esp32"; // DeviceSecret:"e624520f169c755e0d02cd0ca99c94c1";// Region:"cn-shanghai";/*下面一参数为自定义*/// ClientID:="112233"; /*Broker Address:${YourProductKey}.iot-as-mqtt.${YourRegionId}.*/#define Aliyun_host "a1tUbQR2faQ.iot-as--"#define Aliyun_port 1883/*Client ID:${ClientID}|securemode=${Mode},signmethod=${SignMethod}|*/#define Aliyun_client_id "112233|securemode=2,signmethod=hmacsha1|"/*User Name:${DeviceName}&${ProductKey}*/#define Aliyun_username "dev-esp32&a1tUbQR2faQ"/*使用官网 MQTT_Password 工具生成*/#define Aliyun_password "9ABE732ED28xxxxxxE7336FA824C26E744413360"#define AliyunSubscribeTopic_user_get"/a1tUbQR2faQ/dev-esp32/user/get"#define AliyunPublishTopic_user_update "/a1tUbQR2faQ/dev-esp32/user/update"void user_mqtt_app_start(void){esp_mqtt_client_config_t mqtt_cfg = {.host = Aliyun_host,.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 ESP32连接阿里云物联网验证

通过上诉初始化等操作,给esp32烧录程序复位后,esp32串口数据显示连接成功

阿里云物联网平台也显示设备在线

3.5.1 ESP32发布数据到阿里云物联网平台

想要通过ESP32发布消息到阿里云物联网平台,除了上诉初始化以外,还需要获取阿里云物联网平台具有发布权限的Topic。

在程序中添加该Topic路径

///a1Buwr73pUI/${deviceName}/user/update //注意把deviceName换成测试的设备名#define AliyunPublishTopic_user_update "/a1Buwr73pUI/dev-esp32/user/update"

间隔2秒,一共发布6次数据

char mqtt_publish_data3[] = "mqtt i am esp32";static void mqtt_test_task(void *pvParameters){uint8_t num = 0;while(1){esp_mqtt_client_publish(client, AliyunPublishTopic_user_update, mqtt_publish_data3, strlen(mqtt_publish_data3), 1, 0);vTaskDelay(2000 / portTICK_PERIOD_MS);if(num++ > 5) break;}vTaskDelete(NULL);}

阿里云物联网平台数据如下

3.5.2 阿里云物联网平台发布数据给ESP32

想要通过阿里云物联网平台发布数据给ESP32,除了上诉初始化以外,还需要获取阿里云物联网平台具有订阅权限的Topic。

在程序中添加该Topic路径

#define AliyunSubscribeTopic_user_get"/a1Buwr73pUI/dev-esp32/user/get"static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event){// 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, AliyunSubscribeTopic_user_get, 0);ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);

在阿里云上发布消息

查看ESP32串口数据

4 工程链接

Gitee平台链接:点击我

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。