小工具知识网

当前位置: 首页 > 行业知识 > 初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

行业知识

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

2026-11-11 18:02:43 来源:互联网转载

介绍

手上有一块立创开发板,本着不吃灰的原则把它用起来,今天就来用它来连接上自己部署的MQTT服务器进行数据通信。

硬件:立创开发板

开发环境:Arduino IDE Win11

MQTT 平台:EMQX Platform

立创开发板介绍:

初出茅庐的小李博客之立创开发板初体验【Arduino IDE开发环境】:

地址:https://blog.csdn.net/weixin_43176183/article/details/139101412?spm=1001.2014.3001.5501

MQTT.fx客户端接入EMQX Platform

初出茅庐的小李博客之MQTT.fx客户端接入EMQX Platform

地址:https://blog.csdn.net/weixin_43176183/article/details/139190727?spm=1001.2014.3001.5501

参考文档:

https://docs.emqx.com/zh/cloud/latest/connect_to_deployments/esp32.html

过程记录:

安装MQTT依赖库

在 Arduino IDE 中完成以下安装。

先安装 ESP32 开发板。

点击工具 -> 开发板 -> 开发板管理。搜索 ESP32,点击安装 我已经安装过。

安装 PubSub client 库。

点击项目 -> 加载库 -> 管理库…。搜索 PubSubClient,安装 PubSubClient by Nick O’Leary。

通过 TCP 端口连接

写代码

  • 引入对应的库
    #include "WiFi.h"#include #include 
    • 定义用户自定义参数
      // WiFi Credentialsconst char *ssid     = "AQST";             // Replace with your WiFi nameconst char *password = "12345678";         // Replace with your WiFi password// MQTT Broker Settingsconst char *mqtt_broker   = "xxxxxx.ala.cn-hangzhou.emqxsl.cn";//这里定义自己的连接地址const char *mqtt_topic    = "emqx/esp32";const char *mqtt_username = "AQ";const char *mqtt_password = "123456";const int   mqtt_port     = 8883;
      • 编写连接代码【准确的来说叫改写】
        /连接Wifi热点函数void ConnectToWiFi(void) {    WiFi.begin(ssid, password);    Serial.print("Connecting to WiFi");    while (WiFi.status() != WL_CONNECTED)    {      delay(500);      Serial.print(".");    }    Serial.println("\nConnected to WiFi");}//连接MQTT代理函数void ConnectToMQTT(void) {  while (!mqtt_client.connected())  {    String client_id = "esp32-client-" + String(WiFi.macAddress());    Serial.printf("Connecting to MQTT Broker as %s...\n", client_id.c_str());    if(mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password))     {      Serial.println("Connected to MQTT broker");      mqtt_client.subscribe(mqtt_topic);      mqtt_client.publish(mqtt_topic, "Hi EMQX I'm ESP32 by Arduino IED ^^");  // Publish message upon connection    }    else     {      Serial.print("Failed to connect to MQTT broker, rc=");      Serial.print(mqtt_client.state());      Serial.println(" Retrying in 5 seconds.");      delay(5000);    }  }}//MQTT 回调函数void MqttCallback(char *topic, byte *payload, unsigned int length){  Serial.print("Message received on topic: ");  Serial.println(topic);  Serial.print("Message: ");  for (unsigned int i = 0; i  
        • 函数调用
          void setup(void){    Serial.begin(115200);                         //设置串口参数    ConnectToWiFi();                              //连接Wifi热点    // Set Root CA certificate    espClient.setCACert(ca_cert);                 //设置CA证书    mqtt_client.setServer(mqtt_broker, mqtt_port);//指定代理 指定端口    mqtt_client.setKeepAlive(60);                 //保活时间    mqtt_client.setCallback(MqttCallback);        //回调函数        ConnectToMQTT();                              //连接MQTT 代理}void loop(void) {  if (!mqtt_client.connected())   {    ConnectToMQTT();  }  mqtt_client.loop();}

          特别提示:这里的地址要写自己的地址 CA证书也要用自己的证书 否则连不上

          官方原话:

          添加服务端证书。如果您在使用公共 MQTT Broker、Serverless 部署或基础版部署的 TLS/SSL 端口连接,在此下载 CA 证书。 如您使用专业版 / BYOC 部署的 TLS/SSL 端口连接,请使用自己的服务端证书。

          • 开启MQTT服务器

          • 编译烧录代码

            用MQTT.fx连接到MQTT服务器跟ESP32开发板进行通信

            发布消息:

            ESP32收到订阅消息

            这里可以看到开发板收到了消息 但是客户端提示收到的消息不是标准json

            改进一下发送的数据格式

            {"mag": "This is Json Data"}

            总结:

            利用Arduino IED 进行MQTT通信 确实很方便,很容易就能实现两个设备的交互、但是使用库的缺点也很明显 有很多api不太懂它的意思,还需要进一步研究。

            完整代码

            #include "WiFi.h"#include #include // WiFi Credentialsconst char *ssid     = "AQST";             // Replace with your WiFi nameconst char *password = "12345678";         // Replace with your WiFi password// MQTT Broker Settingsconst char *mqtt_broker   = "xxxxxxx.ala.cn-hangzhou.emqxsl.cn";//这里要改成自己的地址!!!!const char *mqtt_topic    = "emqx/esp32";const char *mqtt_username = "AQ";const char *mqtt_password = "123456";const int   mqtt_port     = 8883;WiFiClientSecure espClient;PubSubClient mqtt_client(espClient);void ConnectToWiFi(void);//函数声明void ConnectToMQTT(void);//函数声明void MqttCallback(char *mqtt_topic, byte *payload, unsigned int length);//函数声明const char *ca_cert = R"EOF(-----BEGIN CERTIFICATE-----MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQkCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=-----END CERTIFICATE-----)EOF";void setup(void){    Serial.begin(115200);                         //设置串口参数    ConnectToWiFi();                              //连接Wifi热点    // Set Root CA certificate    espClient.setCACert(ca_cert);                 //设置CA证书    mqtt_client.setServer(mqtt_broker, mqtt_port);//指定代理 指定端口    mqtt_client.setKeepAlive(60);                 //保活时间    mqtt_client.setCallback(MqttCallback);        //回调函数        ConnectToMQTT();                              //连接MQTT 代理}//连接Wifi热点函数void ConnectToWiFi(void) {    WiFi.begin(ssid, password);    Serial.print("Connecting to WiFi");    while (WiFi.status() != WL_CONNECTED)    {      delay(500);      Serial.print(".");    }    Serial.println("\nConnected to WiFi");}//连接MQTT代理函数void ConnectToMQTT(void) {  while (!mqtt_client.connected())  {    String client_id = "esp32-client-" + String(WiFi.macAddress());    Serial.printf("Connecting to MQTT Broker as %s...\n", client_id.c_str());    if(mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password))     {      Serial.println("Connected to MQTT broker");      mqtt_client.subscribe(mqtt_topic);      mqtt_client.publish(mqtt_topic, "Hi EMQX I'm ESP32 by Arduino IED ^^");  // Publish message upon connection    }    else     {      Serial.print("Failed to connect to MQTT broker, rc=");      Serial.print(mqtt_client.state());      Serial.println(" Retrying in 5 seconds.");      delay(5000);    }  }}//MQTT 回调函数void MqttCallback(char *topic, byte *payload, unsigned int length){  Serial.print("Message received on topic: ");  Serial.println(topic);  Serial.print("Message: ");  for (unsigned int i = 0; i  

            视频:

            https://www.bilibili.com/video/BV1gJ4m1A7bg/?pop_share=1

上一篇:Chrome浏览器下载指南,快速、安全、便捷的上网体验!,轻松掌握,Chrome浏览器下载及享受快速安全的上网之旅

下一篇:易语言性能深度解析,表现究竟如何?