2015-03-13 4 views
0

Я пытаюсь реализовать протокол MQTT в pic-микроконтроллере с использованием модема sim 900 gprs, уже прочитал версию документации mqtt версии 3.1. Успешно я могу иметь возможность сделать соединение с GPRS модемом MYSERVER ф (117.218.81.15), используя следующие команды ...Реализация MQTT в микроконтроллере PIC

  1. AT
  2. AT + CPIN?
  3. AT + CREG?
  4. AT + CGATT?
  5. AT + CIPSHUT
  6. AT + CIPSTATUS
  7. AT + CIPMUX = 0
  8. AT + CSTT = \ "Интернет \", \ "\", \ "\"
  9. AT + CIICR
  10. AT + CIFSR
  11. AT + CIPSTART = \ "TCP \", \ "117.218.81.15 \", \ "1883 \"

    в соответствии с документацией протокола MQTT я написал функцию на соединение пакета. После установления соединения tcp я попытался отправить функцию connect_packet(), я не получаю никакого подтверждения от брокера .. Пожалуйста, помогите мне в устранении этой проблемы. Я проверил с помощью инструмента анализатора сети wirehark мои данные поступают в порт 1883 tcp, но я не понимаю, почему я не получаю никаких подтверждений? Код connect_packet является unsigned char topiclen = 0,time_out1=0,time_out2=0; unsigned char connectdatalen,packetlen; memset(buffer,0,sizeof(buffer)); time_out1 = (time_out >>8) & 0XFF; time_out2 = (time_out & 0XFF); topiclen = strlen(sacketid); connectdatalen = 2 + 6 + 1 + 1 + 2 + 2 + topiclen;
    packetlen = 2 + connectdatalen;
    buffer[0] = 0X10; buffer[1] = connectdatalen; buffer[2] = 0x00; buffer[3] = 0X06; buffer[4] = 'M'; buffer[5] = 'Q'; buffer[6] = 'I'; buffer[7] = 's'; buffer[8] = 'd'; buffer[9] = 'p'; buffer[10] = 0x03; buffer[11] = 0x02; buffer[12] = time_out1; buffer[13] = time_out2; buffer[14] = (topiclen >> 8); buffer[15] = topiclen & 0XFF; for(i=0;i<packetlen;i++) { buffer[(i+16)] = sacketid[i]; } uart_puts(buffer); uart_puts("\x1A");
    В ничтожной основной функции код uart_init(9600,16); DelayMs(100); gprs_init(); gprs_tcpconnect(); DelayMs(200); connect_packet("MQTT",180); memset(buffer,0,sizeof(buffer));

+0

Какой брокер вы используете? вы пытались включить подробный журнал в брокерах? – hardillb

+0

Mosquito broker .... ya Я включил подробное ведение журнала @ hardillb –

ответ

0

Надеется, что вы уже нашли решение, потому что св старый пост.

Вы должны проверить имя протокола «MQIsdp». Я думаю, что это должно быть «MQTT», если вы следуете спецификации MQTT-3.1.1. Спецификация MQTT говорит

Blockquote Имя протокола - это кодированная строка UTF-8, которая представляет имя протокола «MQTT», заглавное как указано. Строка, ее смещение и длина не будут изменены будущими версиями спецификации MQTT.

Если ваше имя протокола не соответствует спецификации, брокер будет тихо отбрасывать ваш пакет. Также вам придется обновить свой буферный массив, поскольку MQTT занимает 2 + 4 байта в заголовке переменной протокола MQTT.

Смежные вопросы