订阅主题后,如何从另一个msp430串行打印数据?

时间:2019-04-03 17:14:18

标签: mqtt publish-subscribe msp430

我正在使用一个msp430f5229发布数据,并且尝试进行序列化。将从发布msp接收的数据打印到订阅的msp。

我尝试了各种打印方法,但不知道如何在连接到订户后从订户中提取数据。我评论了我认为仅在循环内发布才需要的部分。

PubSubClient client(server, 1883, callback, wclient);

void callback(char* ScannerOut, byte* payload, unsigned int length){
    // Handle callback here
}

void setup()
{
    //Initialize serial and wait for port to open:
    Serial.begin(9600);

    Serial.println("Start WiFi");
    WiFi.begin(WIFI_SSID, WIFI_PWD);
    while(WiFi.localIP() == INADDR_NONE) {
        Serial.print(".");
        delay(300);
    }
    Serial.println("");

    printWifiStatus();

}

void loop()
{
    // read the input on analog pin:
    **//int sensorValue = analogRead(24);
    **//Serial.println(sensorValue);

    // convert into to char array
    **//String str = (String)sensorValue; 
    **//int str_len = str.length() + 1;  // Length (with one extra character 
    **//for the null terminator)
    **//char char_array[str_len];  // Prepare the character array (the buffer) 
    **//str.toCharArray(char_array, str_len);  // Copy it over 

    // publish data to MQTT broker
    if (client.connect("LaunchPadClient")) {
        **//client.publish("ScannerOut", char_array);
        client.subscribe("ScannerOut");
        Serial.println("Subscription successful!");

        client.disconnect();
    }
}

我正在连接和订阅与msp发布相同的主题,但我想进行序列化。将该主题的输出打印到第二个msp中。

1 个答案:

答案 0 :(得分:0)

订户通过void callback()接收其数据,该数据通常在client.read()函数之内被调用。

所以您的callback()可能看起来像

void callback(char* ScannerOut, byte* payload, unsigned int length){
    Serial.print("%s", payload);
}

client.read()在您的循环中丢失。请仔细阅读您的MQTT客户端文档,以了解如何接收来自代理的消息。

另一点,请不要在client.subscribe("ScannerOut");之后立即与代理断开连接。