使用ArduinoMqttClient库连接阿里云,并实现发送接收数据(ESP8266)_arduino连接阿里云mqtt(1)

订阅(subscribe)与发布(publish)简称(sub/pub),是MQTT的一种消息范式。
可以把消息的发布者理解为向云端发送数据,在物联网开发中,我们可以将采集到的数据发送(发布)到阿里云服务器,这样后台管理人员就可以通过阿里云服务器查看到实时采集的数据了;
而消息的订阅者,提前对云端数据进行订阅,从而能接收云端发送过来的数据。我举一个订阅的栗子:订阅消息就像是订阅一个微信公众号,我们订阅了一个微信公众后,我们就能持续不断的收到微信公众号的推文。同理,当我们没有订阅微信公众号的时候,我们就不能收到微信公众号的推文。在物联网开发中,一个简单的使用阿里云物联网平台控制led灯的亮灭就是设备提前订阅了数据,然后阿里云下发指令后,设备收到指令进行数据的处理。我们明白了原理,明天我们就能通过阿里云平台来操作工业的设备,比如水闸开闸、设备开机等等。

二、使用MQTT.fx接入物联网设备

MQTT.fx是一个多平台的MQTT协议客户端,可以把它想象成一个虚拟的设备,在进行设备连接之前,可以使用MQTT.fx来测试连接是否正常。阿里云文档有相关的教程说明:阿里云物联网平台文档-使用MQTT.fx接入物联网平台

MQTT.fx会不定期更新,我最近使用最新版本的需要License,可以申请免费使用三个月,我目前使用的是1.7.1版本的做测试,总的来说,照着阿里云的教程一步步做都能完成连接。

三、使用ESP8266连接阿里云

编写代码之前需要安装3个库:<ArduinoMqttClient.h>、<ESP8266WiFi.h>、<ArduinoJson.h>
我这里编写了一个发送数据和通过阿里云平台控制LED灯的例程供大家参考,大家注意一下WiFi账号密码、发布和订阅的topoic、接入域名、客户端id、连接用户名密码的设置。

接入域名设置:

//MQTT接入域名
//以阿里云为例:a1\*\*\*.iot-as-mqtt.cn-shanghai.aliyuncs.com
//a1\*\*\* 为产品的ProductKey
//cn-shanghai 为所在地域
const char broker[] = "xxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com";

在这里插入图片描述

在这里插入图片描述

发布和订阅消息设置:

//订阅topoic
const char inTopic[]   = "/sys/k0efkfcSwlt/xxxxx/thing/service/property/set";

//发布topic
const char outTopic[]  = "/sys/k0efkfcSwlt/xxxxx/thing/event/property/post";

在这里插入图片描述
在这里插入图片描述
发送数据内容如下:

//向主题发送的消息
String payload = "{\"params\": {\"temperature\": 30.5},\"version\": \"1.0\"}";

参考官方数据格式如下,在发送数据时id和version可以省略:

{
    "id": "123",
    "version": "1.0",
    "params": {
        "temperature": "30.5"
    },
    "method": "thing.service.property.set"
}

在这里插入图片描述
clientId 、username 、passwd 设置如下:

String clientId = "k0efkfcSwlt.xxxx|securemode=2,signmethod=hmacsha256,timestamp=1704798527190|";
String username = "xxxxx";
String passwd = "xxxxxx";

在这里插入图片描述

在这里插入图片描述

四、参考例程

#include <ArduinoMqttClient.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>

//WIFI设置信息------------------------------------------------------------------------
// WIFI名称
char ssid[] = "CMCC-H3qz";

// WIFI密码
char pass[] = "7xf47uxf";
//-----------------------------------------------------------------------------------

//mqtt设置信息-------------------------------------------------------------------------
//定义mqtt客户端对象
WiFiClient wifiClient;            //创建网络连接客户端
MqttClient mqttClient(wifiClient);//通过网络客户端连接创建mqtt连接客户端

//MQTT接入域名
//以阿里云为例:a1\*\*\*.iot-as-mqtt.cn-shanghai.aliyuncs.com
//a1\*\*\* 为产品的ProductKey
//cn-shanghai 为所在地域
const char broker[] = "xxxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com";

//端口号
int        port        = 1883;

//订阅topoic
const char inTopic[]   = "/sys/xxxxxx/xxxxxx/thing/service/property/set";

//发布topic
const char outTopic[]  = "/sys/xxxxx/xxxxx/thing/event/property/post";

//向主题发送的消息
String payload = "{\"params\": {\"temperature\": 30.5},\"version\": \"1.0\"}";

String clientId = "xxxxxxx.xxxxxx|securemode=2,signmethod=hmacsha256,timestamp=1704798527190|";

String username = "xxxxxxx";
String passwd = "xxxxxxxx";
//----------------------------------------------------------------------------------------------
//创建一个json文档对象
StaticJsonDocument<1024> doc;
//----------------------------------------------------------------------------------------------

void setup() {
  //串口初始化
  Serial.begin(9600);

  // initialize digital pin LED\_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);

  //连接WiFi
  Serial.print("试图连接WiFi: ");
  Serial.println(ssid);
  while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
    // failed, retry
    Serial.print(".");
    delay(5000);
  }

  //WiFi连接成功提示
  Serial.println("WiFi连接成功");
  Serial.println();

  //mqtt连接客户端id
  mqttClient.setId(clientId);
  
  //mqtt 连接用户名、密码
  mqttClient.setUsernamePassword(username, passwd);

  //mqtt连接提示,打印连接地址
  Serial.print("试图连接mqtt服务器: ");
  Serial.println(broker);

  //连接mqtt服务器
  if (!mqttClient.connect(broker, port)) {
    Serial.print("MQTT 服务器连接失败,错误代码 = ");
    Serial.println(mqttClient.connectError());

    while (1);
  }

  //连接mqtt服务器成功提示
  Serial.println("成功连接mqtt服务器!");
  Serial.println();

  // 设置消息接收回调
  mqttClient.onMessage(onMqttMessage);

  //打印订阅主题信息
  Serial.print("订阅主题为:: ");
  Serial.println(inTopic);
  Serial.println();

  //mqtt订阅主题
  mqttClient.subscribe(inTopic);
}

void loop() {
  //轮询操作,mqtt客户端监听
  //定期调用poll()确保MQTT信息接收正常
  mqttClient.poll();

  Serial.print("向主题发送消息: ");
  Serial.println(outTopic);
  Serial.println(payload);
  Serial.println();

  
  mqttClient.beginMessage(outTopic, payload.length(), false, 1, false);//构建消息端口
  mqttClient.print(payload);  //发送消息
  mqttClient.endMessage();    //关闭端口
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/9ee7cdf555b2a5270d7558d224f0c1e1.png)

![img](https://img-blog.csdnimg.cn/img_convert/ad75bf798b82a46cdce2dd3b60ad843d.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/639c878562f0631c899a71388ec937e4.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/3d27b25dec3f85cc94d14a19c52ed08b.png)

![img](https://img-blog.csdnimg.cn/img_convert/2a9d4b7594e5acfb7f9e63f3c7df7ce8.png)

![img](https://img-blog.csdnimg.cn/img_convert/b67707e02ef13d96034baf430778b0eb.png)

![](https://img-blog.csdnimg.cn/img_convert/4ccf29478854b868f69a70f606e15d47.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!




 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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物联网平台,不需要复杂复制粘贴代码,专注于实现您的物联网设备的逻辑、控制和应用。它不仅方便易用,而且可以大大提高你的开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值