2017-01-13 69 views
0

嗨,我嘗試將我的cooq simulator中的mqtt mote連接到我桌面上的mosquitto服務器上。但它一直無法連接,我能ping通rpl路由器,但不能ping通mqtt客戶端。我正在使用https://github.com/esar/contiki-mqtt的示例。Contiki os MQTT

任何人都可以請我告訴我我犯的錯誤嗎?謝謝

這是我用

#include "stdio.h" 
#include "contiki.h" 
#include "contiki-net.h" 
#include "mqtt-service.h" 
PROCESS(mqtt_publisher_process, "MQTT Publisher"); 
PROCESS_NAME(mqtt_process); 
AUTOSTART_PROCESSES(&mqtt_process, &mqtt_publisher_process); 

PROCESS_THREAD(mqtt_publisher_process, ev, data) 
{ 

    static uip_ip6addr_t server_address; 

    // printf("address %d\n",server_address); 
    // Allocate buffer space for the MQTT client 
    static uint8_t in_buffer[64]; 
    static uint8_t out_buffer[64]; 

    // Setup an mqtt_connect_info_t structure to describe 
    // how the connection should behave 
    static mqtt_connect_info_t connect_info = 
    { 
     .client_id = "contiki", 
     .username = "user", 
     .password = "user", 
     .will_topic = "dev/text", 
     .will_message = NULL, 
     .keepalive = 60, 
     .will_qos = 0, 
     .will_retain = 0, 
     .clean_session = 1 
    }; 

    // The list of topics that we want to subscribe to 
    static const char* topics[] = 
    { 
     "0", "1", "2", "3", "4", "5", NULL 
    }; 
    PROCESS_BEGIN(); 
     // Set the server address 
    uip_ip6addr(&server_address,0,0,0,0,0,0,0,1); 

    // Initialise the MQTT client 
    mqtt_init(in_buffer, sizeof(in_buffer), 
       out_buffer, sizeof(out_buffer)); 

    // Ask the client to connect to the server 
    // and wait for it to complete. 
    mqtt_connect(&server_address, UIP_HTONS(33065),1, &connect_info); 
    // mqtt_connect(&server_address, 1883,1, &connect_info); 
    PROCESS_WAIT_EVENT_UNTIL(ev == mqtt_event); 
    if(mqtt_connected()) 
    { 
     static int i; 

     for(i = 0; topics[i] != NULL; ++i) 
     { 
      // Ask the client to subscribe to the topic 
      // and wait for it to complete 
      mqtt_subscribe(topics[i]); 
      PROCESS_WAIT_EVENT_UNTIL(ev == mqtt_event); 
     } 

     // Loop waiting for events from the MQTT client 
     while(1) 
     { 
      PROCESS_WAIT_EVENT_UNTIL(ev == mqtt_event); 

      // If we've received a publish event then print 
      // out the topic and message 
      if(mqtt_event_is_publish(data)) 
      { 
       const char* topic = mqtt_event_get_topic(data); 
       const char* message = mqtt_event_get_data(data); 
       int level = 0; 

       printf("%s = %s\n", topic, message); 

       // Relay the received message to a new topic 
       mqtt_publish("new_topic", message, 0, 1); 
      }else{ 

      } 
     } 
    } else 
     printf("mqtt service connect failed\n"); 
    PROCESS_END(); 
} 

回答

0

我懷疑MQTT服務器,你說你的桌面上運行,擁有IPv6地址:: 1,右邊的代碼?

不是:

uip_ip6addr(&server_address,0,0,0,0,0,0,0,1); 
你可能想要把你的桌面計算機的運行Mosquitto地址