本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发
后续项目主要在下面该专栏中发布:
感兴趣的点个关注收藏一下吧!
电机驱动开发可以跳转:
手把手教你嵌入式国产化-实战项目-无刷电机驱动(1)-CSDN博客
BMS电源系统开发可以跳转:暂未放链接
本文文末有关于app inventor生成的软件,在使用中出现闪退和卡死问题解决的办法!
前言
各位大佬,好久不见了,今天是暑假开始的第一天,我为大家带来了GD32新的一期的实战项目,这个项目是承接在读博士师兄的委托,做的一款可穿戴式柔性传感器,师兄师姐做的是传感器的材料和设计部分,我主要是负责电子线路的设计和上位机的编写!
再次感谢师兄和学姐能够提供这次机会!
实物电路
本次PCB工程绘制采样嘉立创PFC制版工艺,不错不错十分强大!
这是刚刚拿到手的时候
这是焊接好了以后的样子
当然还有鼠鼠的照片
上位机
一个好的项目,怎么能少的了上位机呢!本节我们主要侧重讲解上位机部分,
接下来这部分是展示:
首先是给我提供的要求:
后续协商以后,要求更多的数据,于是就变成了这样:
上位机的具体实现
本次上位机使用app inventor图形化编程,其网站为:
能够极大程度上节约开发时间,但是我们实际使用工程中,主要是使用国内镜像网址,免费的是广州的服务器:MIT App Inventor (gzjkw.net)
但是因为其版本过旧的,并且功能少,我推荐是花9.99/30天去使用国内大佬自己维护的网址:
因为是其个人维护,所以我认为为了支持其开源和开发,9.99一个月对于我们实际有需要的人来说,更多的是一种支持!
这是本项目我所使用的上位机的开发界面,在app inventor中,对一个软件的开发主要分为界面布局和逻辑编写两个部分。
界面布局
这是布局部分,布局部分主要是对软件样式,以及逻辑功能中使用到的资源进行提前布局和预留,比如本项目中需要使用到BLE的低功耗蓝牙通讯,所以我在这里需要提前将该部分所需要的组件放入工程。
左边栏目中能够在通信连接中找到我们本次实验所需要的低功耗蓝牙。
至于为什么要选这个低功耗蓝牙?
那是因为,我们的上位机,是用于服务我们本项目所制作的硬件,是根据硬件去设计我们的上位机,在我们的板子上,我们搭载了一颗大夏龙雀科技的DX-BT24
蓝牙DX-BT24介绍
小体积,低功耗,多适合这个项目,就不用我继续说下去了吧!
模块数据吞吐量也满足本项目需求:
常用AT指令
首先我们需要知道该模块通讯时默认的波特率是9600,记得与之匹配的情况下再进一步进行操作AT指令。
首先是命令回复格
测试
查询版本
查询模块地址码(这部分在连接的时候需要根据地址码去广播连接)
查询和设置模块名称(设置完成后需要重启)
查询和设置模块波特率
软件重启(死机时候经常用)
我们主要将其作为主从机使用,所以主要是以上AT指令,其余用于广播端的指令,本次用不到就不多介绍,让我们将重点放在逻辑编写上!
逻辑层编写
初始化部分
首先是在屏幕初始化的时候,对基础按键和文本进行设置:
这里的初始化,只会执行一次,类似于嵌入式编写中的mian.c函数的while(1)前的初始化部分。
我们在这里要做的主要是对蓝牙连接/断开/取消等功能的提前使能和失能。
功能按键部分
这是主要是当三个功能按键被点击以后的逻辑,以完成蓝牙的搜索/连接/断开。
蓝牙连接部分
主要是涉及,蓝牙连接后去读取用户所选中的蓝牙地址,并且与该地址建立蓝牙连接的任务!
在建立稳定的连接通道后,就可以进行蓝牙数据的监听和接受了。
蓝牙通讯部分
蓝牙提供十分丰富的接口和资源,这里只贴出了冰山一角,感谢各位维护人员的辛苦工作,我们本次通讯,因为需要发送不同传感器的不同数据,所以我们需要自己定义一个数据帧格式,用于我们数据的传输,保证传输正确!
|----------------------------------|---------------|---------------|---------------|---------------|-------|-------|-------|
| 第一位 | 第二位 | 第三位 | 第四位 | 第五位 | 第六位 | 第七位 | 第八位 |
| 用于地址判断,告诉上位机,目前是哪个传感器的数据 | 所选中的数据第一位 | 所选中的数据第二位 | 所选中的数据第三位 | 所选中的数据第四位 | 通用数据位 | 通用状态位 | 末尾校验位 |
例如:
00 01 01 01 01 02 01 x
表示对地址为0的数据填写四个数据为0x01、0x01、0x01、0x01,和一位通用数据0x02和一位状态位:0x01
注意这里的数均是16进制!
上位机判断逻辑
在末尾的判断中根据状态位向框内填入正常(Good)或者警告(Warning)
注意:
来自大佬的指点:
错误示例:
1.使用定时器接收蓝牙
2.循环运行
软件运行过程中所出现的卡死和闪退,一半以上均是由以上导致,那么大家会问,既然不能用定时器,那怎么做呢!
这位大佬也贴出了具体的使用推荐: