基于STM32的(NB-IOT(BC26))温湿度监测系统

基于STM32的(NB-IOT(BC26))温湿度监测系统

闲来无事,用手头STM32做个项目。

成品功能:STM32采集温度、湿度数据,显示在屏幕上,通过NB-IOT(BC26)模块连接阿里云物联网平台接受数据并实时监控。


材料

  • STM32ZET6开发板(战舰V3)
  • TFT显示屏(战舰有我用的2.7寸的)
  • NB-IOT(BC26)模块
  • DHT11温湿度模块
  • 杜邦线
  • 用keil5进行开发

开始制作。

制作过程

首先从板子测温湿度开始

DHT11温湿度模块

原子哥有DHT11例程,所以直接在此基础上进行开发

下载上之后这是效果。

阿里云物联网平台

先到阿里云物联网平台注册一个设备。

  1. 进入阿里云官网搜索物联网平台,现在可以免费注册一个。
  2. 点击设备接入服务


    在这里插入图片描述
  3. 点击创建产品
    在这里插入图片描述
  4. 联网方式要选择蜂窝(4G)网络
    在这里插入图片描述
  5. 点击添加设备输入设备名称
    在这里插入图片描述
  6. 选中该设备之后,点击查看DeviceSecret码
    在这里插入图片描述
  7. 记录这三个码后边有用
    在这里插入图片描述
  8. 在设备中查看要发布信息的地址(下边的属性上报)
    在这里插入图片描述
  9. 查看信息的标识符,既传送信息的头部
    在这里插入图片描述
  10. 阿里云物联网平台接受的是json格式,所以数据发送的格式为:
    AT+QMTPUB=0,0,0,0,"/sys/a1Xi4HdVogd/mzh001/thing/event/property/post","
    {"id":"26","version":"1.0","params": { "CurrentTemperature":{"value":32},"GeoLocation":{"E":123,"W":234} }, "method":"thing.event.property.post"}"

NB-IOT(BC26)模块

先用USB转TTL,用串口助手,用AT指令进行调整

这是用到的AT指令


在这里插入图片描述

硬件连接:BC26的VIN接TTL的5V,BC26的GND接TTL的地,BC26的RX接TTL的TX,BC26的TX接TTL的RX,跳线帽短接BC26的PWR和3.3V

注意地和电千万不能接错,会烧坏器件!!!
接好后插电脑上,连接串口助手(我用原子哥的XCOME)。

指令 返回 说明
AT OK 模块正常,可正常实现收发
AT+CIMI 460043331505555 查询是否有卡
AT+CSQ 1~31 信号强度
AT+CGATT? +CGATT: 1 查询网络注册情况
AT+CGPADDR=1 +CGPADDR: 1,10.68.55.555 查询是否分配IP地址
AT+QMTCFG="aliauth",0,"a1Xi4HdV4gd","mz4001","c538f1eb6deb2020c83579bac4444405" OK 配置 MQTT 可选参数
AT+QMTOPEN=0,"iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 +QMTOPEN: 0,0 打开 MQTT 客户端网络
AT+QMTCONN=0,"test21115" +QMTCONN: 0,0,0 连接客户端至 MQTT 服务器
AT+QMTPUB=0,0,0,0,"/sys/a1Xi4HdVogd/mzh001/thing/event/property/post","{"id":"26","version":"1.0","params":{"Temperature":{"value":32}},"method":"thing.event.property.post"}" +QMTPUB: 0,0,0 发布消息

接着用串口助手发送这些指令进行调试。


在这里插入图片描述

在这里插入图片描述

说明:

  1. 数据5要结合你的阿里云物联平台中的7的三个码ProductKeyDeviceNameDeviceSecret
  2. 数据6要结合阿里云地址和端口,一般设置这个就可以。
  3. 数据7是登陆请求,这个名字一般没什么要求,只要不重复即可。
  4. 数据8要注意中间那个地址就是阿里云物联网平台8中那个属性上报的topic地址。后边的params要结合json数据格式以及阿里云物联网平台9中的标识符,数据要注意阿里云物联网平台9中的数据格式。
  5. 最后返回+QMTPUB: 0,0,0表示发送成功。
  6. 到阿里云物联网平台查看数据。点击设备点击查看,点击物联网数据,可以打开实时更新。
    在这里插入图片描述
  7. 数据出现问题,可以到日志中查看问题原因。
    在这里插入图片描述
  8. 设备物联网模型中出现我们上传的数据就表示成功了。

这样USB转TTL单独调试就成功了。

接下来将这些放到板子中实现自动化。

板载上传数据

移植墨子号STM32F103RC的例程

  1. 首先在DHT11例程的基础上,将printf函数改为串口2,方便连接。初始化串口2。
//重定义fputc函数
int fputc(int ch, FILE *f)
{      
    while((USART2->SR&0X40)==0);//串口2输出,循环发送直到发送完毕
    USART2->DR = (u8) ch;      
    return ch;
}
  1. 移植BC26初始化以及连接函数。
void OPEN_BC26(void)
{
   char *strx;
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
   if(strx==NULL)
    {
        delay_ms(300);
        delay_ms(300);
        delay_ms(300);
        delay_ms(300);  
    }
    printf("AT\r\n"); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OK
    printf("ATE0&W\r\n"); //关闭回显
    delay_ms(300); 
    LED0=0;
    printf("AT+QMTDISC=0\r\n");//关闭连接 
    delay_ms(300);
    printf("AT+QMTCLOSE=0\r\n");
    delay_ms(300); 
}

3.main()函数中初始化

    OPEN_BC26();//对BC26开机
    BC26_Init();//对BC26初始化
    MQTT_Init();//连接阿里云

板子串口返回+QMTOPEN: 0,0表示连接成功。

  1. 将需要传送的值通过aliyunMQTT_PUBdata(temp,humi);函数发送到MTQQ准备函数中。
  2. 接收之后通过
//访问阿里云需要提交的数据
u8 Mqttaliyun_Savedata_tm(u8 *t_payload,u8 temp,u8 humi)
{
    char json[]="{\"id\":\"26\",\"version\":\"1.0\",\"params\":{\"CurrentTemperature\":{\"value\":%d},\"CurrentHumidity\":{\"value\":%d}},\"method\":\"thing.event.property.post\"}";    
    char t_json[200];
    unsigned short json_len;
    sprintf(t_json, json, temp, humi);
    json_len = strlen(t_json)/sizeof(char);
    memcpy(t_payload, t_json, json_len);
    return json_len;
}

函数包装成需要提交的数据JSON格式。

  1. 发送数据并查看返回值
void aliyunMQTT_PUBdata(u8 temp,u8 humi)
{
     u8 t_payload[200],len,t_payload_1[200],len_1;;
     printf("AT+QMTPUB=0,0,0,0,%s\r\n",PubTopic);//发布主题
     delay_ms(300);
     len=Mqttaliyun_Savedata_tm(t_payload,temp,humi);
     t_payload[len]=0;
     printf("%s",t_payload);
  while((USART2->SR&0X40)==0){}//循环发送知道发送完毕
     USART2->DR = (u8) 0x1A;    
     delay_ms(100);
     strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回状态
  while(strx==NULL)
    {
        strx=strstr((const char*)RxBuffer,(const char*)"+QMTPUB: 0,0,0");//看下返回状态
    }
    Clear_Buffer(); 
}
  1. 查看串口助手返回
    +QMTPUB: 0,0,0
    :0.0},"HoldingTemperature":13,"Diu":0},"method":"thing.event.property.post"}
    OK这个表示成功。
  2. 到阿里云物联网平台查看设备。打开设备实时更新,可以看到数据更新正常。
    在这里插入图片描述

最后附上完整的项目文件。自行下载。

这个项目到这里就算完了。
还有很多不足的地方,希望大佬可以指正。也希望和爱好者交流学习。

禁止转载!!!
QQ:2039723308
VX:Shiboven

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容