0
点赞
收藏
分享

微信扫一扫

N58(4G模块)通过AT指令连接标准MQTT调试记录(2)

背景:

今天主要工作就是coding

代码主要是发送AT指令,实现连接MQTT流程。

要做到可复用性强,可读性高,方便后期维护和修改参数。

代码:

//配置连接参数,客户端ID用户名密码,遗嘱主题和信息
int N58_MQTT_CONN_AND_WILLPARAM()
{
int step=0,rechecktcpcount=0;
char temp[100],temp1[100],temp2[10];
TSysPubSettingData *ppubsetting=GetSysPubSetting();
MQTT_RxBuffClear();
mqttData.Midata.istate = 0;
mqttData.Midata.ReSendcount= 0;
mqttData.Midata.ACKtime = 0;
memset(temp,0,100);
memset(temp1,0,100);
memset(temp2,0,10);
sprintf(temp,"\"%s\",\"%s\",\"%s\"\r\n",ppubsetting->MQTTSetting.ClientID,ppubsetting->MQTTSetting.MQTTUserName,ppubsetting->MQTTSetting.MQTTPassword);
sprintf(temp1,"\"%s\",\"%s\"\r\n","willtopic","Client is offline");
sprintf(temp2,"OK");

while(1)
{
	switch(step)
    {
    	case 0:
		{
			do{
				if(rechecktcpcount<3){
					if(GetTickCount()-mqttData.Midata.ACKtime>1000){
						sprintf(pmqttatrest,"%s%s","AT+MQTTCONNPARAM=",temp);  //配置连接参数,客户端ID,用户名,密码
						MQTT_LOG_OUT("AT Send:%s",pmqttatrest);
						MQTT_SendChar(pmqttatrest,strlen(pmqttatrest));
						rechecktcpcount++;
						mqttData.Midata.ACKtime = GetTickCount();
					}
				}else
					return -1;					  
			}while(MQTT_AT_RevDeal("OK",NULL,300));
			
			mqttData.Midata.ReSendcount= 0;
			mqttData.Midata.ACKtime = 0;
			step = 1;
			break;
		}
		case 1:
		{
			do{
				if(rechecktcpcount<3){
					if(GetTickCount()-mqttData.Midata.ACKtime>1000){
						sprintf(pmqttatrest,"%s%s","AT+MQTTWILLPARAM=0,1,",temp1);  //配置遗嘱主题,遗嘱信息
						MQTT_LOG_OUT("AT Send:%s",pmqttatrest);
						MQTT_SendChar(pmqttatrest,strlen(pmqttatrest));
						rechecktcpcount++;
						mqttData.Midata.ACKtime = GetTickCount();
					}
				}else
					return -1;					  
			}while(MQTT_AT_RevDeal("OK",NULL,300));
			return 1;
		} 
	}
}
}

总结:

以上是我其中,配置客户端ID,用户名,密码,遗嘱主题和信息的通用函数,

其他流程大都复用这个基本函数,其中可以做到重连机制,进入下一个阶段的返回值判断,还有参数结构体化,方便管理和维护,参数可视化,可读性高。

这两天为了实现上次分享的流程,疯狂Coding!

继续完善,等项目完成,分享实战代码!有问题可以留言

举报

相关推荐

0 条评论