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);
}
本文来自博客园,作者:登云上人间,转载请注明原文链接:https://www.cnblogs.com/lj15941314/p/17389842.html

浙公网安备 33010602011771号