esp8266要使用MQTT需要烧录AT固件,目前市场上常用的是乐鑫官网及安信可官网或者onenet官网的AT固件,不同的AT固件之间它们的AT指令可能有所差异。就目前我使用的感觉来说,我个人觉得onenet的MQTT固件是使用起来比较舒适的一个AT固件。onenet的固件发布和发送都只需一句简单的AT指令就可以完成,而乐鑫或安信可的固件发送或发布数据都需要有固定的json格式,比较麻烦,相较起来onenet的AT指令是非常简单。
虽然说onenet官网的MQTT固件是专门针对MQTT协议的,不过经过我的测试,其他的HTTP协议或者EDP协议等都可以使用。
你可以按照以下步骤在ESP8266上使用MQTT协议连接OneNet云平台并上传数据:
使用杜邦线将ESP8266与MCU连接。将ESP8266模块的VCC引脚连接到MCU的VCC(3.3V)引脚,将ESP8266模块的TX引脚连接到MCU的RX引脚,将ESP8266模块的RX引脚连接到MCU的TX引脚,将ESP8266模块的GND引脚连接到MCU的GND引脚。
软件准备:
在OneNet平台注册账号,并创建一个产品,记录产品的ID和Master-APIkey。
配置代码:
publish()
方法发送MQTT消息。#include <PubSubClient.h>
#include <ESP8266WiFi.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* mqttServer = "mqtt.heclouds.com";
const int mqttPort = 6002;
const char* clientId = "your_CLIENT_ID";
const char* topic = "your_TOPIC";
const char* payload = "Hello from ESP8266!";
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 received: ");
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(clientId)) {
Serial.println("connected");
client.publish(topic, payload);
client.subscribe(topic);
} 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(mqttServer, mqttPort);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
注意替换代码中的"your_SSID"和"your_PASSWORD"为你的WiFi名称和密码,"your_CLIENT_ID"和"your_TOPIC"为你在OneNet平台上创建的产品的信息。
编译并上传代码到ESP8266。
监控数据上传情况:
这样,你就可以成功地使用MQTT协议连接OneNet云平台并上传数据了。