STM32+BC260Y通过MQTT连接OneNET平台

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

使用资源:

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

一、OneNET平台创建

  1. 登录https://open.iot.10086.cn/,注册账号、登录。

      2. 点击右上角的开发者中心,进入开发者中心,在全部产品服务,选择“多协议接入”。

    3. 添加产品

     4. 点击添加的产品,进入产品中。

     5.添加设备

二、设备端代码编写

  1. 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();	
}

    2.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(); 
}

    3. 主函数:

每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;
	}
}

三、数据查看

  1. 设备状态查看

     2. 上报数据查看

 工程源码:【免费】STM32+BC260Y+DHT11上报温湿度数据至OneNET资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/qq_39742246/88339520

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值