中移M5310A模块MQTT详解

1.模块介绍

M5310A作为一款NB-IoT模块,价格符合全球NB-IoT价格(3美元)。不仅封装小巧,而且内置AT指令,可快速连接到Onenet平台。

2.模块初始化

1.上电,等待5秒左右,发送AT指令,返回OK
2.AT+CIMI:查询NBcard卡号
3.AT+CSQ:查询信号质量,返回“信号:99”,如 22,99;
4.AT+CEREG?:查询网络是否可用
5.AT+CEREG=1:驻网
6.AT+CEREG? 返回 +CGATT:1
参考初始化代码:

	while(M5310A_SendCmd("AT\r\n", "OK"))
		DelayXms(500);
	
	UsartPrintf(USART1, "2. AT+CIMI\r\n");
	while(M5310A_SendCmd("AT+CIMI\r\n", "460"))		//查询卡号
		DelayXms(500);
	
	UsartPrintf(USART1,"3.AT+CSQ\r\n");
	M5310A_Clear();
	while(M5310A_SendCmd("AT\r\n","OK"))
		DelayXms(500);
	
	UsartPrintf(USART1, "4. AT+CEREG?\r\n");
	while(M5310A_SendCmd("AT+CEREG?\r\n","CEREG:0,1"))
		DelayXms(500);
	
	UsartPrintf(USART1, "5. AT+CGATT=1\r\n");
	while(M5310A_SendCmd("AT+CGATT=1\r\n","OK"))					
		DelayXms(500);
	
	UsartPrintf(USART1, "6. AT+CGATT?\r\n");
	while(M5310A_SendCmd("AT+CGATT?\r\n","CGATT:1"))					//附着GPRS业务
		DelayXms(500);

3.AT+MQTT 以MQTT协议接入Onenet平台


1.创建实体
AT+MQTTCFG=“183.230.40.39”,6002,"%s",20,"%s","%s",1\r\n",DeviceID,ProID,APIKEY
Device为设备ID;ProID为产品ID,APIKey为鉴权信息
返回:OK


2.连接ONENET
AT+MQTTOPEN=1,1,0,0,0,"",""
返回 :+MQTTOPEN:OK
注意:连接时间可能需要等待2-10s,若返回ERROR,则创建实体时,信息错误


3.查询MQTT连接状态
AT+MQTTSTAT?
返回:
+MQTTSTAT:
0 未初始化
1 已初始化
2 已断开
3 正在首次连接服务器
4 正在重连服务器
5 已连接


4.订阅消息
AT+MQTTSUB

AT+MQTTSUB=“test”,2 //topic为test,质量等级为2
OK
+MQTTSUBACK: 5,2
AT+MQTTSUB?
+MQTTSUB:test OK


5.发布消息
AT+MQTTPUB
如:
AT+MQTTPUB=“test”,2,1,0,0,“update message”
+++++++++++++++++++++++++++++++
主题名:test
质量等级2
服务器是储存该消息,并向新订阅者发送最新订阅消 息
无重发标志
输入消息类型,0-字符串输入,1-16 进制串输入
内容:updata message
+++++++++++++++++++++++++++++
返回:
OK
+MQTTPUBREC: 0,10
+MQTTPUBCOMP: 0,10
+MQTTPUBREL: 0,6


6.断开连接以及删除实体
AT+MQTTDISC 断开连接
AT+MQTTDEL 释放资源,之后可以再次使用+MQTTCFG 进行配置
注意
1.需要断开连接才能删除实体
2.实体只能创建一个
3.建议代码为:连接前先进行AT+MQTTDISC,AT+MQTTDEL

接入参考代码:

char buff[128];
	memset(buff, 0, sizeof(buff));
	sprintf(buff,"AT+MQTTCFG=\"183.230.40.39\",6002,\"%s\",20,\"%s\",\"%s\",1\r\n",DeviceID,ProID,APIKEY);
	UsartPrintf(USART1,buff);
	
	UsartPrintf(USART1,"断开连接\r\n");
	M5310A_SendString("AT+MQTTDISC\r\n");
		DelayXms(50);
	
	UsartPrintf(USART1,"删除实体\r\n");
	M5310A_SendString("AT+MQTTDEL\r\n");
		DelayXms(200);

	UsartPrintf(USART1,"建立实体\r\n");
	while(M5310A_SendCmd(buff,"OK"))
		DelayXms(500);
	
	UsartPrintf(USART1,"进入连接\r\n");
	while(M5310A_Time_SendCmd("AT+MQTTOPEN=1,1,0,0,0,\"\",\"\"\r\n","+MQTTOPEN:OK",100))
		DelayXms(500);
	DelayXms(200);
	
	UsartPrintf(USART1,"查询状态\r\n");
	while(M5310A_SendCmd("AT+MQTTSTAT?\r\n","MQTTSTAT:5"))
		DelayXms(500);
	
	
	memset(buff, 0, sizeof(buff));

最后,还有NBIoT连接TCP,再通过MQTT协议连接,这种连接方式,更能体现MQTT报文,同时也能实现功能,时间不早,在下一篇博客中讲解

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值