Arduino MQTT PubSubClient 库 发送长文本

用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);

}

 

 

你可能感兴趣的:(技术文章)