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

发布者:huanran最新更新时间:2024-12-31 来源: jianshu关键字:STM32  温湿度监测系统 手机看文章 扫描二维码
随时随地手机看文章

闲来无事,用手头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)。

image.png?imageView2/2/w/1000


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


在这里插入图片描述


在这里插入图片描述


说明:

  1. 数据5要结合你的阿里云物联平台中的7的三个码ProductKey、DeviceName和DeviceSecret。

  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('ATrn'); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)'OK');//返回OK
    printf('ATrn'); 
    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('ATrn'); 
    delay_ms(300);
    strx=strstr((const char*)USART_RX_BUF,(const char*)'OK');//返回OK
    printf('ATE0&Wrn'); //关闭回显
    delay_ms(300); 
    LED0=0;
    printf('AT+QMTDISC=0rn');//关闭连接 
    delay_ms(300);
    printf('AT+QMTCLOSE=0rn');
    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,%srn',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. 到阿里云物联网平台查看设备。打开设备实时更新,可以看到数据更新正常。


关键字:STM32  温湿度监测系统 引用地址:基于STM32的(NB-IOT(BC26))温湿度监测系统

上一篇:STM32通过rosserial接入ROS通讯开发
下一篇:STM32裸机编程 - HAL库

推荐阅读最新更新时间:2026-03-25 10:32

基于物联网的远程温湿度监测系统(2)编写 DHT11 驱动
前言 本项目主要通过使用STM32F103C8T6作为主控MCU,ESP8266作为数据透传模块,接入机智云AIoT云平台,通过在线智能产品,实现了远程联网、温湿度监测、APP控制等功能。 在上文中,主要介绍了“创建云端产品,烧录Gagent”,以便让设备能够联网,当然其中也备注了ESP8266烧写Gagent固件时的注意事项,说明定义数据点的作用。 在本文中,从原理开始讲解,阐述DHT11驱动的编写。 进入正文 1、DHT11 简要介绍 DHT11 器件采用简化的单总线通信,DATA 引脚用于微处理器与 DHT11 之间的通讯和同步,一次传送 40 位数据,高位先出。 举例: 2、时序分析(附代码)
[单片机]
基于物联网的远程<font color='red'>温湿度</font><font color='red'>监测系统</font>(2)编写 DHT11 驱动
基于物联网的远程温湿度监测系统(1):创建云端产品,烧录Gagent
前言 本文通过使用STM32F103C8T6作为主控MCU,ESP8266作为数据透传模块,接入机智云AIoT云平台,通过在线智能产品,实现了远程联网、温湿度监测、APP控制等功能。 进入正文 1、ESP8266烧写Gagent固件 在网上购买的ESP8266并不能直接接入机智云,所以需要烧写Gagent固件。 1.1 Gagent是什么? 1.2 下载Gagent:download.gizwits.com/zh-cn/p/92/94 1.3 如何烧写Gagent固件? 在烧写固件前,需要查看ESP8266型号,ESP-07S、ESP-12F、ESP-12S,配置方式不一样,具体可参考下文: 入门教程3:如何给ESP82
[单片机]
基于物联网的远程<font color='red'>温湿度</font><font color='red'>监测系统</font>(1):创建云端产品,烧录Gagent
基于单片机的温湿度监测系统设计(程序)
#include reg52.h #include 1602.h #include dht.h #include 2402.h //定义三个LED灯 sbit Led_qushi=P1^6; //去湿灯 sbit Led_jiangwen=P1^5; //降温灯 sbit Led_shengwen=P1^4; //升温灯 sbit Key_TH1 = P3^2; sbit Key_TH2 = P3^3; sbit Key_HH1 = P3^4; sbit Key_HH2 = P3^5; //定义标识 volatile bit FlagStartRH = 0; //开始温湿度转换标志 volatile
[单片机]
基于MSP430单片机和HM1500传感器实现温湿度监测系统设计
引言 随着社会经济的发展和科学技术的不断进步,许多情况下都需要对环境的温湿度进行限定,因此,必须在某些特定环境安装温湿度报警器以进行监控。为此,本文利用集成温湿度传感器HM1500的测温快速、使用简便等特点,同时结合MSP430单片机强大的功能,设计了一个监控系统来对温湿度进行实时监控以进行超限报警。本系统测量准确、调试方便、可实时记录报警信息、方便工作人员排故,并可广泛应用于条件恶劣、人员不便进入的场合。 1 、系统结构和总体设计方案 本系统的总体设计方案如图1所示。本方案采用分别设计温度和湿度采样电路的方法,将集成温度传感器AD590采集得到的电流信号和湿度传感器HM1500采集到的电压信号转换为给定范围内的电压信号。然后
[单片机]
基于MSP430单片机和HM1500传感器实现<font color='red'>温湿度</font><font color='red'>监测系统</font>设计
ZigBee_GPRS的温湿度监测系统
1概述 温湿度监测的应用需求在众多领域引起了高度关注,粮库、温室大棚、工业安全监控系统等都需要实时地监测环境温湿度。在实际应用中,参数采集点往往具有分布离散、移动性强等特点,导致传统的有线监测布线困难。随着无线传感器网络和远程传输技术的发展,为系统自动化在线实时监测提供了实现途径。基于ZigeBee无线模块传感器网络具有组网简单灵活、在线寿命长及移动性强等优点;而GPRS技术是中国移动推出的无线传输业务,采用分组交换技术,具有超强的稳定性和可靠性。本次设计正是基十这两种无线传输技术,以CC2530芯片为主体,实现了区域性传感器数据采集与远程数据传输。这种将PAN网络和GSM公用网络相融合的采集方法具有覆盖范围大、稳定性强、精度高
[单片机]
ZigBee_GPRS的<font color='red'>温湿度</font><font color='red'>监测系统</font>
基于AT89C51/55的温湿度自动监测系统介绍
1系统硬件设计   系统结构如图1所示,采用ATMEL公司生产的51系列单片机AT89C55和AT89C51为核心,其中主机采用AT89C55、从机采用AT89C51。从机负责64点的数据检测,各检测点的温度和湿度经过温、湿度传感器及其转换电路转变为电压信号;经过矩阵网络进行信号选择,所得信号送到相应的信号放大整理电路放大,再进入A/D转换器,进行模数转换,将数字量送入从机,再经从机的数据处理,送给LED进行显示,同时定时传送给主机AT89C55;主机负责收集各粮仓内的数据(可监测50~100个粮仓),实现数据的保存、打印以及调用历史数据,并可巡回显示各粮仓的及时温湿度及报警状态。   AT89C55/51芯片是由ATMEL公司推
[单片机]
基于AT89C51/55的<font color='red'>温湿度</font>自动<font color='red'>监测系统</font>介绍
由51单片机构成的温湿度自动监测系统
1系统硬件设计   系统结构如图1所示,采用ATMEL公司生产的51系列单片机AT89C55和AT89C51为核心,其中主机采用AT89C55、从机采用AT89C51。从机负责64点的数据检测,各检测点的温度和湿度经过温、湿度传感器及其转换电路转变为电压信号;经过矩阵网络进行信号选择,所得信号送到相应的信号放大整理电路放大,再进入A/D转换器,进行模数转换,将数字量送入从机,再经从机的数据处理,送给LED进行显示,同时定时传送给主机AT89C55;主机负责收集各粮仓内的数据(可监测50~100个粮仓),实现数据的保存、打印以及调用历史数据,并可巡回显示各粮仓的及时温湿度及报警状态。   AT89C55/51芯片是由ATMEL公司推
[单片机]
由51单片机构成的<font color='red'>温湿度</font>自动<font color='red'>监测系统</font>
由AT89C51/55构成的温湿度自动监测系统
1系统硬件设计   系统结构如图1所示,采用ATMEL公司生产的51系列单片机AT89C55和AT89C51为核心,其中主机采用AT89C55、从机采用AT89C51。从机负责64点的数据检测,各检测点的温度和湿度经过温、湿度传感器及其转换电路转变为电压信号;经过矩阵网络进行信号选择,所得信号送到相应的信号放大整理电路放大,再进入A/D转换器,进行模数转换,将数字量送入从机,再经从机的数据处理,送给LED进行显示,同时定时传送给主机AT89C55;主机负责收集各粮仓内的数据(可监测50"100个粮仓),实现数据的保存、打印以及调用历史数据,并可巡回显示各粮仓的及时温湿度及报警状态。   AT89C55/51芯片是由ATMEL
[应用]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved