2017-01-13 6 views
0

안녕하세요 제 cooja simluator에서 내 mqtt mote를 내 바탕 화면의 모기 서버에 연결하려고합니다. 하지만 계속 연결에 실패하고 나는 rpl 라우터를 ping 할 수 있지만 내 mqtt 클라이언트 mote하지 못했습니다. 나는 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를 실행하는 데스크톱 컴퓨터의 주소를 넣어 원하는

?