MATLAB Answers

MQTT subscribe gets no data back

17 ビュー (過去 30 日間)
Mar Ron
Mar Ron 2020 年 5 月 2 日
I have a channel that has several feeds with live data. I am trying to use a particle Argon and thingspeak MQTT broker to subscribe to this data. I used the example provided and got nothing back from the subscription. I am pasting my code below. If anyone has a working example, that would be great!
#include "MQTT.h"
const long channelID = 10X4XXX;
String ReadAPIKey = "XXXXXXXXX";
String subscribeTopic = "channels/" + String( channelID ) + "/subscribe/fields/field1/"+String(ReadAPIKey);
String MQTTAPIKey = "XXXXXXXXXX";
void callback( char* topic, byte* payload, unsigned int length );
MQTT client( "mqtt.thingspeak.com" , 1883 , callback );
// This function processes the messages relayed by the MQTT broker.
void callback( char* topic, byte* payload, unsigned int length ) {
Serial.println("in callback");
char p[ length + 1 ]; // Leave an extra space to null terminate the string.
memcpy( p, payload, length );
p[ length ] = NULL; // Terminate the string.
}
void setup() {
Serial.println("in void setup");
// Connect to the server.
subscribeMQTT();
}
void loop() {
Serial.println("in void loop");
int timeHour = Time.hour();
if (client.isConnected()){
client.loop();
}
else{
subscribeMQTT();
}
if ( ( timeHour > 23 ) or ( timeHour < 4 ) ){
Particle.publish( "Sleep" );
System.sleep( SLEEP_MODE_DEEP , 7200 );
}
delay(20000);
}
void subscribeMQTT(){
Serial.println("in subscribe MQTT");
if (!client.isConnected()) {
client.connect( " MGSubscribeArgon" , "MGUsername" , MQTTAPIKey , NULL , MQTT::QOS0 , 0 , NULL , true );
Particle.publish( " Connect " );
Serial.println("Connected to broker");
delay( 1000 );
if ( client.isConnected()) {
Serial.println("MQTT connected");
client.subscribe( subscribeTopic );
Particle.publish( "subs" );
}
}
}

  0 件のコメント

サインインしてコメントする。

回答 (2 件)

Vinod
Vinod 2020 年 5 月 4 日
Have you taken a look at this example? It should be possible to modify it for a Particle Argon quite easily.

  1 件のコメント

Mar Ron
Mar Ron 2020 年 5 月 5 日
That IS the example I am using. In the code I posted above, the only part that I deleted was the "strncmp" portion. I deleted it in the above example by mistake, but I eventually just use serial.println() in the callback function to see what is being received. That callback function that is supposed to be called by the receipt of a packet on MQTT subscribe, is never triggered.

サインインしてコメントする。


Christopher Stapels
Christopher Stapels 2020 年 5 月 6 日
編集済み: Christopher Stapels 2020 年 5 月 6 日
Can you try connecting with another desktop based broker (MATLAB has one) or MQTTFx to make sure you have all the api keys correct? If you verify that, I have an Argon here at home that I can re verify the code with. Its previously been verified with an photon.

  2 件のコメント

Mar Ron
Mar Ron 2020 年 5 月 8 日
Chris,
I have publish working just fine. So I know I have my keys set up correctly.
Christopher Stapels
Christopher Stapels 2020 年 5 月 8 日
Publish and subscribe have slightly different requirements, I have found using a different client can be a really good check to make sure everything is correct. I've failed to match the appropriate channel ID for example and the subscription broker just disconnects me without a messge. Unofrtunately its the nature of the protocol.
Ive done pub and sub MQTT on a photon previously so im pretty confident it will work. Have a look a the serial ourput, especially during the subscription method. Do you see all the test messages?
Ill see If I can get a test going on my argon soon, but my first step will be to check the connection with MQTTfx.

サインインしてコメントする。

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by