龙空技术网

STM32+BC260Y通过MQTT连接OneNET平台

映客嵌入式 92

前言:

今天兄弟们对“stm32net100m”可能比较着重,朋友们都需要学习一些“stm32net100m”的相关文章。那么小编同时在网络上搜集了一些关于“stm32net100m””的相关知识,希望你们能喜欢,大家快快来学习一下吧!

本文详细介绍了,STM32连接OneNET平台上报温湿度数据的操作与步骤。

使用资源:

STM32F103C8T6、NB模组BC260Y、DHT11温湿度传感器

一、OneNET平台创建

登录,注册账号、登录。点击右上角的开发者中心,进入开发者中心,在全部产品服务,选择“多协议接入”。添加产品点击添加的产品,进入产品中。添加设备

二、设备端代码编写

BC260Y初始化

BC260Y初始化的详细流程:

(1)发送AT指令,等待返回OK。

(2)禁止休眠模式,打开全功能模式。

(3)获取SIM卡号。

(4)判断是否存在卡,如果不存在则重试。

(5)激活网络,查询激活状态,如果激活失败则重试。

(6)获取CSQ值,即信号质量。

void BC260Y_Init(void){    BC260Y_SendCmd("AT\r\n");     delay_ms(300);    strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK    Clear_Buffer();	    while(strx==NULL)    {        Clear_Buffer();	        BC260Y_SendCmd("AT\r\n");         delay_ms(300);        strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK    }		BC260Y_SendCmd("AT+QSCLK=0\r\n");   //禁止休眠		delay_ms(300);    BC260Y_SendCmd("AT+CFUN=1\r\n");    //打开全功能模式    delay_ms(300);    BC260Y_SendCmd("AT+CIMI\r\n");   //获取卡号,类似是否存在卡的意思,比较重要。    delay_ms(300);    strx=strstr((const char*)RxBuffer,(const char*)"460");//返460,表明识别到卡了		    Clear_Buffer();	    while(strx==NULL)			{					Clear_Buffer();						BC260Y_SendCmd("AT+CIMI\r\n");//获取卡号,类似是否存在卡的意思,比较重要。					delay_ms(300);					strx=strstr((const char*)RxBuffer,(const char*)"460");//返回OK,说明卡是存在的			}					BC260Y_SendCmd("AT+CGATT=1\r\n");//激活网络,PDP					delay_ms(300);					strx=strstr((const char*)RxBuffer,(const char*)"OK");//返OK					Clear_Buffer();						BC260Y_SendCmd("AT+CGATT?\r\n");//查询激活状态					delay_ms(300);					strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1");//返1					Clear_Buffer();			while(strx==NULL)			{					Clear_Buffer();						BC260Y_SendCmd("AT+CGATT?\r\n");//获取激活状态					delay_ms(300);					strx=strstr((const char*)RxBuffer,(const char*)"+CGATT: 1");//返回1,表明注网成功			}			BC260Y_SendCmd("AT+CSQ\r\n");//查看获取CSQ值			delay_ms(300);			Clear_Buffer();	}
MQTT连接

需注意:

BC260Y_SendCmd("AT+QMTOPEN=0,\"183.230.40.39\",6002\r\n");

对应的服务器的地址和端口。

BC260Y_SendCmd("AT+QMTCONN=0,\"1128962666\",\"614166\",\"456366\"\r\n");

对应创建设备的:设备ID、产品ID、鉴权信息

设备信息

产品信息

代码编写可参考:Quectel_BC260Y-CN_MQTT_应用指导_V1.0

void  MQTT_Init(void){    BC260Y_SendCmd("AT+QMTCFG=\"version\",0,1\r\n"); //设备版本    delay_ms(500);    BC260Y_SendCmd("AT+QMTOPEN=0,\"183.230.40.39\",6002\r\n");//通过TCP方式去连接MQTT服务器     delay_ms(500);    strx=strstr((const char*)RxBuffer,(const char*)"+QMTOPEN: 0,0");//看下返回状态    while(strx==NULL)			{				strx=strstr((const char*)RxBuffer,(const char*)"+QMTOPEN: 0,0");//确认返回值正确			}    Clear_Buffer();     BC260Y_SendCmd("AT+QMTCONN=0,\"1128962405\",\"614146\",\"456321\"\r\n");//去登录MQTT服务器,设备ID,产品ID,鉴权.用户根据实际需要进行更改    delay_ms(500);    strx=strstr((const char*)RxBuffer,(const char*)"+QMTCONN: 0,0,0");//看下返回状态		while(strx==NULL)			{        strx=strstr((const char*)RxBuffer,(const char*)"+QMTCONN: 0,0,0");//看下返回状态			}    Clear_Buffer(); }
主函数:

每5s向服务器发送一次数据。

// 初始化温湿度参数u8 temperature=25;  	    u8 humidity=50; 	 int main(void) { 		    	unsigned short timeCount = 0;	//发送间隔变量	u8 data_len,send_jason[200];	delay_init();	    	   //延时函数初始化 	Usart1_Init(9600);	   //串口1初始化为9600	Usart2_Init(9600);     //串口2初始化为9600	 	LED_Init();		  		   //初始化与LED连接的硬件接口	 	UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");	BC260Y_Init();//对设备初始化   MQTT_Init();	while(1)	{	    	    				DHT11_Read_Data(&temperature,&humidity);		//读取温湿度值		delay_ms(100);				if(++timeCount >= 50)									//发送间隔5s				{							BC260Y_SendCmd("AT+QMTPUB=0,0,0,0,\"$dp\"\r\n");					delay_ms(300);					data_len=MqttOnenet_Savedata(send_jason,temperature, humidity);					Uart2_SendDATA(send_jason,data_len);   //发jason数据到ONENET					while((USART2->SR&0X40)==0){}// 					USART2->DR = (u8) 0x1A;					delay_ms(500);					Clear_Buffer(); 					LED0=!LED0;	}}

三、数据查看

设备状态查看上报数据查看

标签: #stm32net100m