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

1 实验目的

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

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

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

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

3.1 准备ESP32工程

  1. 复制官方例程 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 配置并烧录工程

  1. idf.py menuconfig配置wifi
  2. 烧录程序

3.6 ESP32连接阿里云物联网验证

  1. 通过上诉初始化等操作,给esp32烧录程序复位后,esp32串口数据显示连接成功
    在这里插入图片描述
  2. 阿里云物联网平台也显示设备在线
    在这里插入图片描述

4 ESP32与阿里云物联网平台通信

  1. 复制如下Topic,
    在这里插入图片描述

  2. 在程序中修改如下

#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;
    }
}
  1. 编译并烧录程序后,阿里云物联网平台数据如下
    在这里插入图片描述
  2. 阿里云发数据给esp32
    在这里插入图片描述
  • 54
    点赞
  • 338
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
### 回答1: ESP32连接阿里云MQTT物联网平台的Arduino支持库是一种便捷的物联网连接方式,可以实时获取设备数据并作出相应的控制。以下是步骤: 1. 下载阿里云Arduino支持库,安装到Arduino IDE开发环境; 2. 获取阿里云MQTT物联网平台(IoT Platform)的密钥信息,包括:设备证书、密钥等; 3. 编写代码,包括:WiFi连接、MQTT连接、数据监听、数据、控制响应等,上ESP32开发板上; 4. 在阿里云控制台创建对应设备,定义设备的物模型、功能、属性等; 5. 将ESP32连接WiFi并连接阿里云MQTT物联网平台后,即可实现设备控制与数据获取等功能。 需要注意的是,在使用ESP32连接阿里云MQTT物联网平台过程中,应注意设备的网络稳定性、MQTT协议的消息确认机制等方面的问题。合理使用阿里云提供的服务和开发工具,能够更好地实现IoT物联网应用场景。 ### 回答2: ESP32是一款功能强大的微控制器,可以与阿里云MQTT物联网平台进行连接。为了实现这一目标,我们需要使用适用于Arduino的ESP32连接阿里云MQTT物联网平台的库。 这个库可以在Arduino ID中下载,它允许ESP32与阿里云MQTT物联网平台实现关联和同步。我们只需要在Arduino IDE中添加库并编写所需的代码,就可以建立连接。 在详细说明之前,需要先确定在阿里云MQTT物联网平台中已创建AWS IoT设备,并获取设备证书、设备密钥和CA证书。这些证书将用于连接到阿里云服务。 接下来,在Arduino IDE中添加库并开始编写代码。代码确认设备连接信息并建立MQTT连接。代码还包括订阅主题、发布消息和处理回消息等功能。 在使用此库连接ESP32并阿里云MQTT物联网平台时,需要记住以下几点: 1.确认ESP32的设备IP地址并相应地更改代码。 2.在阿里云MQTT物联网平台上添加主题和订阅者。 3.正确配置阿里云MQTT物联网平台的策略和权限,确保ESP32可以正确访问。 一旦连接成功,ESP32就可以通过阿里云MQTT物联网平台与其他设备进行数据交换,实现智能家居、感器应用和其他物联网应用。 ### 回答3: ESP32是一款广泛应用物联网设备的微型控制器,它具有高度集成的蓝牙和Wi-Fi模块,可用于快速构建和部署智能设备和系统。阿里云MQTT物联网平台是一个领先的云端服务平台,提供了可靠、高效的通信,帮助开发人员更好地管理和控制物联网设备。在这种情况下,合并ESP32和阿里云平台的连接可以极大地提高物联网设备的运行效率和控制能力。为实现这种连接,实用的方法是使用arduino支持库。 与其他加密、配对和通信协议不同,MQTT是一个极为开放的协议,并可以广泛用于不同的设备和应用。阿里云MQTT物联网平台支持MQTT协议,为开发人员创建更加智能化的物联网设备提供了全面的解决方案。 开发人员可以使用esp32连接阿里云mqtt物联网平台的arduino支持库。该库包含了所有用于连接和操作MQTT服务的必备组件,如mqtt客户端、设备管理、云消息代理等。您可以在阿里云物联网控制台上获取所有必要的信息和证书,以便在ESP32上运行。 在运行这些组件之前,您需要为设备创建一些认证凭据和配置参数,例如设备ID、秘钥,以及所属分组信息等,这些信息可以通过阿里云物联网平台进行设置。一旦您设置好了所有的认证和配置信息,您就可以使用支持库中的命令来连接到MQTT服务,并快速部署和控制自己的物联网设备。 总之,使用arduino支持库,您可以快速连接到阿里云MQTT物联网平台,不需要复杂复制粘贴代码,专注于实现您的物联网设备的逻辑、控制和应用。它不仅方便易用,而且可以大大提高你的开发效率。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值