mqtt部分:

int strlen(char *str)
{
int len = 0;
while (*str != '\0') {
len++;
str++;
}
return len;
} // **********************************
// * *
// * 根据主机地址和端口号连接服务器 *
// * *
// ********************************** void tcp_connect(char *host,int port)
{
uart_send_str("AT\r\n");
uart_send_str("AT+CPIN? \r\n");
seelp(500);
uart_send_str("AT+CREG? \r\n");
seelp(500);
uart_send_str("AT+CGATT? \r\n");
seelp(500);
uart_send_str("AT+CSTT=\"CMNET\" \r\n");
seelp(500);
uart_send_str("AT+CIICR \r\n");
seelp(1500);
uart_send_str("AT+CIFSR \r\n");
seelp(1000);
uart_send_str("AT+CIPSTART=\"TCP\"\,\"23.106.139.167\"\,\"1883\" \r\n"); //连接TCP Server 8081 1883
} // *************************
// * *
// * 构建MQTT连接包 *
// * *
// ************************* int baseIndex;
int mqtt_connect_message(unsigned char *mqtt_message,char *client_id,char *username,char *password)
{
char i = 0;
char client_id_length = strlen(client_id);
int username_length = strlen(username);
int password_length = strlen(password);
int packetLen = 12 + 2 + client_id_length + 2 + username_length + 2 + password_length; mqtt_message[0] = 16; // MQTT Message Type CONNECT
mqtt_message[1] = packetLen%256;
baseIndex = 2;
if( packetLen >127 ){//
mqtt_message[2] = 1;//packetLen/127;
baseIndex = 3;
} mqtt_message[baseIndex] = 0; // Protocol Name Length MSB
mqtt_message[baseIndex+1] = 6; // Protocol Name Length LSB
mqtt_message[baseIndex+2] = 77; // ASCII Code for M
mqtt_message[baseIndex+3] = 81; // ASCII Code for Q
mqtt_message[baseIndex+4] = 73; // ASCII Code for I
mqtt_message[baseIndex+5] = 115; // ASCII Code for s
mqtt_message[baseIndex+6] = 100; // ASCII Code for d
mqtt_message[baseIndex+7] = 112; // ASCII Code for p
mqtt_message[baseIndex+8] = 3; // MQTT Protocol version = 3
mqtt_message[baseIndex+9] = 194; // conn flags
mqtt_message[baseIndex+10] = 0; // Keep-alive Time Length MSB
mqtt_message[baseIndex+11] = 60; // Keep-alive Time Length LSB mqtt_message[baseIndex+12] = 0; // Client ID length MSB
mqtt_message[baseIndex+13] = client_id_length; // Client ID length LSB baseIndex += 14;
// Client ID
for(i = 0; i < client_id_length; i++){
mqtt_message[baseIndex + i] = client_id[i];
} baseIndex = baseIndex+client_id_length; //username
mqtt_message[baseIndex] = 0; //username length MSB
mqtt_message[baseIndex+1] = username_length; //username length LSB
baseIndex = baseIndex+2;
for(i = 0; i < username_length ; i++){
mqtt_message[baseIndex + i] = username[i];
} baseIndex = baseIndex + username_length; //password
mqtt_message[baseIndex] = 0; //password length MSB
mqtt_message[baseIndex+1] = password_length; //password length LSB
baseIndex = baseIndex + 2;
for(i = 0; i < password_length ; i++){
mqtt_message[baseIndex + i] = password[i];
} baseIndex += password_length; return baseIndex;
} int mqtt_publish_message(unsigned char *mqtt_message, char * topic, char * message) { //mqtt_message = 0; unsigned char i = 0;
unsigned char topic_length = strlen(topic);
unsigned char message_length = strlen(message); mqtt_message[0] = 48; // MQTT Message Type CONNECT
mqtt_message[1] = 2 + topic_length + message_length; // Remaining length
mqtt_message[2] = 0; // MQTT Message Type CONNECT
mqtt_message[3] = topic_length; // MQTT Message Type CONNECT // Topic
for(i = 0; i < topic_length; i++){
mqtt_message[4 + i] = topic[i];
} // Message
for(i = 0; i < message_length; i++){
mqtt_message[4 + topic_length + i] = message[i];
} return 4 + topic_length + message_length;
} int subindex = 0;
int mqtt_subscribe_message(unsigned char *mqtt_message,unsigned char *topic)
{
unsigned char topic_len = strlen(topic);
mqtt_message[0] = 130;
mqtt_message[1] = topic_len+5;
mqtt_message[2] = 0;
mqtt_message[3] = 1;
mqtt_message[4] = 0;
mqtt_message[5] = topic_len; for (subindex=0; subindex<topic_len; subindex++) {
mqtt_message[6+subindex] = topic[subindex];
}
mqtt_message[topic_len+6+1] = 0;
return topic_len+7;
}

  

mqtt部分:

[cpp] view plain copy

 
  1. int strlen(char *str)
  2. {
  3. int len = 0;
  4. while (*str != '\0') {
  5. len++;
  6. str++;
  7. }
  8. return len;
  9. }
  10. // **********************************
  11. // *                                *
  12. // * 根据主机地址和端口号连接服务器 *
  13. // *                                *
  14. // **********************************
  15. void tcp_connect(char *host,int port)
  16. {
  17. uart_send_str("AT\r\n");
  18. uart_send_str("AT+CPIN? \r\n");
  19. seelp(500);
  20. uart_send_str("AT+CREG? \r\n");
  21. seelp(500);
  22. uart_send_str("AT+CGATT? \r\n");
  23. seelp(500);
  24. uart_send_str("AT+CSTT=\"CMNET\" \r\n");
  25. seelp(500);
  26. uart_send_str("AT+CIICR \r\n");
  27. seelp(1500);
  28. uart_send_str("AT+CIFSR \r\n");
  29. seelp(1000);
  30. uart_send_str("AT+CIPSTART=\"TCP\"\,\"23.106.139.167\"\,\"1883\" \r\n"); //连接TCP Server  8081 1883
  31. }
  32. // *************************
  33. // *                       *
  34. // *  构建MQTT连接包       *
  35. // *                       *
  36. // *************************
  37. int baseIndex;
  38. int mqtt_connect_message(unsigned char *mqtt_message,char *client_id,char *username,char *password)
  39. {
  40. char i = 0;
  41. char client_id_length = strlen(client_id);
  42. int username_length = strlen(username);
  43. int password_length = strlen(password);
  44. int packetLen = 12 + 2 + client_id_length + 2 + username_length + 2 + password_length;
  45. mqtt_message[0] = 16;                      // MQTT Message Type CONNECT
  46. mqtt_message[1] = packetLen%256;
  47. baseIndex = 2;
  48. if( packetLen >127 ){//
  49. mqtt_message[2] = 1;//packetLen/127;
  50. baseIndex = 3;
  51. }
  52. mqtt_message[baseIndex] = 0;                       // Protocol Name Length MSB
  53. mqtt_message[baseIndex+1] = 6;                       // Protocol Name Length LSB
  54. mqtt_message[baseIndex+2] = 77;                      // ASCII Code for M
  55. mqtt_message[baseIndex+3] = 81;                      // ASCII Code for Q
  56. mqtt_message[baseIndex+4] = 73;                      // ASCII Code for I
  57. mqtt_message[baseIndex+5] = 115;                     // ASCII Code for s
  58. mqtt_message[baseIndex+6] = 100;                     // ASCII Code for d
  59. mqtt_message[baseIndex+7] = 112;                     // ASCII Code for p
  60. mqtt_message[baseIndex+8] = 3;                      // MQTT Protocol version = 3
  61. mqtt_message[baseIndex+9] = 194;                   // conn flags
  62. mqtt_message[baseIndex+10] = 0;                      // Keep-alive Time Length MSB
  63. mqtt_message[baseIndex+11] = 60;                     // Keep-alive Time Length LSB
  64. mqtt_message[baseIndex+12] = 0;                      // Client ID length MSB
  65. mqtt_message[baseIndex+13] = client_id_length;       // Client ID length LSB
  66. baseIndex += 14;
  67. // Client ID
  68. for(i = 0; i < client_id_length; i++){
  69. mqtt_message[baseIndex + i] = client_id[i];
  70. }
  71. baseIndex = baseIndex+client_id_length;
  72. //username
  73. mqtt_message[baseIndex] = 0;                      //username length MSB
  74. mqtt_message[baseIndex+1] = username_length;       //username length LSB
  75. baseIndex = baseIndex+2;
  76. for(i = 0; i < username_length ; i++){
  77. mqtt_message[baseIndex + i] = username[i];
  78. }
  79. baseIndex = baseIndex + username_length;
  80. //password
  81. mqtt_message[baseIndex] = 0;                      //password length MSB
  82. mqtt_message[baseIndex+1] = password_length;       //password length LSB
  83. baseIndex = baseIndex + 2;
  84. for(i = 0; i < password_length ; i++){
  85. mqtt_message[baseIndex + i] = password[i];
  86. }
  87. baseIndex += password_length;
  88. return baseIndex;
  89. }
  90. int mqtt_publish_message(unsigned char *mqtt_message, char * topic, char * message) {
  91. //mqtt_message = 0;
  92. unsigned char i = 0;
  93. unsigned char topic_length = strlen(topic);
  94. unsigned char message_length = strlen(message);
  95. mqtt_message[0] = 48;                                  // MQTT Message Type CONNECT
  96. mqtt_message[1] = 2 + topic_length + message_length;   // Remaining length
  97. mqtt_message[2] = 0;                                   // MQTT Message Type CONNECT
  98. mqtt_message[3] = topic_length;                        // MQTT Message Type CONNECT
  99. // Topic
  100. for(i = 0; i < topic_length; i++){
  101. mqtt_message[4 + i] = topic[i];
  102. }
  103. // Message
  104. for(i = 0; i < message_length; i++){
  105. mqtt_message[4 + topic_length + i] = message[i];
  106. }
  107. return 4 + topic_length + message_length;
  108. }
  109. int subindex = 0;
  110. int mqtt_subscribe_message(unsigned char *mqtt_message,unsigned char *topic)
  111. {
  112. unsigned char topic_len = strlen(topic);
  113. mqtt_message[0] = 130;
  114. mqtt_message[1] = topic_len+5;
  115. mqtt_message[2] = 0;
  116. mqtt_message[3] = 1;
  117. mqtt_message[4] = 0;
  118. mqtt_message[5] = topic_len;
  119. for (subindex=0; subindex<topic_len; subindex++) {
  120. mqtt_message[6+subindex] = topic[subindex];
  121. }
  122. mqtt_message[topic_len+6+1] = 0;
  123. return topic_len+7;
  124. }

GPRS模块用TCP实现MQTT协议(基于SIM900A)的更多相关文章

  1. GSM/GPRS模块 AT指令集C语言编程——基于有方M660+和MSP430单片机

    GSM/GPRS芯片是手机中负责收发短信.拨打电话以及访问GPRS网络的核心器件.有方M660+为深圳有方公司生产的一款超小封装的GSM/GPRS工业无线模块,可以提供高品质的语音.短信.数据业务等功 ...

  2. 深度剖析MQTT协议的整个通信流程

    http://www.elecfans.com/d/587483.html MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的o ...

  3. 为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  4. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于GPRS模块(Air202,SIM800)AT指令TCP透传方式,MQTT通信控制升级

    实现功能概要 这节和上一节的功能一样(只不过上节是利用Wi-Fi模块,这节是利用GPRS模块) 用户程序里面加入MQTT通信,执行用户程序的时候, 通过接收MQTT的升级命令实现升级. 凡是可以实现M ...

  5. 小程序入门 MQTT物联网协议 publish 和订阅subscribe onenet 阿里云 百度云 基于GPRS模块(SIM800C/SIM900A/SIM868等)和STM32主控芯片

    本文基本公开了如何移植MQTT物联网协议到STM32平台上,并结合GPRS模块(SIM800C/SIM900A/SIM868等)实现publish和订阅topic从onenet,阿里云,百度云等.如果 ...

  6. ESA2GJK1DH1K基础篇: 移植官方MQTT包,让TCP实现MQTT功能(以GPRS模块为例)

    前言 这节代码将在这一节的基础上实现 拷贝第一节测试里面的MQTT文件夹到当前工程 当前工程建个MQTT的文件夹,用于存放那个MQTT文件夹里面的内容 添加文件到里面 注意:::: 实际源码拷贝位置 ...

  7. ESA2GJK1DH1K升级篇: 移植远程更新程序到STM32F103RET6型号的单片机,基于(GPRS模块AT指令TCP透传方式)

    前言 上节实现远程更新是更新的STM32F103C8T6的单片机 GPRS网络(Air202/SIM800)升级STM32: 测试STM32远程乒乓升级,基于(GPRS模块AT指令TCP透传方式),定 ...

  8. 云巴:基于MQTT协议的实时通信编程模型

    概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异, ...

  9. 4G DTU模块带有MQTT协议吗?

    DTU作为一种通讯设备,其应用场合十分广泛.从广义上讲,在进行通信时,传输数据链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息格式转换和数据整理校验.在狭义上的定义,DTU一般 ...

随机推荐

  1. 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题

    在Android项目中创建一个包含main()方法的类,直接右键运行该类时会报如下错误: # # An unexpected error has been detected by Java Runti ...

  2. 北京君正集成电路的Newton平台--穿戴式

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/hellomxj1/article/details/25324125   Newton1开发平台 • 很适合 ...

  3. (转)jquery $.proxy的使用

    在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement').click(function() { ...

  4. IDEA报错: Invalid bound statement (not found): com.test.mapper.UserMapper.selectByPrimaryKey(转发:https://www.cnblogs.com/woshimrf/p/5138726.html)

    学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功.虽然可以继续调试,但心里总是纠结原因.百度了好久,终于找到一个合 ...

  5. python基础10 ---匿名函数和递归

    一.匿名函数 1.lambda表达式就相当于匿名函数,其格式为: lambda 参数列表:参数表达式 2.lambda自带return值,因为匿名函数有个限制,就是只能有一个表达式,不用写return ...

  6. 模块化(CommonJs、AMD、CMD、UMD)发展历史与优缺点

    全文主要整理自摘自<Webpack中文指南>(好文,建议直接去看,以下仅对该系列文章中的<历史发展>篇幅进行备份——也整理了点其他内容) 模块化 模块化是老生常谈了,这里不做阐 ...

  7. MD5文件

    我从某网站下载了一个iso系统镜像,我担心下载下来之后,被我电脑上的病毒感染了.我要确定这个文件还是“原汁原味”,就可以用软件再次生成该文件的md5码,然后和网站上的md5码对比一下就可以了.我用的是 ...

  8. 20145229吴姗珊《java程序设计》第2次实验报告

    20145229吴姗珊<java程序设计>第2次实验报告 实验名称 Java面向程序设计,采用TDD的方式设计有关实现复数类Complex. 理解并掌握面向对象三要素:封装.继承.多态. ...

  9. 20145229吴姗珊 《Java程序设计》第3周学习总结

    20145229吴姗珊 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 4.1类与对象 1.对象(Object):存在的具体实体,具有明确的状态和行为 2.类(Cl ...

  10. Delphi 的类型与指针

    Delphi 的指针分为 "类型指针" 和 "无类型指针" 两类.Delphi 中的类型, 常用的也得有几百个, 我们可以给每种类型定义相应的类型指针.其实 D ...