ESP32通过MQTT连接阿里云平台实现消息发布与订阅
文章目录
前言
一、准备工作
二、阿里云平台配置
三、代码实现
总结
前言
本文将介绍如何使用ESP32开发板通过MQTT协议连接阿里云物联网平台,并实现消息的发布与订阅功能。我们将使用Arduino IDE进行开发,并借助PubSubClient库实现MQTT通信。
一、准备工作
- ESP32开发板
- Arduino IDE
- 阿里云物联网平台账号
- PubSubClient库
二、阿里云平台配置
1. 登录阿里云物联网平台
2. 创建产品与设备,获取设备三元组(ProductKey、DeviceName、DeviceSecret)
3. 配置Topic,例如:
- 发布Topic: /a1xxxxxx/${deviceName}/user/update
- 订阅Topic: /a1xxxxxx/${deviceName}/user/get
三、代码实现
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi配置
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
// 阿里云MQTT配置
const char* mqtt_server = "iot-xxxxxx.mqtt.aliyuncs.com";
const int mqtt_port = 1883;
const char* mqtt_clientId = "your_client_id";
const char* mqtt_username = "your_device_name&your_product_key";
const char* mqtt_password = "your_device_secret";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(mqtt_clientId, mqtt_username, mqtt_password)) {
Serial.println("connected");
client.subscribe("/a1xxxxxx/${deviceName}/user/get");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 发布消息示例
static unsigned long lastMsg = 0;
if (millis() - lastMsg > 5000) {
lastMsg = millis();
String msg = "Hello from ESP32";
client.publish("/a1xxxxxx/${deviceName}/user/update", msg.c_str());
Serial.println("Message published");
}
}
其中,setup_wifi()用于连接WiFi网络,callback()用于处理接收到的MQTT消息,reconnect()用于处理MQTT连接与重连。
总结
通过本文,能够成功实现了ESP32与阿里云物联网平台的MQTT通信。