gprs模块http mqtt_GPRS模块用TCP实现MQTT协议(基于SIM900A)
mqtt部分:
int strlen(char *str)
{
int len = 0;
while (*str != ' ') {
len++;
str++;
}
return len;
}
// **********************************
// * *
// * 根据主机地址和端口号连接服务器 *
// * *
// **********************************
void tcp_connect(char *host,int port)
{
uart_send_str("AT
");
uart_send_str("AT+CPIN?
");
seelp(500);
uart_send_str("AT+CREG?
");
seelp(500);
uart_send_str("AT+CGATT?
");
seelp(500);
uart_send_str("AT+CSTT="CMNET"
");
seelp(500);
uart_send_str("AT+CIICR
");
seelp(1500);
uart_send_str("AT+CIFSR
");
seelp(1000);
uart_send_str("AT+CIPSTART="TCP","23.106.139.167","1883"
"); //连接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
mqtt_message[6+subindex] = topic[subindex];
}
mqtt_message[topic_len+6+1] = 0;
return topic_len+7;
}
mqtt部分:
intstrlen(char*str)
{
intlen = 0;
while(*str !=' ') {
len++;
str++;
}
returnlen;
}
// **********************************
// * *
// * 根据主机地址和端口号连接服务器 *
// * *
// **********************************
voidtcp_connect(char*host,intport)
{
uart_send_str("AT
");
uart_send_str("AT+CPIN?
");
seelp(500);
uart_send_str("AT+CREG?
");
seelp(500);
uart_send_str("AT+CGATT?
");
seelp(500);
uart_send_str("AT+CSTT="CMNET"
");
seelp(500);
uart_send_str("AT+CIICR
");
seelp(1500);
uart_send_str("AT+CIFSR
");
seelp(1000);
uart_send_str("AT+CIPSTART="TCP","23.106.139.167","1883"
");//连接TCP Server 8081 1883
}
// *************************
// * *
// * 构建MQTT连接包 *
// * *
// *************************
intbaseIndex;
intmqtt_connect_message(unsignedchar*mqtt_message,char*client_id,char*username,char*password)
{
chari = 0;
charclient_id_length = strlen(client_id);
intusername_length = strlen(username);
intpassword_length = strlen(password);
intpacketLen = 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
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
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
mqtt_message[baseIndex + i] = password[i];
}
baseIndex += password_length;
returnbaseIndex;
}
intmqtt_publish_message(unsignedchar*mqtt_message,char* topic,char* message) {
//mqtt_message = 0;
unsigned chari = 0;
unsigned chartopic_length = strlen(topic);
unsigned charmessage_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
mqtt_message[4 + i] = topic[i];
}
// Message
for(i = 0; i
mqtt_message[4 + topic_length + i] = message[i];
}
return4 + topic_length + message_length;
}
intsubindex = 0;
intmqtt_subscribe_message(unsignedchar*mqtt_message,unsignedchar*topic)
{
unsigned chartopic_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
mqtt_message[6+subindex] = topic[subindex];
}
mqtt_message[topic_len+6+1] = 0;
returntopic_len+7;
}
gprs模块http mqtt_GPRS模块用TCP实现MQTT协议(基于SIM900A)相关推荐
- 模块学习4:(2)MQTT协议连接、发布、订阅、心跳、断链等分析和代码实现,并且通过mqtt.fx连接服务器,使用wireshark抓包分析mqtt实现过程
文章目录 一.MQTT控制报文的结构 (1)固定报头(类型/标志 + 剩余长度) 剩余长度(这个要注意下,要注意它的计算方法,有一点特殊) 可变报头 有效载荷 二.下面直接开整各个具体的报文(MQTT ...
- m5310模组数据上传至onenet_NB-IoT模块 YNH-M5310A全网通接入OneNET平台MQTT协议实现数据传输...
void ClearRAM(u8* ram,u32 n) { u32 i; for (i = 0;i < n;i++) { ram[i] = 0x00; } } //构建MQTT连接包 u16 ...
- gprs模块http mqtt_在GPRS模块(SIM800C)和STM32芯片上实现MQTT协议 | TsonTec:测量解决方案提供者...
最近真是的好一个劲的折腾,算是完全搞明白了如何在STM32上实现MQTT协议了. 目录 [显示] 一.本教程中说明的内容 先说说本文化的适用范围吧: 一.使用的芯片是STM32F103C8T6,但是并 ...
- 以太网io模块4-20mA转网口转TCP/IP西门子PLC扩展modbus模块
本文基于金鸽以太网io模块如何通过tcp/ip以及modbus-tcp协议读取io开关量信号以及输出io开关量信号,模块支持输入信号触发主动上报,支持io输出延时自动关断,功能比较强大,性能也比较稳定 ...
- gsm模块网站服务器,GPRS模块与GSM模块的七大区别
众所周知,GPRS模块和GSM模块都是数据无线透明传输模块,经常有人将两者混为一谈.但这两者不是一回事.GPRS是通用分组无线业务,GSM是全球移动通信系统.可以说,GPRS是在GSM系统基础上的延续 ...
- 简述GPRS模块和GSM模块之间的区别
GSM模块是将GSM射频芯片,基带处理芯片,存储器,放大器设备等集成在基板上的功能模块,以提供独立的OS,GSM射频处理,基带处理和标准接口. 简单来讲,GPRS无线模块就是将串口通讯转为GPRS无线 ...
- DIY TCP/IP IP模块和ICMP模块的实现2
上一篇:DIY TCP/IP IP模块和ICMP模块的实现1 本节在8.2节的基础上扩展icmp_recv函数,检验接收到的ICMP数据帧的校验和,解析ICMP数据帧头部的type字段,根据ICMP数 ...
- DIY TCP/IP IP模块和ICMP模块的实现1
上一篇:DIY TCP/IP IP模块和ICMP模块的实现0 8.2 IP数据帧的接收 本节实现DIY TCP/IP的IP数据帧的接收,6.1节介绍pdbuf模块时已经引入了IP头部结构体的定义,ip ...
- ESP-01S模块通过串口助手进行TCP透传
ESP-01S模块通过串口助手进行TCP透传 使用工具 3.3V电源:ESP-01S模块:USB转TTL接口:串口工具SSCOM V5.13.1 ESP模块设置 1.将ESP模块通过串口与PC进行连接 ...
最新文章
- 10个非常有趣的Linux命令
- Vim 80列布局问题
- osgViewer::Viewer缩放、平移对单个模型不起作用
- 使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
- crontab mysql 不执行_crontab定时任务不执行
- Java实验4 面向对象基础
- matlab函数句柄介绍
- IDEA+Java+Servlet+JSP+Mysql实现新闻发布系统
- 输入一个字符,判断该字符是大写英文字符,小写英文字符,空格,还是其他字符
- 基于SSM+VUE的交通事故案例库系统(前后端分离)
- window.open无法打开新窗口
- 系统架构设计师考点全纪要(自己整理,本人一次稳过)
- python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....
- [Filecoin]协议实验室关于SNARK竞赛的公告
- 【微信红包】恭喜发财,大吉大利
- php 重命名中有斜杠,php如何去除转义字符中的反斜杠
- 西门子博图指令——Array数据中元素的写入
- 如何保证电脑硬盘格式化后数据不能被恢复?
- 常微分方程的解法 (四): Matlab 解法
- ES6新增关键字:let和const及let的常用场景