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

article/2025/9/23 1:06:06

基于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)。

指令返回说明
ATOK模块正常,可正常实现收发
AT+CIMI460043331505555查询是否有卡
AT+CSQ1~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");//返回OKprintf("AT\r\n"); delay_ms(300);strx=strstr((const char*)USART_RX_BUF,(const char*)"OK");//返回OKif(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");//返回OKprintf("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表示连接成功。
4. 将需要传送的值通过aliyunMQTT_PUBdata(temp,humi);函数发送到MTQQ准备函数中。
5. 接收之后通过

//访问阿里云需要提交的数据
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格式。
6. 发送数据并查看返回值

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. 到阿里云物联网平台查看设备。打开设备实时更新,可以看到数据更新正常。在这里插入图片描述

最后附上完整的项目文件。自行下载。
https://download.csdn.net/download/weixin_42320020/19103652

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


大家有想法可以私信或者留言,博主有时间会帮大家做一些项目。

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


http://chatgpt.dhexx.cn/article/Wpjy4iVP.shtml

相关文章

CAN通信----CANTest下载和安装

一、CANTest 下载 在周立功的官方网站下载免费的 CANTest软件。 下载网址:https://www.zlg.cn/index.php/can/down/down/id/22.html 步骤1:进入官网,点击下载 步骤2:下载完的安装包 二、CANTest 安装 步骤1:双击刚下…

NCBI的NT库比对——blastn

NCBI的NT库比对——blastn NT库比对,包括对测序数据和组装后的基因组序列进行NT库比对,查看是否存在菌污染以及是否是自己的数据。这里我提供这一部分的具体操作过程。 步骤一:NT全库下载 前面有一篇博文,提到了通过Aspera软件…

NB-IoT模块 移远BC26测试 - TCP通信

准备工作 USB转TTL线NB-IoT测试卡(电信或者移动制式,BC26支持全频段,B5 B8都可以) AT指令 硬件正确连接之后,按住轻触开关 S1 一段时间或者拉高丝印为 PWR 的信号(排针)一段时间让模块开机&…

NB-IoT移远BC95调试笔记 01 加网测试

一、前言 移远BC95是最早推出的NB-IoT模块,目前厦门这边网络都已经覆盖了。自己拿个设备来玩玩,这篇笔记先记录下加网测试的心得。 本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/ 二、加网总体思路 加网思路…

[内网渗透]—内网扫描

nbtscan Win2012 上传nbtscan和dll程序 upload D:\内网\tools\信息收集\nbtscan\nbtscan.exe上传后用nbtscan命令扫描内网其他网段 shell nbtscan.exe 192.168.52.0/24win2016 此时直接上线Win2016肯定是不行的,因为目标不出网无法访问到kali,所以要…

TBCNN

TBCNN – 基于树的卷积神经网络 TBCNN: A Tree-Based Convolutional Neural Network for Programming Language Processing 一种用于编程语言处理的基于树的卷积神经网络 Abstract: 由于当前还没有将深度神经网络应用于编程语言处理, 提出TBCNN模型来对基于ASTs的编程语言进行…

Nbtscan.exe工具分析

Nbtscan.exe 这是一款用于扫描Windows网络上NetBIOS名字信息的程序。该程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地…

内网安全攻防读书笔记(5)——探测域内存活主机和端口扫描

实际探测可以在白天和晚上分别进行探测。 1.利用NetBIOS快速探测内网 nbtscan工具已经上传到我的资源,大家可以下载。此工具用于扫描本地或远程TCP/IP网络上开放NetBIOS名称服务器。有Windows和Linux两个版本,将其上传到目标服务器就可以直接使用。使用…

nbtscan局域网扫描的原理

本文出处:http://blog.csdn.net/xizhibei 相信搞网络的应该都听说过nbtscan这个工具,当我们处于局域网中,想查询同处一个局域网的主机时,它就是个不错的工具(比如追踪ARP诈骗源) 它也很好用,在…

nbtscan在windows和linux下编译

nbtscan在windows和linux下编译 windows下载编译 linux下载编译 参考文章 windows 下载 http://unixwiz.net/tools/nbtscan-source-1.0.35.zip解压之后,修改nbtscan.c的66行include "getopt.i"为include "getopt.h" 修改nbtscan_common.h为li…

内网探测(主机存活、端口、Web资产)

内网探测(主机存活、端口、Web资产) 当我们能访问到目标内网任何资源之后,我们就可以对目标内网进行更深层次的信息搜集,比如:主机收集、IP 段搜集、端⼝开放服务、Web资产数量、漏洞类型 0x01. nbtscan 介绍&#xff…

入侵检测——nbtscan(扫描篇)

目录 环境介绍工具简介数据包规则 环境介绍 NAT模式: kali攻击方win7受害者Metasploitable受害者 工具简介 一个在本地或远程TCP/IP网络上扫描开放的NETBIOS名称服务器的命令行工具。它基于Windows系统的nbtstat工具的功能实现,但它可在许多地址上运…

delphi生成一个随机序列号

varFGuid: TGUID;beginCreateGUID(FGuid);edit1.Text : GUIDToString(FGuid);edit1.Text : edit1.Text IntToStr(Length(edit1.Text));edit1.Text : Copy(GUIDToString(FGuid), 2, 36);end; 测试通过

delphi2007 注册码

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 执行 Setup.exe 文件安装 Delphi 2007 for…

linux 磁盘序列号修改,一个小程序:Linux下取得硬盘的序列号

最近给朋友帮忙,遇到一个问题:如何在Linux取到硬盘的序列号?目前网上说的方法大都是Windows 下用Delphi、C#等工具开发的。如何用ANSI C来实现呢?其实C在做这种底层事情方面比Delphi和C#都要容易的。下面这个函数就是取得硬盘序列…

win7读取linux硬盘序列号,Windows 下获取硬盘序列号

只获取序列号 以下任意一条命令都可以: wmic diskdrive get serialnumber wmic path win32_physicalmedia get SerialNumber wmic path Win32_DiskDrive get SerialNumber 运行结果: 获取硬盘的更多信息 wmic diskdrive get Name, Manufacturer, Model, InterfaceType, Media…

Delphi dbgrideh序号

数据库里面的数据没有序号的数据,在dbgrideh上新增一列自定义其字段,例如:id 在编码的开头定义i,为integer 在dbgrideh控件上的‘OnDrawColumnCell’事件下写下代码 procedure TForm1.number(Sender: TObject; const Rect: TRect;…

安装delphi 10.4 社区版

事先说明:由于delphi的服务器是在国外的,所以,有条件的你懂的 下载安装程序 去 https://www.embarcadero.com/cn/products/delphi/starter 下载安装程序 点击 get community edition free 填写信息,注册账号,成功之后它将会把免费使用的序列号发送到你所填写的邮箱里面,之后会…

Delphi7安装及补丁安装详解

在学习Delphi之前,我们要先安装开发环境,博主这里以Delphi7镜像作为安装实例,希望在Delphi学习之路上能给予大家一点帮助。接下来就让我们一起来走一遍这个安装过程。 ⑴双击Delphi7镜像文件,镜像文件会在DVD驱动器中打开 ⑵ 双击…

nginx Proxy 代理

1、代理原理 反向代理产生的背景: 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担…