2017-07-01 4 views
0

J'utilise RabbitMQ avec Arduino pour la première fois et j'ai besoin de publier des données. J'ai donc utilisé la classe PubSubCLient. Ceci est le code:RabbitMQ avec Arduino Uno

#include <SPI.h> 
#include <PubSubClient.h> 
#include <Dhcp.h> 
#include <Ethernet.h> 
#include <EthernetUdp.h> 
#include <Dns.h> 
#include <EthernetServer.h> 
#include <EthernetClient.h> 

//declare variables 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xDE, 0xDE, 0xDD }; 
byte server[] = { 127, 0, 0, 1 }; 
byte ip[] = { 192, 168, 1, 22 }; 
String stringone = "localhost"; 

void callback(char* topic, byte* payload, unsigned int length) { 
    Serial.println(topic); 
    //convert byte to char 
    payload[length] = '\0'; 
    String strPayload = String((char*)payload); 
    Serial.println(strPayload); 
    int valoc = strPayload.lastIndexOf(','); 
    String val = strPayload.substring(valoc+1); 
    Serial.println(val); 
} 

EthernetClient ethClient; 
PubSubClient client(server, 5672, callback, ethClient); 

void setup() { 
    // client is now configured for use 
    Serial.begin(9600); 
    Serial.println("==STARTING=="); 
    if (Ethernet.begin(mac) == 0) { 
    Serial.println("Failed to configure Ethernet using DHCP"); 
    // no point in carrying on, so do nothing forevermore: 
    // try to congifure using IP address instead of DHCP: 
    Ethernet.begin(mac, ip); 
    } 
    // give the Ethernet shield a second to initialize: 
    delay(1000); 
    Serial.println("connecting..."); 
    for (byte thisByte = 0; thisByte < 4; thisByte++) { 
    // print the value of each byte of the IP address: 
    Serial.print(Ethernet.localIP()[thisByte], DEC); 
    Serial.print("."); 
    } 
    boolean con = client.connect("arduinoMQTT123"); 
    while(con != 1) { 
    Serial.println("no con-while"); 
    con = client.connect("arduinoMQTT123"); 
    } 
    if(con) { 
    Serial.println("got con"); 
    client.subscribe("/v2/feeds/FEED_ID.csv"); 
    } else Serial.println("no con"); 
} 

void loop() { 
    client.loop(); 
} 

Je continue d'obtenir une erreur, pas de connexion. Je pense que c'est parce que je ne sais pas comment utiliser Arduino avec RabbitMQ.

+0

est votre machine/IDE connecté à l'Arduino? – Parker

+0

Oui, je continue d'obtenir l'erreur sans connexion sur l'ide arduino –

Répondre

0

Ces deux lignes sont la source de vos problèmes:

byte server[] = { 127, 0, 0, 1 }; 

    ... 

    PubSubClient client(server, 5672, callback, ethClient); 

serveur [] doit indiquer l'adresse de votre serveur RabbitMQ. 127.0.0.1 est l'adresse de localhost. Ce n'est jamais routable. En outre, PubSubClient est un client MQTT et non un client RabbitMQ (AMQP). Par conséquent, le port AMQP que vous avez spécifié, 5672, ne fonctionnera pas.

Vous devez activer et configurer l'adaptateur MQTT dans RabbitMQ puis utilisez le port MQTT approprié, généralement 1883.

+0

Je suis d'accord avec vous, c'est juste un exemple, j'utilise l'adresse IP réelle du serveur, mais toujours pas de connexion –

+0

Et vous avez installé l'adaptateur MQTT et changé le port? –

+0

je change le serveur, mosquitto et fonctionne très bien –