本文详细介绍了,STM32连接OneNET平台上报温湿度数据的操作与步骤。
使用资源:
STM32F103C8T6、NB模组BC260Y、DHT11温湿度传感器
一、OneNET平台创建
- 登录https://open.iot.10086.cn/,注册账号、登录。
2. 点击右上角的开发者中心,进入开发者中心,在全部产品服务,选择“多协议接入”。
3. 添加产品
4. 点击添加的产品,进入产品中。
5.添加设备
二、设备端代码编写
- 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;
}
}
三、数据查看
- 设备状态查看
2. 上报数据查看
工程源码:【免费】STM32+BC260Y+DHT11上报温湿度数据至OneNET资源-CSDN文库https://download.csdn.net/download/qq_39742246/88339520