MQTT subscribe gets no data back
조회 수: 12 (최근 30일)
이전 댓글 표시
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
2020년 5월 4일
Have you taken a look at this example? It should be possible to modify it for a Particle Argon quite easily.
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
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.
커뮤니티
더 많은 답변 보기: ThingSpeak 커뮤니티
참고 항목
카테고리
Help Center 및 File Exchange에서 MQTT API에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!