STM32和广和通L610连接腾讯云(二)

STM32和广和通L610连接腾讯云(一)

1.STM32CUBEMX配置

打开串口一

串口中断一定要打开

点击生成工程

2.keil代码编写

(1).char *strstr(const char *,const char *);

strstr 是 C 和 C++ 标准库中用于字符串处理的函数之一。它的作用是在一个字符串(称为 haystack)中查找另一个字符串(称为 needle)的第一个出现位置。

(2).keil勾选,并重定向printf

int fputc(int ch,FILE *f)
{
 uint8_t temp=ch;
 HAL_UART_Transmit(&huart1,&temp,1,2);
return temp;
}

(3).代码编写 

新建一个bsp.c和bsp.h

bsp.h

#include "bsp.h"

char *strx,*extstrx,*Readystrx;
char RxBuffer[200],Rxcouter;
uint8_t Res;
int len;
int number;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
{ 
 UNUSED(huart); 
 
 if(huart->Instance ==USART1){ 
 RxBuffer[Rxcouter++] = Res; 
 HAL_UART_Receive_IT(&huart1, (uint8_t *)&Res, 1); 
 } 
}
void Clear_Buffer(void)
{
 uint8_t i;
 
for(i=0;i<200;i++)
 RxBuffer[i]=0;
 Rxcouter=0;
}

 bsp.h

#ifndef __BSP_H
#define __BSP_H
#include "main.h"
#include "stdio.h"
#include "usart.h"
#include "string.h"
char *strstr(const char *,const char *);
void Clear_Buffer(void);
#endif

main.c添加

extern uint8_t Res;
extern int len;
extern int number;
extern char *strx;
extern char RxBuffer[200];

在while(1)前添加

HAL_UART_Receive_IT(&huart1,&Res,1);
//模块初始化,等待1秒
		printf("模块初始化");
		HAL_Delay(1000);
	//查询版本信息
		printf("ATI\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"Fibocom");
		if(strx==NULL)
		{
			Clear_Buffer();
			printf("查询信息失败\r\n");
			HAL_Delay(1000);
			printf("ATI\r\n");
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"Fibocom");
		}
			Clear_Buffer();
			printf("版本信息正确\r\n");
			HAL_Delay(1000);
		
			//请求IP
			printf("AT+MIPCALL?\r\n");
			HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+MIPCALL: 1");
		Clear_Buffer();
		printf("AT+MIPCALL?\r\n");
			HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+MIPCALL: 1");
		Clear_Buffer();
		printf("AT+MIPCALL?\r\n");
			HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+MIPCALL: 1");
		Clear_Buffer();
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("还未获取到IP\r\n");
			HAL_Delay(1000);
			printf("AT+MIPCALL=1\r\n");
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"+MIPCALL: ");
		}
			Clear_Buffer();
			printf("获取IP成功\r\n");
			HAL_Delay(1000);
		//定位
		printf("AT+GTGIS=6\r\n");
		HAL_Delay(3000);
		strx=strstr((const char*)RxBuffer,(const char*)"+GTGIS:");
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("基站定位失败\r\n");
			HAL_Delay(3000);
			printf("AT+GTGIS=6\r\n");
			HAL_Delay(3000);
			strx=strstr((const char*)RxBuffer,(const char*)"+GTGIS: ");
		}
		Clear_Buffer();
			printf("基站定位成功");
			HAL_Delay(1000);
		
		//设置平台设备信息
		printf("AT+TCDEVINFOSET=1,\"WE300YV59F\",\"weilaiRoad_Lamp001\",\"RlqqNdAGME1AvEBv8SiYBw==\"\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+TCDEVINFOSET: OK");
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("平台信息设置失败\r\n");
			HAL_Delay(1000);
			printf("AT+TCDEVINFOSET=1,\"WE300YV59F\",\"weilaiRoad_Lamp001\",\"RlqqNdAGME1AvEBv8SiYBw==\"\r\n");
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"+TCDEVINFOSET: OK");
		}
		Clear_Buffer();
		printf("平台信息设置成功\r\n");
		HAL_Delay(1000);
		
		//设置连接参数并连接
		printf("AT+TCMQTTCONN=1,20000,240,1,0\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+TCMQTTCONN: OK");
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("连接失败\r\n");
			HAL_Delay(1000);
			printf("AT+TCMQTTCONN=1,20000,240,1,0\r\n");
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"+TCMQTTCONN: OK");
		}
		Clear_Buffer();
		printf("连接成功\r\n");
		HAL_Delay(1000);
		
		//订阅上报下行属性
		printf("AT+TCMQTTSUB=\"$thing/down/property/WE300YV59F/weilaiRoad_Lamp001\",1\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"+TCMQTTSUB: OK");
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("订阅标签失败\r\n");
			HAL_Delay(1000);
			printf("AT+TCMQTTSUB=\"$thing/down/property/WE300YV59F/weilaiRoad_Lamp001\",1\r\n");
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"+TCMQTTSUB: OK");
		}
		Clear_Buffer();
		printf("订阅标签成功\r\n");
		HAL_Delay(1000);
		
		//上报属性
		printf("AT+TCMQTTPUB=\"$thing/up/property/WE300YV59F/weilaiRoad_Lamp001\",1,\"{\\\"method\\\":\\\"report\\\",\\\"clientToken\\\":\\\"123\\\",\\\"params\\\":{\\\"power_switch\\\":1}}\"\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"success");
		while(strx==NULL)
		{
			Clear_Buffer();
			printf("上报失败\r\n");
			HAL_Delay(1000);
			printf("AT+TCMQTTPUB=\"$thing/up/property/WE300YV59F/weilaiRoad_Lamp001\",1,\"{\\\"method\\\":\\\"report\\\",\\\"clientToken\\\":\\\"123\\\",\\\"params\\\":{\\\"power_switch\\\":1}}\"\r\n");
		HAL_Delay(1000);
		strx=strstr((const char*)RxBuffer,(const char*)"success");
		}
		Clear_Buffer();
			printf("上报成功\r\n");
			HAL_Delay(1000);
		Clear_Buffer();

在while(1)后添加

if(RxBuffer[0] != 0)
		{
			HAL_Delay(1000);
			strx=strstr((const char*)RxBuffer,(const char*)"power_switch");
			if (strx==NULL)
			{printf("电灯属性获取失败");}
			else
			{
				len = strlen(strx);
				number = strx[14];
				printf("电灯属性获取成功");
				HAL_Delay(500);
				printf("收到信息:power_switch=%c" ,number);
				HAL_Delay(500);
				Clear_Buffer();
			}
			Clear_Buffer();
		}
		HAL_Delay(500);

下载代码进行测试,ok了,大功告成

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值