ESP32连接MQTT(含Arduino源码)

本文详细介绍了如何使用ESP32通过MQTT协议与物联网平台通信,包括所需的硬件(如Arduino和MQTTX),代码编写过程以及如何在MQTTX中查看ESP32发送的数据。
摘要由CSDN通过智能技术生成

1.实验目的

ESP32连接物联网平台,通过MQTT协议实现数据互传,在MQTTX软件能看到传输的数据

2.准备

Arduino 、 MQTTX、ESP32开发板

Arduino编译软件

MQTTX:能通过订阅看到ESP32发过来JSON数据格式的数据

ESP32开发板

3.代码编写

直接复制到Arduino上即可,wifi名称和密码要修改为自己的,如果使用公网(The Free Global Public MQTT Broker | Try Now | EMQ)其他可不做修改,

#include <WiFi.h>
#include "WiFiClient.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define WLAN_SSID "XiaoMi"  //wifi名称
#define WLAN_PASS "88888888"  //wifi密码


#define MQTT_SERVER     "broker.emqx.io" //服务器地址,这里使用的是公网所以下面的用户和密码可以随便

#define MQTT_SERVERPORT 1883
#define MQTT_USERNAME    "d1"//用户名称和密码,用的公网可以不填可随机
#define MQTT_KEY         "d1"

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, MQTT_SERVERPORT, MQTT_USERNAME, MQTT_KEY);
Adafruit_MQTT_Publish pub = Adafruit_MQTT_Publish(&mqtt,"my/mqtt/topic"); // 发布主题


void setup() {
  Serial.begin(115200);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  delay(2000);
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void MQTT_connect()//连接mqtt服务器,5s连接一次
{
  int8_t ret;
  if(mqtt.connected())
  {
    return;
  }
  Serial.print("Connecting to MQTT... ");
  uint8_t retries = 5;//尝试5次
  while((ret = mqtt.connect()) != 0)
  {
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);
    retries--;
    if(retries == 0)//如果五次都没连接上进入死循环
    {
      while(1);
    }
    Serial.println("MQTT Connected!");
  }
}

void loop() {
  MQTT_connect();
  Serial.print(F("\nSending val "));
  if(!pub.publish("{\"msg\":\"Hello\",\"LED\":01}"))//发布消息
  {
    Serial.println(F("Failed"));
  }else
  {
    Serial.println(F("OK"));
  }
  delay(2000);
}

创建好工程后直接上传编译,如果编译失败可能是没有包含相关的库或者板子型号不对,在工具-开发板选择中可以选对应的开发板,没有的话在开发板管理器中进行下载

4.MQTTX配置

可参考上一篇博客STM32F103C8T6连接ESP-12F模块上位机MQTTX的使用(含源码)_mqtt 上位机-CSDN博客

配置好即可看到ESP32发送过来的消息

以上就是ESP32连接mqtt的教程,写的比较草率,有共同研究过的小伙伴可以一起讨论讨论

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MQTT 是一种轻量级的消息传输协议,通常用于连接物联网设备与服务器之间的通信。在 ESP32 开发板上快速连接 MQTT,可以采用 ESP32 官方提供的 Arduino core,然后通过 PubSubClient 库来实现 MQTT连接。 以下是 ESP32 连接 MQTT 的步骤: 1. 安装 ESP32Arduino core,安装方式可以参考官方文档。 2. 下载 PubSubClient 库,将其解压缩到 Arduino 开发环境的 libraries 目录下。 3. 在 Arduino IDE 中新建一个项目,然后打开 Sketch -> Include Library -> PubSubClient 来导入 PubSubClient 库。 4. 在代码中引入所需要的头文件: ``` #include <WiFi.h> #include <PubSubClient.h> ``` 5. 定义 Wi-Fi 和 MQTT 相关的配置参数: ``` const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "your_MQTT_broker_IP"; const int mqtt_port = 1883; const char* mqtt_user = "your_MQTT_user"; const char* mqtt_password = "your_MQTT_password"; ``` 6. 创建实例化 Wi-Fi 和 MQTT 客户端: ``` WiFiClient espClient; PubSubClient client(espClient); ``` 7. 在 `setup()` 函数中进行 Wi-Fi 和 MQTT连接: ``` void setup() { Serial.begin(9600); WiFi.begin(ssid, password); // 连接 Wi-Fi while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // 连接 MQTT client.setServer(mqtt_server, mqtt_port); while (!client.connected()) { Serial.println("Connecting to MQTT..."); if (client.connect("ESP32Client", mqtt_user, mqtt_password)) { Serial.println("Connected to MQTT"); } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); delay(2000); } } } ``` 8. 在 `loop()` 函数中进行 MQTT 订阅、发布等操作: ``` void loop() { if (!client.connected()) { Serial.println("Reconnecting to MQTT..."); if (client.connect("ESP32Client", mqtt_user, mqtt_password)) { Serial.println("Connected to MQTT"); // 进行订阅或发布等操作 } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); } } client.loop(); } ``` 以上是基本的 ESP32 连接 MQTT 的代码实现,可以根据实际需要进行订阅、发布等操作。同时,需要配置 MQTT 服务器的地址和认证信息,以确保连接的安全性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值