前言:
今天兄弟们对“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