建筑施工监测与安防系统
一、作品简介
土木建筑项目无论是在施工期间还是建成使用中,对要对建筑结构实时健康监测,比如:倾角变化、墙体下沉位移、支架压力、混凝土凝固期温度……
传统的监测方式,一般采用现场布线,人工定时巡逻,并手持仪器现场读取的方式,物联网技术使用严重不足。因而,本项目将利用LoRa组网和物联技术,实现无线式、自动化的建筑监测应用。
二、系统框图
本系统属于标准的物联网应用架构,由设备侧(包括:LoRa网关、采集终端、ESP32-S2-Kaluga-1上位机)+云平台(采用OneNet公共云)+应用侧(包括:Android APP和Winform应用)。
图2-1 有人LoRa网关工作模式
本次应用创意则是隶属项目的设备侧中USR220 LoRa网关上位机,利用Wi-Fi与网关连接。USR220作为AP,ESP32-S2-Kaluga-1接入后,与其开启TCP连接。
图2-2 系统结构框图
三、各部分功能说明
1、项目工程结构
本项目开发基于ESP32 IDF v4.4框架,基础案例为“lv_port_esp32”,并在原例基础上进行了代码扩充并添加了几个源文件,具体如下表说明。
表3-1 项目源文件说明表
文件名
|
类型
|
说明
|
../lv_port_esp32/main/adc.c
|
新建
|
Kaluga板ADC按键相关驱动和任务函数等。
|
../lv_port_esp32/main/led.c
|
新建
|
Kaluga板WS2812B LED驱动和任务函数等。
|
../lv_port_esp32/main/network.c
|
新建
|
Kaluga板Wi-Fi接入和OneNET MQTT接入等。
|
../lv_port_esp32/main/spisd.c
|
新建
|
Kaluga板外接SPI SD驱动和本地文件访问函数等。
|
../lv_port_esp32/main/tcp.c
|
新建
|
Kaluga板与USR220网关的TCP连接等。
|
../lv_port_esp32/main/time.c
|
新建
|
Kaluga板网络授时和定时器等。
|
../lv_port_esp32/main/utils.c
|
新建
|
系统相关工具函数,如:命令解析、类型转换等。
|
../lv_port_esp32/main/main.c
|
原例修改
|
系统入口、主任务和lvgl相关代码。
|
../lv_port_esp32/main/main.h
|
新建
|
系统相关头文件导入、全局量和函数声明。
|
项目实际使用的components,包括:Kaluga板官方案例提供的“board(板上管脚定义等)”、“led_strip(板上WS2812B LED驱动)”,以及基础案例提供的“lvgl(GUI库)”、“lvgl_esp32_drivers(LCD驱动等)”。
图3-1 项目实际使用的模块
2、系统启动
IDF项目程序从app_main()函数入口,本项目在其中调用了六个自建函数,依次完成系统启动。其中第六个调用函数aita_InitSysModule()建立了消息队列和四个系统任务。
四个系统任务分别是:
“button_task”任务负责每200ms检测一次ADC按键是否按下,如果按下则会向消息队列发送消息——不同按键会产生不同的ADC输入值即作为消息内容。
“led_task”任务用于消费消息,参考了Kaluga板的adc_button案例,通过对不同按键消息的解析控制LED点亮不同的颜色,项目又进行了扩展,收到不同消息后LCD还会显示不同的UI。
“guiTask”任务完成LVGL框架初始化,建立LCD的启动界面,并开始不断产生LVGL框架所需的节拍。
图3-2 系统启动流程图
“polling_task”任务会等待信号量“timesem”,这个信号量由系统启动时创建(aita_InitTime()中完成定时器初始化和信号量创建)的1s级定时器周期性产生,因此这个任务会每秒执行一次逻辑,将轮询参数(period*60)减一,一旦减到0后则开始一轮网关对终端的轮询采集——通过调用函数aita_PollingFunc()实现。
3、项目配置文件
项目共有两个配置文件:ids.txt以json格式存储网关和终端的ID值(终端还包括自定义的坐标值),settings.txt以文本行方式存储各项系统参数。为了保存终端属性,项目构建了结构体类型,除了ID值、坐标值,还有两个成员记录最近一次请求到的监测值和时间戳。
typedef struct endian_t {
char id[9]; //终端ID值,8位十六进制
char cor[8]; //终端在现场坐标值,自定义
char data[64]; //最近一次采集传感器数字,字符串格式
time_t dt; //最近一次采集时间戳
} ENDIAN_T;
图3-3 ids.txt的json样式
4、云端接入
每period分钟进行的轮询任务,将终端采集的传感器数据上传到OneNET云平台,为了后续应用端程序便于统计和分析,上传的数据流以“网关ID-终端ID-终端坐标”作为名称,上传数据点则是字符串格式,将终端采集的各项数值用中横线连接,如“1.36-3.14-1.35”表示压力1.36吨,X和Y倾角分别为3.14°和1.35° 。而且每隔1分钟,Kaluga还会向云端发送心跳包——内容就是生成心跳包的时间戳,以保持在线状态。
图3-4 OneNET数据流页面截图
5、LCD显示UI
Kaluga板本身带有LCD,所以项目也设计了一些用户界面。板上按键分别控制显示不同的界面:K1--主菜单(label文本)、K2--日历(calendar组件)、K3--网关和终点ID值查看(label文本)、K4--表格显示单终端的最新采集值(点击K4可以切换表格,每个表格显示一个终端)。
图3-5 K1--显示菜单界面
图3-6 K2--显示日历界面
图3-7 K3--显示ID信息
图3-8 K4--连续点击K4可以展示不同的终端信息表格
四、作品源码
作品源码提交到EEWORLD下载区,链接如下:
https://download.eeworld.com.cn/detail/sonicfirr/625144
五、作品功能演示视频
2022得捷电子创新设计大赛参数项目“建筑施工监测与安防系统”的最终作品功能演示视频发布于EEWORLD “大学堂”,链接如下:
https://training.eeworld.com.cn/video/34574
六、项目总结
本项目开发过程也是作者的一次丰富的学习例程。通过项目开发,作者接触到了ESP32 IDF框架,初步了解了ESP32的官方SDK,研究了SNTP机制和MQTT协议,学习了lvgl图形库,掌握了ESP32 IDF主要编程接口的使用。
当然,也受限于对板子的熟悉过程占据了不少开发时间,同时在活动期间还因为疫情原因,作者无法将作品部署到现场进一步测试,项目开发还有一些不尽人意处,比如:Kaluga板载摄像头的使用率不足等。
【建筑施工监测与安防系统】EEWORLD论坛帖子
一、物料开箱与资料链接整理
https://bbs.eeworld.com.cn/thread-1209961-1-1.html
二、ESP32-S2-Kaluga-1开发环境ESP-IDF搭建
https://bbs.eeworld.com.cn/thread-1210470-1-1.html
三、ESP32-S2-Kaluga-1官方案例使用体验
https://bbs.eeworld.com.cn/thread-1210766-1-1.html
四、ESP32-S2-Kaluga-1运行LVGL
https://bbs.eeworld.com.cn/thread-1212845-1-1.html
五、lv_port_esp32项目整合Kaluga组件
https://bbs.eeworld.com.cn/thread-1214203-1-1.html
六、Kaluga的adc_button案例结合lvgl
https://bbs.eeworld.com.cn/thread-1214394-1-1.html
七、Kaluga测试TCP Client
https://bbs.eeworld.com.cn/thread-1215302-1-1.html
八、Kaluga测试SD_SPI
https://bbs.eeworld.com.cn/thread-1216900-1-1.html
九、Kaluga从SD卡加载项目配置
https://bbs.eeworld.com.cn/thread-1217727-1-1.html
十、Kaluga网络授时和定时器
https://bbs.eeworld.com.cn/thread-1218924-1-1.html
十一、Kaluga MQTT连接OneNET
https://bbs.eeworld.com.cn/thread-1219027-1-1.html
十二、Kaluga解析SD卡文件中记录的参数接入OneNET
https://bbs.eeworld.com.cn/thread-1219133-1-1.html
十三、接收OneNET命令重设置本地参数
https://bbs.eeworld.com.cn/thread-1219961-1-1.html
十四、项目核心功能实现
https://bbs.eeworld.com.cn/thread-1220101-1-1.html
七、其他
本次项目使用了ESP32-S2-Kaluga-1开发板,虽然板子带有摄像头,但是因为主控ESP32-S2是单核处理器,而且内置SRAM空间不足,造成开发了核心功能后,无法再调用摄像头进行拍照——因为照片缓存已经超过了SRAM上限。这样在最初报名时的进出人员拍照甚至进行人脸识别等功能无法完成了,算是本次大赛作品的一个遗憾吧。
【2022得捷电子创新设计大赛】建筑施工监测与安防系统 作品文档_sonicfirr.doc
(36.87 MB, 下载次数: 180)
|