[作品提交] 【分布式温湿度采集系统】作品提交

lansebuluo   2022-10-22 02:19 楼主

 

分布式温湿度采集系统

 

 

 

一、简介

在我的成长过程中,从没有网络到网络遍布各个角落,也就这二十几年时间,科技的快速发展,给我们的生活带来了极大的便利。在一个网络互联的时代,多少要感受、融入和利用网络带给我们的便利,这次就是为了更进距离的接触网络,才有了这个项目-分布式温湿度数据采集系统。作为一个集控系统通过WIFI网络和广域网,把散落在各个位置的温湿度数据信息采集到系统内,并保存;可通过集控系统设置每个点位的温湿度报警值,当采样数据超过设定限值时,在采样点进行灯光或声音报警。当需要查看数据时,可以通过网络,连接集控系统,调取当前数据,可回看历史数据。

0001.jpg

 

集控系统采用了STM32H745I-DISCO开发板+HLK-W800-KIT的WIFI模块,不要小看这个WIFI模块,这也是一个开发板,不是作为数据透传功能使用的。

 

主要特点:

1、温湿度无线采集点(仅需5V供电)

2、MQTT传输,收集数据配置采样点

3、独立集控系统STM32H745I-DISCO

4、数据保存及历史数据查看

5、上位机软件连接集控系统

6、web配置WIFI网络

 

 

二、系统框图

 

硬件部分:

 

1、集控:STM32H745I-DISCO开发板

2、WIFI功能:海凌科HLK-W800-KIT开发板

3、温湿度传感器:SHT20

 

硬件功能分为两部分:

 

1、温湿度采样点,使用海凌科HLK-W800-KIT开发板扩展读取温湿度传感器SHT20,IO引脚控制蜂鸣器和LED。

2、集控点,使用STM32H745I-DISCO开发板与海凌科HLK-W800-KIT开发板组成

 

软件功能框图分为三部分:

 

1、上位机软件,用于网络连接集控点,读取集控点的数据和配置各个采样点信息。

2、集控点软件,通过MQTT协议,订阅采集点温湿度数据,保存数据。

3、采集点软件,WIFI连接路由器,读取温湿度数据,并发送数据到MQTT服务器。

 

0002.png

 

三、功能说明

 

STM32H745I-DISCO开发板

 

0003.jpg

 

STM32H745I-DISCO探索套件是用于STM32H745I MCU的全面演示和开发平台,MCU基于STMicroelectronics的Arm® Cortex®-M7和-M4双核微控制器。板载以太网RJ45接口,扩展4GB eMMC,引脚引出接口STMod+可灵活扩展。

 

软件设计图如下

 

0004.jpg

 

在STM32H745I上移植了FreeRTOS实时操作系统作为软件整体运行的调度。FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。

使用LWIP网络协议栈完成与上位机软件的连接。LwIP是轻型IP协议,有无操作系统的支持都可以运行,尤其适合在低端的嵌入式系统中使用,支持ICMP协议、UDP(用户数据报协议)、TCP(传输控制协议)等。

使用FatFs文件系统,这样操作文件一样,操作扩展的eMMC存储器。FatFs 是一个通用的文件系统(FAT/exFAT)模块,适合在小型嵌入式系统中实现FAT文件系统。

编写了UART驱动程序,用于连接无线网络扩展,接收MQTT服务器数据,并发送有效数据到MQTT服务器。

 

WIFI扩展模块(海凌科HLK-W800-KIT)

 

0005.jpg

联盛德一款WIFI芯片W800开发板,内核为平头哥XT804,工作频率 240MHz,内置 DSP、浮点运算单元与安全引擎,内置 2MB Flash,288KB RAM,内置 UART、GPIO、SPI、SDIO、I2C、I2S、7816、ADC、TouchSensor 等数字接口,功能非常强大,而且价格很低,极具竞争力。

 

用于连接无线路由器或WIFI热点,实现与广域网的互通,发布和订阅指定MQTT服务端报文。接收MQTT服务端数据,并把数据转换到UART端口,发送给STM32H745I-DISCO开发板;接收UART端数据,并把数据通过广域网发送到MQTT服务端。发送的信息为采样点的温度、湿度限值和使能/禁止报警。

 

0006.jpg

 

使用FreeRTOS开源实时操作系统作为系统调度,web配网方式连接WIFI无线热点,热点信息保存在内置的FLASH中。

 

采集点(海凌科HLK-W800-KIT)

 

用于连接无线路由器或WIFI热点,实现与广域网的互通,发布和订阅指定MQTT服务端报文。接收MQTT服务端数据,读取SHT20传感器温湿度数据,并把数据通过广域网发送到MQTT服务端。接收温度、湿度限值和使能/禁止报警配置信息并保存。

 

0007.jpg 00071.jpg

 

软件设计框图

 

0008.jpg

 

WIFI连接无线热点,FLASH保存配网信息及温湿度报警信息,I/O控制蜂鸣器及LED,I2C接口读取SHT20温湿度传感器,web配网。

 

上位机软件

 

0009.jpg

 

采用了VC++编写的MFC单文档程序,使用socket套接字连接TCP服务器,通过界面设置要连接TCP服务器的IP及端口号。配置采样点的温湿度报警值,读取采集点实时温湿度值,获取历史数据,并通过表格的方式浏览。

 

四、作品源码

 

download.eeworld.com.cn/detail/lansebuluo/625223

download.eeworld.com.cn/detail/lansebuluo/625224

download.eeworld.com.cn/detail/lansebuluo/625225

download.eeworld.com.cn/detail/lansebuluo/625226

 

五、作品功能演示视频

 

分布式温湿度采集系统-分布式温湿度采集系统-EEWORLD大学堂

 

六、项目总结

 

在做这个项目中,应用到的技术包括FreeRTOS实时操作系统、LWIP轻型IP协议栈、MQTT协议、FatFs文件系统、Socket、VC++MFC单文档程序等。尽管这个项目的功能基本完成,毕竟只是抽取业余时间,很多细节还不够完善,大体框架应该不存在问题,这只是一个实践项目,作为学习使用应该还不错。

在看到这个活动前,很多MCU芯片供应不稳定,国产替代之路正快速蔓延,正好看到W800芯片,自己也想往嵌入式系统靠拢,学习一下MQTT编程,因为最近这个比较火。本来自己习惯使用TI的C2000系列芯片,结果没货,只能找了STM32H745I作为代替,刚开始接触,还是花了一些时间,尤其是移植LWIP后,想利用有线网络实现与广域网的连接,LWIP开启DNS功能,不过尝试了很多配置,终究不能与广域网相连,为了项目能够实现功能,最终放弃,改用UART扩展WIFI模块连接广域网,降低一些难度。

刚开始规划这个项目的时候,毕竟不是很熟悉,完全没有考虑到工作量,做起来才知道,各个方面都要学习,包括VC++、LWIP、MQTT、FreeRTOS,经过这个项目后,技术方面应该有了很大提升,非常感谢得捷电子和EEWORLD提供的机会,让我成长很多,同样要感谢杜杜管理员热心督促和鼓励,让我能够更好的把握时间及时完成。

 

发帖汇总

2022得捷电子创新设计大赛】物料开箱-STM32H745I-DISCO - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

2022得捷电子创新设计大赛】分布式温湿度采集系统-简要设计概要 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

2022得捷电子创新设计大赛】分布式温湿度采集系统-采集端原理图 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

2022得捷电子创新设计大赛】分布式温湿度采集系统-STM32H745I-DISCO基础学习 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+STM32H745I-LWIP程序 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+STM32H745I-FreeRTOS点灯 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+STM32H745I-LWIP调试过程 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+WIFI模块扩展板V2 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+W800WIFI+温湿度传感器 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+温湿度采集模块 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+WIFI数据接收模块 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+MQTT调试 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】+MFC软件 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

【分布式温湿度采集系统】作品提交 - 2022得捷电子创新设计大赛 - 电子工程世界-论坛 (eeworld.com.cn)

 

七、其他

 

应用软件:

 

1、TCP调试及抓包:TCPUDPDbg和IPAnalyse

2、UART和WIFI调试:Upgrade_Tools_V1.4.8

3、STM32开发编译:IAR 9.10.2

4、W800开发编译:CDK 2.12.1

5、上位机软件C++编译:VS2015

 

附 TCP/IP 通信协议

 

客户端—向服务器主动发起建立TCP连接。

服务器---监听TCP端口,等待建立TCP连接。

服务器端口:6000

客户端:PC

服务器:开发板

 

客户端主动发送命令请求,服务器根据收到的内容返回数据。

特殊命令除外。

 

在TCP协议传输的一帧数据包括三部分内容,通过帧起始的帧长度判断帧数据的结束;这三部分内容分别是帧长度SIZE、命令COMMAND、数据内容DATA,格式定义如下:**********************************************************************

BYTE * 4 + BYTE * 2 + BYTE * 2 + BYTE * (SIZE –4)

帧长度SIZE 事务元标识符 命令 数据内容 DATA

**********************************************************************

 

COMMAND

名称

DATA

备注

1

询问设备信息

 

2

配置设备信息

***

 

3

读取历史数据

***

 

4

温湿度数据

***

 

 

客户端发送帧:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

4byte长度

2

事务元标示

2

16bit无符号整型

递增

3

命令

2

16bit无符号整型

固定值为0x0005

4

数据

0

 

 

例: 04 00 00 00 00 00 05 00

服务器返回数据:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

4byte长度

2

事务元标示

2

16bit无符号整型

接收值

3

命令

2

16bit无符号整型

固定值为0x0005

4

数据

4

32bit无符号整型

设备名称-4个字节

5

数据

4

32bit浮点

温度最大值

6

数据

4

32bit浮点

温度最小值

7

数据

4

32bit浮点

湿度最大值

8

数据

4

32bit浮点

湿度最小值

9

数据

1

8bit无符号整形

温度最大值使能

10

数据

1

8bit无符号整形

温度最小值使能

11

数据

1

8bit无符号整形

湿度最大值使能

12

数据

1

8bit无符号整形

湿度最小值使能

13

数据

4

32bit无符号整型

保存的数据长度

14

数据

-

----

根据数据长度判断设备个数

例:20 00 00 00 02 00 05 00 32 36 33 44 66 66 70 42 33 33 a3 c0 00 00 a1 42 33 33 23 41 01 00 01 00 00 01 00 00

 

客户端发送帧:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

不定长度,由组成内容决定长度

2

事务元标示

2

16bit无符号整型

递增

3

命令

2

16bit无符号整型

固定值为0x0007

4

数据

4

32bit无符号整型

设备名称-4个字节

5

数据

4

32bit浮点

温度最大值

6

数据

4

32bit浮点

温度最小值

7

数据

4

32bit浮点

湿度最大值

8

数据

4

32bit浮点

湿度最小值

9

数据

1

8bit无符号整形

温度最大值使能

10

数据

1

8bit无符号整形

温度最小值使能

11

数据

1

8bit无符号整形

湿度最大值使能

12

数据

1

8bit无符号整形

湿度最小值使能

13

数据

4

32bit无符号整型

保存的数据长度

14

数据

-

----

根据数据长度判断设备个数

例:20 00 00 00 00 00 07 00 32 36 33 44 66 66 70 42 33 33 a3 c0 00 00 a1 42 33 33 23 41 01 00 01 00 00 01 00 00

 

服务器返回:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

4byte长度

2

事务元标示

2

16bit无符号整型

接收值

3

命令

2

16bit无符号整型

固定值为0x0007

4

数据

0

 

 

例:04 00 00 00 09 00 07

 

服务器发送帧:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

不定长度,由内容决定长度

2

事务元标示

2

16bit无符号整型

0x0000

3

命令

2

16bit无符号整型

固定值为0x0008

4

数据

4

32bit无符号整型

名称标号-4个字节

5

 

4

32bit无符号整型

数据更新序号

6

 

2

16bit有符号整型

温度

7

 

2

16bit无符号整型

湿度

8

 

2

---------

根据数据长度,判断数据个数

例:10 00 00 00 09 00 08 00 32 36 33 44 01 00 00 00 ff 00 30 00

客户端发送帧:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

不定长度,由内容决定长度

2

事务元标示

2

16bit无符号整型

递增

3

命令

2

16bit无符号整型

固定值为0x0009

4

数据

4

32bit无符号整型

设备名称-4个字节

例:08 00 00 00 05 00 09 00 32 36 33 44

服务器返回:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

4byte长度

2

事务元标示

2

16bit无符号整型

接收值

3

命令

2

16bit无符号整型

固定值为0x0009

4

数据

4

32bit无符号整型

历史数据长度

例:08 00 00 00 03 00 09 00 00 01 00 00

 

服务器发送帧:

编号

名称

字节数

类型

描述

1

长度

4

32bit无符号整型

4byte长度

2

事务元标示

2

16bit无符号整型

递增

3

命令

2

16bit无符号整型

固定值为0x000A

4

数据

2

16bit无符号整型

保留1

5

数据

1

8bit无符号整型

保留2

6

数据

1

8bit无符号整型

保留3

7

数据

2

16bit有符号整型

温度

8

数据

2

16bit无符号整型

湿度

9

数据

-

---

根据长度判断数据个数

例:0C 00 00 00 03 00 0A 00 00 01 00 00 FE 00 20 00

 

附件

分布式温湿度采集系统-全.doc (4.03 MB)
(下载次数: 5, 2022-10-22 02:45 上传)

 

 

 

本帖最后由 lansebuluo 于 2022-10-22 10:14 编辑

回复评论 (2)

赞的,帖子整的真多,我也蛮喜欢这类套件的

点赞  2022-10-22 14:04
引用: led2015 发表于 2022-10-22 14:04 赞的,帖子整的真多,我也蛮喜欢这类套件的

看着简单,涉及的面还是不少,一个项目四个程序

点赞  2022-10-23 20:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复