本地可以用服务端可以用EMQX
连接软件MQTTX
代码示例
#include <WiFi.h> // 引入WiFi库,用于ESP32的Wi-Fi连接 #include <PubSubClient.h> // 引入PubSubClient库,用于MQTT通信 // Wi-Fi连接参数 const char* ssid = "xiaohe"; // Wi-Fi SSID const char* password = "23456789"; // Wi-Fi密码 // MQTT服务器参数 const char* mqtt_server = "172.22.22.225"; // MQTT服务器IP地址 const int mqtt_port = 1883; // MQTT端口 const char* mqtt_topic = "xiaohe4966"; // MQTT主题 // 创建WiFiClient和PubSubClient对象 WiFiClient espClient; PubSubClient client(espClient); // 设置Wi-Fi连接函数 void setup_wifi() { delay(10); // 稍作延时 WiFi.begin(ssid, password); // 开始连接Wi-Fi while (WiFi.status() != WL_CONNECTED) { // 等待Wi-Fi连接成功 delay(500); } Serial.println(WiFi.localIP()); // 打印连接成功的IP地址 } // MQTT消息回调函数 void callback(char* topic, byte* payload, unsigned long length) { // 处理接收到的消息 String message = ""; for (unsigned long i = 0; i < length; i++) { message += (char)payload[i]; } Serial.print("Message: "); Serial.println(message); Serial.print("topic: "); Serial.println(topic); // 打印消息长度和内容,这里省略了 // Serial.println(length); } // MQTT重连函数 void reconnect() { while (!client.connected()) { if (client.connect("ESP32Client")) { // 尝试连接MQTT服务器 client.publish(mqtt_topic, "Hello MQTT QQ496631085"); // 发送消息 client.subscribe(mqtt_topic); // 订阅主题 Serial.printf("ESP32Client Hello MQTT\n"); } else { Serial.print("failed with state "); Serial.println(client.state()); // 打印连接失败的状态 delay(5000); // 等待5秒后重试 } } } // 初始化设置函数 void setup() { Serial.begin(115200); // 初始化串行通信 Serial.print("run...\n"); // 打印启动信息 setup_wifi(); // 调用Wi-Fi设置函数 client.setServer(mqtt_server, mqtt_port); // 设置MQTT服务器地址和端口 client.setCallback(callback); // 设置MQTT消息回调函数 } // 主循环函数 void loop() { if (!client.connected()) { // 如果MQTT客户端未连接,则重连 reconnect(); } client.loop(); // 处理MQTT消息 // 每隔一段时间发送一条消息,这里假设每隔5秒 static unsigned long lastSend = 0; unsigned long now = millis(); if (now - lastSend > 5000) { sendMqttMessage(mqtt_topic, "test小和"); // 发送MQTT消息 lastSend = now; } } // 发送MQTT消息的函数 void sendMqttMessage(const char* topic, const char* message) { if (client.connected()) { // 如果MQTT客户端已连接 client.publish(topic, message); // 发送消息 Serial.print("Message sent to topic: "); Serial.println(topic); Serial.print("Message content: "); Serial.println(message); } else { Serial.println("MQTT client not connected"); // MQTT客户端未连接 } }