ESP32连接MQTT(含Arduino源码)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的教程,写的比较草率,有共同研究过的小伙伴可以一起讨论讨论

ESP32是一种集成了Wi-Fi和蓝牙功能的微控制器,可以用于连接MQTT服务器。MQTT是一种轻量级的通信协议,常用于物联网设备之间的通信。引用中提到了将ESP32连接MQTT服务器,并将温湿度数据通过MQTT协议发送到云平台的MySQL数据库中。这样可以实现将传感器数据存储在数据库中的功能。 在ESP32MQTT连接方面,可以使用ESP-IDF提供的MQTT客户端库进行开发。该库提供了一系列API函数,例如`esp_mqtt_client_stop`函数用于停止MQTT客户端。 另外,引用提到了ESP32接收到Wi-Fi配置后,可以使用`esp_wifi_set_config`函数进行Wi-Fi连接的配置。这个函数可以用于配置接入点(Access Point)的参数信息,并将配置保存到设备的非易失性存储(NVS)中。 综上所述,ESP32可以通过连接MQTT服务器,使用MQTT协议将温湿度数据发送到MySQL数据库,并通过Wi-Fi连接来实现与服务器的通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [esp32将温湿度(dht)连接mqttx+emq x cloud到MySQL](https://blog.csdn.net/weixin_43916552/article/details/115919494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ESP32MQTT通讯](https://blog.csdn.net/qq_45689245/article/details/129127871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值