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