stm32之MQTT配置

变量

__align(8) u8 PubMsgTopic1[256] = "AT+CLOUDPUB=\"/sys/xxx/xxx/thing/event/property/post\",1,\"{";
__align(8) u8 PubMsgTopic2[256] = ",\\22id\\22:\\22\\22,\\22version\\22:\\221.0.0\\22,\\22method\\22:\\22thing.event.property.post\\22}\"\r\n";
__align(8) u8 param_upload[512] = "\\22params\\22:{\\22device_power\\22:%d,\\22device_signal\\22:%d,\
\\22air_temperature\\22:%.1f,\\22air_humidity\\22:%.1f,\\22rainfall\\22:%.1f,\
\\22soil_temperature\\22:%.1f,\\22soil_humidity\\22:%.1f,\\22soil_PH\\22:%.1f,\\22soil_N\\22:%.1f,\\22soil_P\\22:%.1f,\\22soil_K\\22:%.1f,\\22soil_salt\\22:%.1f,\
\\22soil_Applicator\\22:%d,\\22water_pump\\22:%d}";

__align(8) u8 param_upload_t[512]={""};

mqtt.h文件

#define ProductKey      "xxx"
#define DeviceName      "xxx"
#define DeviceSecret    "xxx"

#define PubTopic         "/sys/xxx/xxx/thing/event/property/post"
#define SubTopic        "/sys/xxx/xxx/thing/service/property/set"


#define MQCIRCURE 4
extern u8 param_upload[];
extern u8 param_upload_t[];

MQTT_init()

void  MQTT_Init(void)
{	

	
	u3_printf("AT+CLOUDAUTH=\"%s\",\"%s\",\"%s\",\"iot-as-mqtt.cn-shanghai.aliyuncs.com\"\r\n",ProductKey,DeviceName,DeviceSecret);//
	HAL_Delay(800);
	strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"+CLOUDAUTH: OK");//看下返回状态
	Clear_Buffer();
	while(strx_mqtt==NULL)
    {
		int i;
		for(i=0;i<MQCIRCURE;i++){
			Clear_Buffer();	
			u3_printf("AT+CLOUDAUTH=\"%s\",\"%s\",\"%s\",\"iot-as-mqtt.cn-shanghai.aliyuncs.com\"\r\n",ProductKey,DeviceName,DeviceSecret);//
			HAL_Delay(800);
			strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"+CLOUDAUTH: OK");//看下返回状态
			if(strx_mqtt!=NULL)
				break;
		}
		break;
    }

	u3_printf("AT+CLOUDCONN=80,0,4\r\n");//
	HAL_Delay(800);
	strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"OK");//看下返回状态
	Clear_Buffer();
	while(strx_mqtt==NULL)
    {
		int i;
		for(i=0;i<MQCIRCURE;i++){
			Clear_Buffer();	
			u3_printf("AT+CLOUDCONN=80,0,4\r\n");//
			HAL_Delay(800);
			strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"OK");//看下返回状态
			if(strx_mqtt!=NULL)
				break;
		}
		break;
    }
	
	
	u3_printf("AT+CLOUDSUB=\"/%s/%s/user/get\",1\r\n",ProductKey,DeviceName);//
	HAL_Delay(800);
	strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"+CLOUDSUB: OK");//看下返回状态
	Clear_Buffer();
	while(strx_mqtt==NULL)
    {
		int i;
		for(i=0;i<MQCIRCURE;i++){
			Clear_Buffer();	
			u3_printf("AT+CLOUDSUB=\"/%s/%s/user/get\",1\r\n",ProductKey,DeviceName);//
			HAL_Delay(800);
			strx_mqtt=strstr((const char*)USART3_RX_BUF,(const char*)"+CLOUDSUB: OK");//看下返回状态
			if(strx_mqtt!=NULL)
				break;
		}
		break;
    }
	
	printf("MQTT初始化已完成,已成功上云!!!");
	
}

Clear_Buffer(void)

void Clear_Buffer(void)//清空缓存
{
   if(USART3_RX_STA&0x8000)
	{	
		printf("\r\n返回值:%s\r\n",USART3_RX_BUF);
		memset(USART3_RX_BUF,0,strlen((const char*)USART3_RX_BUF)); 
		USART3_RX_STA=0;		
	}
	else
	{
		printf("\r\nerror\r\n");
	}
	
}

Pubtopic()

void Pubtopic(u8 *msg)
{
	u16 len;

	len=strlen((const char*)PubMsgTopic1);	
	HAL_UART_Transmit(&huart3,(uint8_t*)PubMsgTopic1,len,1000);	//发送接收到的数据
	
	//插入要发送的信息
	len=strlen((const char*)msg);	
	HAL_UART_Transmit(&huart3,(uint8_t*)msg,len,1000);	//发送接收到的数据
	
	//发送最后一段
	len=strlen((const char*)PubMsgTopic2);	
	HAL_UART_Transmit(&huart3,(uint8_t*)PubMsgTopic2,len,1000);	//发送接收到的数据
	
	HAL_Delay(300);
}

Property_Post(u8 temp,u8 humd)

u8 DeviceProPost[]="AT+MQTTPUB=0,\"物模型上报topic\",\"{\\\"method\\\":\\\"thing.service.property.set\\\"\\,\\\"id\\\":\\\"2012934115\\\"\\,\\\"params\\\":";
//例子:
//我的物模型上报topic:/sys/xxx/${deviceName}/thing/event/property/post
//${deviceName}改成你需要上报的设备 我这里就是XYX-1
//id后面的值可以随便设置
 
u8 DeviceProPost2[]="{\\\"CurrentHumidity\\\":";
//CurrentHumidity 是我设备物模型中当前温度的标识符
 
u8 DeviceProPost3[]="\\,\\\"CurrentTemperature\\\":";
//CurrentTemperature 是我设备物模型中当前湿度的标识符
 
//结束段
u8 DeviceProPost4[]="}\\,\\\"version\\\":\\\"1.0.0\\\"}\",1,0\r\n";


void Property_Post(u8 temp,u8 humd)
{
	int j=0;
	for(j=0;DeviceProPost[j]!='\0';j++)	
	{
		USART_SendData(USART2,DeviceProPost[j]);
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	}
	for(j=0;DeviceProPost2[j]!='\0';j++)	
	{
		USART_SendData(USART2,DeviceProPost2[j]);
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	}
	
    //发送十位
	USART_SendData(USART2,humd/10+48);
	while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
    //发送个位
	USART_SendData(USART2,humd%10+48);
	while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	
	for(j=0;DeviceProPost3[j]!='\0';j++)	
	{
		USART_SendData(USART2,DeviceProPost3[j]);
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	}
	
    //发送十位
	USART_SendData(USART2,temp/10+48);
	while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
    //发送个位
	USART_SendData(USART2,temp%10+48);
	while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	
	for(j=0;DeviceProPost4[j]!='\0';j++)	
	{
		USART_SendData(USART2,DeviceProPost4[j]);
		while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
	}
	delay_ms(1000);
}
posted @ 2023-05-11 01:12  登云上人间  阅读(71)  评论(0)    收藏  举报