GD32实战项目-app inventor-BLE低功耗DX-BT24蓝牙上位机制作-文末有关于生成的软件闪退或者卡死问题的解决

 本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

       后续项目主要在下面该专栏中发布:

手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客

       感兴趣的点个关注收藏一下吧!

       电机驱动开发可以跳转:

手把手教你嵌入式国产化-实战项目-无刷电机驱动(1)-CSDN博客

       BMS电源系统开发可以跳转:暂未放链接

本文文末有关于app inventor生成的软件,在使用中出现闪退和卡死问题解决的办法!

前言

各位大佬,好久不见了,今天是暑假开始的第一天,我为大家带来了GD32新的一期的实战项目,这个项目是承接在读博士师兄的委托,做的一款可穿戴式柔性传感器,师兄师姐做的是传感器的材料和设计部分,我主要是负责电子线路的设计和上位机的编写!

再次感谢师兄和学姐能够提供这次机会!

实物电路

本次PCB工程绘制采样嘉立创PFC制版工艺,不错不错十分强大!

这是刚刚拿到手的时候

 

这是焊接好了以后的样子


 

当然还有鼠鼠的照片

上位机

一个好的项目,怎么能少的了上位机呢!本节我们主要侧重讲解上位机部分,

接下来这部分是展示:

首先是给我提供的要求:

后续协商以后,要求更多的数据,于是就变成了这样:

上位机的具体实现

本次上位机使用app inventor图形化编程,其网站为:

https://appinventor.mit.edu/

能够极大程度上节约开发时间,但是我们实际使用工程中,主要是使用国内镜像网址,免费的是广州的服务器:MIT App Inventor (gzjkw.net)

但是因为其版本过旧的,并且功能少,我推荐是花9.99/30天去使用国内大佬自己维护的网址:

WxBit 图形化编程

因为是其个人维护,所以我认为为了支持其开源和开发,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.循环运行

软件运行过程中所出现的卡死和闪退,一半以上均是由以上导致,那么大家会问,既然不能用定时器,那怎么做呢!

这位大佬也贴出了具体的使用推荐:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix 配置企业微信告警

1、申请一个企业微信, 官网链接 2、群内申请一个机器人 下载电脑版企业微信,登录后,在要接收群消息的群里,点击右上角三个点,添加机器人后,保存机器人的webhook地址 上传应用logo,填写应用名称…

论文学习——基于区域多向信息融合的动态多目标优化引导预测策略

论文题目:Guided prediction strategy based on regional multi-directional information fusion for dynamic multi-objective optimization 基于区域多向信息融合的动态多目标优化引导预测策略(Jinyu Feng a, Debao Chen b,c,d,∗, Feng Zou b,c, Fan…

微机原理 程序设计题

数字0~9、A~Z、a~z DATA SEGMENTINFOR1 DB 0AH, 0DH, "Please Press Any Key to input a letter :$"INFOR2 DB 0AH, 0DH, "You Input a Lowercase Letter! $"INFOR3 DB 0AH, 0DH, "You Input a Uppercase Letter! $"INFOR4 DB 0AH, 0DH, "…

100个名人的家,娄艺潇的家:大美国色,浪漫栖居

冠珠瓷砖「100个名人的家」,大美筑家,中国冠珠2024大美筑家之旅,冠珠瓷砖「100个名人的家」,探索中国人的烟火浪漫与美学追求。从中国家文化、人文居所、人生底蕴层面,发掘大美人居的故事,以中国瓷砖、空间…

ll命令在ubuntu下不能使用的解决方案

ll命令在ubuntu下不能使用的解决方案 问题: ll命令在ubuntu下不能使用, 在Ubuntu终端里执行ll,提示:command not found 解决方案: 打开当前用户目录下的.bashrc文件 找到下面的内容,将前面的“#”去掉 #alias llls -alF 然…

《vue3》reactivity API(vue3的$set呢?)

在Vue2中&#xff0c;修改某一些数据&#xff0c;视图是不能及时重新渲染的。 比如数组 <div> {{ myHobbies }} </div>data: () > ({myHobbies: [篮球, 羽毛球, 桌球] }); mounted () {this.myHobbies[1] sing; // 视图层并没有改变 }因此&#xff0c;Vue2就提…

代码随想录算法训练营第四十三天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、 123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 文档讲解&#xff1a;代码随想录 状态&#xff1a;做出来了 贪心思路&#xff1a; 因为股票就买卖一次&#xff0c;那么贪心的想法很自然就是取最左最小值&#xff0c;取最右最大值&#xff0c;那么得到的…

Nuxt3 的生命周期和钩子函数(十)

title: Nuxt3 的生命周期和钩子函数&#xff08;十&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt3框架中的五个webpack钩子函数&#xff1a;webpack:configResolved用于在webpack配置解析后读取和修改配置…

【C语言】break 关键字

当在C语言中使用break关键字时&#xff0c;它通常用于两种主要情况&#xff1a;在循环中和在switch语句中。让我们详细看看每种情况下的用法和作用。 在循环中的使用&#xff1a; 在循环中&#xff0c;break语句的作用是立即终止当前所在的循环&#xff0c;然后跳出循环体执行…

UE插件与云渲染:10个提升效率的选择

Unreal Engine&#xff08;虚幻引擎&#xff09;的插件生态丰富多样&#xff0c;从提升视觉效果到优化工作流程&#xff0c;为开发者提供了无限扩展的可能。本文推荐10款备受欢迎的插件&#xff0c;助你激发创意&#xff0c;提升开发效率. 一、地牢建筑师&#xff1a;程序化关…

EDUSRC-我与xx职院的爱恨情仇(教育漏洞挖掘)

一、人生中的第一个漏洞 2024.1月的时候&#xff0c;当时看朋友挖到了一个名校的漏洞&#xff0c;特别羡慕&#xff0c;我也想挖&#xff0c;但是当时什么都不会&#xff0c;就只好在网上搜edusrc挖掘思路、edusrc挖掘教程等等&#xff0c;边学边挖&#xff0c;边挖边学。 一开…

【数据结构】04.单链表

一、链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 节点的组成主要有两个部分&#xff1a;当前节点要保存的数据和保存下⼀个节点的地址&#xff08;指针变量&#…

nginx重定向

nginx的重定向 location 匹配 location 匹配的就是后面的URI /wordpress location 匹配的分类和优先级** 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#xff0c; 以什么开头 -区分大小写的匹配 ~*不区分大小写 …

数字化精益生产系统--MES制造管理系统

MES制造管理系统&#xff08;Manufacturing Execution System&#xff09;是现代制造企业中至关重要的管理工具&#xff0c;它集合了软件与多种硬件设备&#xff0c;形成了一个综合智能化系统&#xff0c;对从原材料上线到成品入库的整个生产过程进行实时数据采集、控制和监控。…

java 基础之 反射技术_java 程序src阶段 class对象阶段 run阶段3个阶段

System.out.println(in); } publicClass[] aa1(String name, int[] password){ returnnew Class[]{String.class} ; } privatestatic void aa1(int num){ System.out.println(num“静态方法”); } public static void main(String[] args){ System.out.println(“main”…

香港即将“放松”加密货币监管!加密牌照制度备受批评!全球主力军无法进入香港市场?动摇了香港Web3的信心!

2024年7月3日&#xff0c;香港金融服务及库务局局长许正宇在立法会会议上表示&#xff0c;香港金融管理局(HKMA)和证券及期货事务监察委员会(SFC)将根据市场发展情况&#xff0c;适时检讨虚拟资产相关活动的监管要求。 这一表态引发了人们对香港加密货币监管框架可能进行调整的…

超详细的 C++中的封装继承和多态的知识总结<1.封装与继承>

引言 小伙伴们都知道C面向对象难&#xff0c;可是大家都知道&#xff0c;这个才是C和C的真正区别的地方&#xff0c;也是C深受所有大厂喜爱的原因&#xff0c;它的原理更接近底层&#xff0c;它的逻辑更好&#xff0c;但是学习难度高&#xff0c;大家一定要坚持下来呀&#xff…

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…

mac显示隐藏的.git文件

打开终端 输入命令 defaults write com.apple.finder AppleShowAllFiles YES killall Finder

Python代码设置Excel工作表背景色或背景图

Excel是工作中数据处理和分析数据的重要工具。面对海量的数据和复杂的表格&#xff0c;如何提高工作效率、减少视觉疲劳并提升数据的可读性是不容忽视的问题。而给工作表设置合适的背景是表格优化的一个有效方式。为Excel工作表设置背景色或背景图不仅能够美化工作表&#xff0…