前言
本文将介绍ESP8266连接巴法云订阅主题的操作。
以下是本篇文章正文内容,下面案例可供参考
一、代码示例
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "填写wifi名称";
const char* password = "填写wifi密码";
const char* mqttServer = "bemfa.com";
// 设置连接
const char* clientId = "填写私钥UID";
const char* user = NULL;
const char* pass = NULL;
const char* willTopic = "填写主题";
const uint8_t willQos = 0;
const boolean willRetain = false;
const char* willMessage = "OFFLINE";
const boolean cleanSession = false;
// 建立订阅主题
const char* subTopic = "填写主题";
void setup() {
Serial.begin(9600);
//设置ESP8266工作模式为无线终端模式
WiFi.mode(WIFI_STA);
// 连接WiFi
connectWifi();
// 设置MQTT服务器和端口号
mqttClient.setServer(mqttServer, 9501);
// 设置MQTT订阅回调函数
mqttClient.setCallback(receiveCallback);
// 连接MQTT服务器
connectMQTTServer();
}
void loop() {
if (mqttClient.connected()) { // 如果开发板成功连接服务器
// 保持心跳
mqttClient.loop();
} else { // 如果开发板未能成功连接服务器
connectMQTTServer(); // 则尝试连接服务器
}
}
void connectMQTTServer(){
// 连接MQTT服务器
if (mqttClient.connect(clientId, user, pass, willTopic, willQos, willRetain, willMessage, cleanSession)) {
Serial.println("MQTT Server Connected.");
Serial.println("Server Address: ");
Serial.println(mqttServer);
Serial.println("ClientId:");
Serial.println(clientId);
// 订阅指定主题
subscribeTopic();
} else {
Serial.print("MQTT Server Connect Failed. Client State:");
Serial.println(mqttClient.state());
delay(3000);
}
}
// 收到信息后的回调函数
void receiveCallback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message Received [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println("");
Serial.print("Message Length(Bytes) ");
Serial.println(length);
}
// 订阅指定主题
void subscribeTopic(){
// 通过串口监视器输出是否成功订阅主题以及订阅的主题名称
if(mqttClient.subscribe(subTopic)) {
Serial.println("Subscrib Topic:");
Serial.println(subTopic);
} else {
Serial.print("Subscribe Fail...");
}
}
// ESP8266连接wifi
void connectWifi(){
WiFi.begin(ssid, password);
//等待WiFi连接,成功连接后输出成功信息
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected!");
Serial.println("");
}
二、运行结果