Arduino MQTT PubSubClient 库 发送长文本

用Arduino开发esp8266,使用mqtt进行通讯,加载了库存pubsubclient,操作很简便,但是发送长文本需要另外处理,百度了一下发现都没有很合适的教程,自己研究了一下例程,做一下简化。直接上代码和注释

 

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

 

// 设置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);

}

 

 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Arduino MQTT是一种在Arduino开发板上使用的通信协议,它允许Arduino与远程服务器或其他设备进行实时通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅协议,它基于发布和订阅模型,支持高效的消息传输和低功耗。 使用Arduino MQTT,您可以将Arduino连接到云平台,例如AWS IoT、Google Cloud IoT或Microsoft Azure IoT,并与它们进行双向通信。您可以通过订阅主题(topics)接收来自云端的数据,也可以通过发布主题发送数据到云端。 要在Arduino上使用MQTT,您需要使用MQTT,例如PubSubClient。您可以使用该建立与MQTT代理服务器的连接,并通过订阅和发布主题与其他设备进行通信。 以下是一个简单的Arduino MQTT示例代码: ```cpp #include <WiFi.h> #include <PubSubClient.h> const char* ssid = "yourWiFiSSID"; const char* password = "yourWiFiPassword"; const char* mqttServer = "yourMqttServer"; const int mqttPort = 1883; const char* mqttUser = "yourMqttUser"; const char* mqttPassword = "yourMqttPassword"; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqttServer, mqttPort); while (!client.connected()) { if (client.connect("arduinoClient", mqttUser, mqttPassword)) { Serial.println("Connected to MQTT broker"); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" Retry in 5 seconds..."); delay(5000); } } client.subscribe("topic1"); } void loop() { client.loop(); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Received message: "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); } ``` 以上示例代码连接到WiFi网络,然后连接到MQTT代理服务器,并订阅名为"topic1"的主题。在回调函数中,它打印接收到的消息。 您可以根据您的需求修改WiFi和MQTT服务器的设置,并根据需要添加其他功能和逻辑。这只是一个简单的示例,您可以根据您的具体应用进行扩展。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值