用Arduino开发esp8266,使用mqtt进行通讯,加载了库存pubsubclient,操作很简便,但是发送长文本需要另外处理,百度了一下发现都没有很合适的教程,自己研究了一下例程,做一下简化。直接上代码和注释
#include
#include
// 设置wifi连接用户密码
const char* ssid = "KMWL003";
const char* password = "abcd1234";
//设置mqtt服务器
const char* mqtt_server = "192.168.0.101";
WiFiClient espClient;//创建tcp/ip连接
PubSubClient client(espClient);//mqtt使用的tcp连接
//mqtt连接到服务器
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);//生成随机客户端id
if (client.connect(clientId.c_str())) {
Serial.println("connected");
}
else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds"); //5秒后重试
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
//连接到wifi
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());
//设置mqtt服务器和端口,默认为1883
client.setServer(mqtt_server, 1883);
}
void loop()
{
//如果没有连接到mqtt,自动连接
if (!client.connected()) {
reconnect();
}
Serial.println("begin push");
//把长文本做拆解
String msg1 = "1111111111111111333333333333333333";
String msg2 = "2222222222222333333333333333333333";
String msg3 = "3333333333333333333333333333333333";
//计算文本总长度
int msgLen = msg1.length() + msg2.length() + msg3.length();
//开始发送长文件参数分别为 主题,长度,是否持续
client.beginPublish("homeassitant/config", msgLen, false);
//发送文本
client.print(msg1);
client.print(msg2);
client.print(msg3);
client.endPublish();
//结束发送文本
Serial.println("sub push");
//每隔1秒发一次
delay(1000);
}