2237|17

280

帖子

7

TA的资源

一粒金砂(高级)

楼主
 

【智能水杯托】06-作品提交 [复制链接]

 
 

智能水杯托

作者:sipower        

一、作品简介(100-200字)
(设计名称、作品照片、功能介绍等。)

本次作品设计了一款智能水杯托,能检测水杯使用状态,能够提醒用户及时喝水。通过连接阿里云平台,实现时钟自动校准。还可以在云终端对水杯托进行参数设置。本次作品主要工作,其一是设计一个漂亮的界面,用起来赏心悦目。另一个就是对接阿里云,实现云享云用,智慧连接。

下图是最终的实物作品照片。

 

图1、作品照片

 

二、系统框图(图文结合)
(系统软硬件实现框图)

硬件采用STM32L496G-DISCO评估板做主控,使用一个反射型光电传感器RPR-220来探测杯子是否出现在杯托上。通过ESP8266模块连接阿里云,并获取网络时间,同步水杯状态,设置参数等操作。硬件框图如下。

 

图2、硬件框图

软件采用FreeRTOS系统作为基础软件平台,使用TouchGFX设计界面。系统状态机如下图。

 

图3、状态机

待机状态下,显示一个模拟时钟。如果超过一定时间用户未拿起水杯,进入下一个提醒状态。如果未超时就喝水,进入鼓励状态。

提醒状态下,显示文本“该喝水啦!”。如果用户拿起水杯,进入鼓励状态。

鼓励状态下,显示文本“棒棒哒!”。如果用户放下水杯,进入待机状态。如果超过一定时间用户未放下水杯,进入接水状态。

接水状态下,显示文本“接水去了吗?”。如果用户放下水杯,进入待机状态。

三、各部分功能说明(图文结合)

(各部分实现的功能说明及讲解,以图文结合的展示。)

1、UI界面实现

首先介绍一下我使用的开发环境:

TouchGFX软件版本:4.20.0

IAR EWARM软件版本:9.30.1

STM32CubeMX软件版本:6.6.1

STM32CubeProgrammer软件版本:2.11.0

开发板:STM32L496G-DISCO

桌面系统:Window11

下面介绍使用TouchGFX 4.20.0 Designer设计界面。首先基于STM32L496G-DISCO创建一个空工程,如下图。

 

图4、创建工程

添加背景、控件等等,如下图是添加模拟时钟。

 

图5、添加控件

经过一番折腾尝试,终于把界面配置好,如下图。由于不熟练,还专门增加一个屏幕,用来测试各个控件的用法。

 

图6、界面设计

我先在测试屏幕把用到的各个元素进行了一番尝试,并确认代码能实现,然后才向正式的主屏幕移植。如下图是测试屏幕的样子。

 

图7、测试屏幕

这里特别说明一下,为了模拟水杯拿起和放下,我在主界面设置了两个透明按钮来实现状态的改变。下图是其中一个按钮的说明。为了方便按到,我把上半个屏幕作为可触控区域,然后按钮放在最上层,并设置透明。在最右边添加交互,调用一个虚函数。

 

图8、透明按钮

下图是透明按钮交互虚函数实现的具体介绍,注意有些代码是自动生成的,有些是我添加的。

 

图9、虚函数实现

然后就是在<MainView.cpp>这个文件中添加代码,实现我设计的状态机。具体的代码参见附件。

通过使用TouchGFX的仿真功能进行测试除错,确定没问题了就可以一键下载到开发板,在硬件上直接测试了。调试好的界面参见视频展示。

以上,基础的界面就设计完了。整体看起来可能很简单,但是对于从零开始学习TouchGFX的人,还是要查阅多个例程,构思哪些功能能够用的上,用何种方式配置,以什么形式展示。但是一旦入了门,这个后续用起来就简单了。

2、杯子位置检测方案

我使用一个反射型光电传感器RPR-220来探测杯子是否出现在杯托上。传感器原理和实物如下图。

 

图10、光电传感器

检测杯子在不在位置,其实还可以用机械式压触开关,用起来更简单。之所以最后用光电式的,是因为光电式的传感器不接触,结构简单,可靠性高。这个传感器的电路设计如下图。

 

图11、传感器电路图

这种传感器大多数用于检测黑色标记,界限比较分明,我这拿来检测水杯,受不同水杯表面颜色影响,输出的电压信号并不一致,因此我设计了一个动态检测的方法,就是分别检测发光管打开和关闭时接收管的输出电压,然后做差值,如果没有杯子,这个差值会很小,反之则大很多,这样检测结果就比较准了。

传感器与STM32L496G-DISCO开发板的连接,采用了预留的Arduino uno接口,使用一个ADC口采集电压,一个IO口控制发光管开关。具体使用的资源如下图。

 

图12、Arduino uno接口

我找了一个裸板PCB,飞线焊上光电传感器,如下图。

 

图13、飞线板

最终连到STM32L496G-DISCO开发板的效果如下图。

 

图14、连好电路板

预计使用场景是下图这样的。

 

图15、使用场景

连接好硬件电路,接下来就是调试程序。先在STM32CubeMX里面配置ADC和IO口输出。下图是ADC配置,使用DMA转存采样数据,CPU可以不用介入任何操作,效率比较高。

 

图16、ADC配置

下图是IO配置,默认高电平,上拉,中速。

 

图17、IO配置

这里特别强调一下不要忘了配置参考源,我就是忘了配置,然而STM32CubeMX也没有提示,导致搞了好长时间才找到原因。如下图。

 

图18、参考源配置

接下来生成代码,在编辑器里面添加具体实现。如下代码实现了水杯检测,并发送一个消息给UI部分。硬件获得参数传递给UI,按照TouchGFX规定的MVP结构传送,具体传递过程如下图。

 

图19、参数传递

所有文件修改好后,编译,下载,运行,就可以了看到最终的运行结果,实物作品的使用过程见视频展示。

  1. 连接阿里云同步时间和数据

开发板通过ESP8266模块连接阿里云,并获取网络时间,同步水杯状态,设置参数等操作。我用的ESP8266模块是安信可出品的ESP-12S,如下图。

 

图20、WiFi模块

由于购买比较早,里面的固件都不支持MQTT协议,所以第一件事是先升级WiFi固件。下面链接是安信可官方页面,所有需要用到的软件包都能在这个页面找到。

https://docs.ai-thinker.com/esp8266

具体的升级教程网上很多,不再细说,此处列举一个。

https://blog.csdn.net/jdhuzb/article/details/119678009

开发板和WiFi模块硬件连接,我采用的UART1口,对应板上CN3的PMOD#2和PMOD#3引脚,如下图所示。

 

图21、串口接口

CN3接口可以直接提供3.3V电源,用4根线引出到WiFi模块即可,连接好的实验板如下图。

 

图22、连接好的实验板

硬件连接好后,开始设计软件。先用STM32CubeMX配置串口,如下图。由于要接收不定长的字符串帧数据,采用串口空闲中断+串口DMA中断实现,所以需要设置DMA通道。

 

图23、配置串口

串口的基本配置STM32CubeMX都会自动生成好,比较重要的是需要自己编写空闲中断回调函数,这个官方HAL库没有提供。我编写了UART1和UART2透传的回调函数,基本实现DMA全自动收发,只占用CPU非常少的资源。

其中要注意两点:其一,DMA缓冲buffer要足够长,至少要大于阿里云传回的最大报文长度。其二,开启下次中断前要清除ORE标记,防止在中断处理关闭DMA期间有数据进来,造成ORE错误。

接下来是在阿里云平台建立产品和设备,这个网上教程太多,这里不再细说,发个如下链接供参考。

https://blog.csdn.net/u014421313/article/details/125412417

下图是我在阿里云上创建的设备,带了3个属性,分别是:水杯状态,水杯在位置超时时间,水杯离开位置超时时间。

 

图24、阿里云上创建的设备

接下来是编写单片机的连网程序。网上各种例程较多,可能是考虑各种异常情况,大部分弄得都比较复杂,看起来头大。我这则是采用最简单粗暴的方式连接阿里云,代码结构也非常简单,适合新手练习使用。我先是在头文件《esp_mqtt.h》里面把联网信息都定义好,考虑这个只是演示项目,不需要灵活配置,就没有拆分成灵活的。

然后在《esp_mqtt.c》里面,直接用串口一帧帧发送,每帧之间留一点延时,等阿里云返回数据。

这里重点说一下数据解析回调函数。这个里面分两部分,第一部分是将接收的时间字符串里面的时分秒三个参数提取出来,用于发给模拟时钟校时。这个比较简单,找准字符串位置,直接用atoi()函数将字符串转为int数字就行了。第二部分是对收到阿里云的设置报文进行解析。网上大部分例程对于这种参数少,内容简单的json字符串,都是用字符串函数一点点提取,我觉这样比较麻烦,所以此处我直接调用了cJSON库进行解析,有种牛刀宰鸡的爽快!最终将结果都从调试串口打印出来。经过反复调试,终于实现了阿里云数据上报和订阅,具体展示参见视频。

然后是把更新的时间数据,订阅接收的设置数据同步给TouchGFX界面。最后再做一个web应用实现云端设置。

编写这部分程序时,我最开始计划用osMessageCreate创建2个指向结构体的消息队列,分别传递从阿里云获取的时间数据和设置数据给TouchGFX部分代码,然而经过反复查资料,发现由于STM32CubeMX做了从新封装,这个默认的osMessageCreate只能创建指向int32型的队列,指向指针的话还得单独分配内存空间,相当麻烦,在这我就偷个懒,只创建一个消息队列传递标志位,指示当前更新的是什么信息,而把时间数据和设置数据对应的结构体设置成全局变量,直接在TouchGFX部分代码调用。由于标志位传递遵循MVP方式,实际用起来也没什么问题。

最后设计了一个WEB端应用,用来指示和设置水杯托的参数,具体应用界面如下图。

 

图25、WEB端应用

 

四、作品源码

代码见如下链接:

https://download.eeworld.com.cn/detail/sipower/625171

五、作品功能演示视频

(视频简介+链接)

视频见如下链接:

  1. 设计UI,实现状态机。

https://www.bilibili.com/video/BV1WD4y1y7nF?share_source=copy_web

2、智能水杯托软硬件调试成功。

https://www.bilibili.com/video/BV1kg411Y7ts?share_source=copy_web

3、智能水杯托连接阿里云。

https://www.bilibili.com/video/BV1wD4y1C727?share_source=copy_web

4、智能水杯托之阿里云显示和设置。

https://www.bilibili.com/video/BV1QD4y1k72e?share_source=copy_web

 

六、项目总结

(项目文字总结+帖子分享链接汇总)

通过这次作品设计,我基本掌握了TouchGFX的开发流程,熟悉了在FreeRTOS系统上,整合TouchGFX和硬件接口的操作。通过增加WiFi模块,实现了与阿里云的通讯和物联网操作。为以后的工作增添了新的技能。

总之感谢得捷电子和EEWORLD提供的这次创作机会,你们为广大工程师学习、研究提供了经济和技术支持,对整个行业都有积极的作用,希望两家公司越办越好。

帖子链接如下:

1、开箱分享:

https://bbs.eeworld.com.cn/thread-1206983-1-1.html

2、基于STM32L496G-DISCO的TouchGFX开发环境搭建

https://bbs.eeworld.com.cn/thread-1220158-1-1.html

3、基于TouchGFX的UI设计

https://bbs.eeworld.com.cn/thread-1220165-1-1.html

4、为TouchGFX界面添加硬件支持

https://bbs.eeworld.com.cn/thread-1220212-1-1.html

5、连接阿里云同步时间和数据

https://bbs.eeworld.com.cn/thread-1220875-1-1.html

 

七、其他

无。 智能水杯托_作品提交.doc (6.83 MB, 下载次数: 3)

最新回复

TouchGFX这个一直想接触一下   详情 回复 发表于 2022-10-21 12:04
点赞 关注
 
 

回复
举报

6060

帖子

6

TA的资源

版主

沙发
 

预祝楼主获奖,这次大家做得都挺不错的,我是半道崩

点评

谢谢,同祝  详情 回复 发表于 2022-10-16 14:29
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 

预祝楼主获奖,这次大家做得都挺不错的,我估计是交不了作业了。

点评

还有一周呢,加油吧少年  详情 回复 发表于 2022-10-16 14:30
 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

4
 
本帖最后由 sipower 于 2022-10-16 14:34 编辑
秦天qintian0303 发表于 2022-10-16 08:57 预祝楼主获奖,这次大家做得都挺不错的,我是半道崩

谢谢!你选的STM32F7508-DK这个开发板比我选的这个资源多很多,应该更好弄,别崩啊。

 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

5
 
lugl4313820 发表于 2022-10-16 09:02 预祝楼主获奖,这次大家做得都挺不错的,我估计是交不了作业了。

还有一周呢,加油吧少年

点评

费劲,硬件是做了,不过软件还是比较费事的,疫情刚结束,每天上班都没有周六日了,累成狗了,哪里还有精力,还得准备事业编面试,感觉我是哪吒都分不出来尽力,还有两个测评,测评当个调味剂还可以,一门心思弄这个  详情 回复 发表于 2022-10-16 15:54
 
 
 

回复

6060

帖子

6

TA的资源

版主

6
 
sipower 发表于 2022-10-16 14:30 还有一周呢,加油吧少年

费劲,硬件是做了,不过软件还是比较费事的,疫情刚结束,每天上班都没有周六日了,累成狗了,哪里还有精力,还得准备事业编面试,感觉我是哪吒都分不出来尽力,还有两个测评,测评当个调味剂还可以,一门心思弄这个感觉精力不够

点评

你可以考虑试一下TouchGFX,这个对4.3吋屏的开发板支持最好,好多例程,你只需简单改改就能用  详情 回复 发表于 2022-10-17 10:30
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

7
 
秦天qintian0303 发表于 2022-10-16 15:54 费劲,硬件是做了,不过软件还是比较费事的,疫情刚结束,每天上班都没有周六日了,累成狗了,哪里还有精 ...

你可以考虑试一下TouchGFX,这个对4.3吋屏的开发板支持最好,好多例程,你只需简单改改就能用

点评

用的就是TouchGFX,不过还得自己设计界面,一样挺麻烦的,而且自己生成的初始程序只要运行RTOS就报错,提示内存不足  详情 回复 发表于 2022-10-17 10:57
 
 
 

回复

6060

帖子

6

TA的资源

版主

8
 
sipower 发表于 2022-10-17 10:30 你可以考虑试一下TouchGFX,这个对4.3吋屏的开发板支持最好,好多例程,你只需简单改改就能用

用的就是TouchGFX,不过还得自己设计界面,一样挺麻烦的,而且自己生成的初始程序只要运行RTOS就报错,提示内存不足

点评

UI设计说白了就是框架+参数,美工就是参数,不要美工就行,简单的框架界面就行  详情 回复 发表于 2022-10-17 11:53
TouchGFX有个一键下载到开发板的选项,你先试试这个能不能用,如果能用,就是你IDE配置的问题  详情 回复 发表于 2022-10-17 11:02
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

9
 
秦天qintian0303 发表于 2022-10-17 10:57 用的就是TouchGFX,不过还得自己设计界面,一样挺麻烦的,而且自己生成的初始程序只要运行RTOS就报错,提 ...

TouchGFX有个一键下载到开发板的选项,你先试试这个能不能用,如果能用,就是你IDE配置的问题

点评

感觉icf有问题,开发板上扩展的Flash应该是可以用上的,看GFX的教程就是直接换了一个icf文件,不过这个东西咱们也不敢乱改啊,不用RTOS系统就能编译成功,先这么对付用  详情 回复 发表于 2022-10-17 11:56
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

10
 
秦天qintian0303 发表于 2022-10-17 10:57 用的就是TouchGFX,不过还得自己设计界面,一样挺麻烦的,而且自己生成的初始程序只要运行RTOS就报错,提 ...

UI设计说白了就是框架+参数,美工就是参数,不要美工就行,简单的框架界面就行

点评

里边都是有普通的界面设计,还是得系统的学一下,不过根据教程自己学收效比较慢  详情 回复 发表于 2022-10-17 11:57
 
 
 

回复

6060

帖子

6

TA的资源

版主

11
 
sipower 发表于 2022-10-17 11:02 TouchGFX有个一键下载到开发板的选项,你先试试这个能不能用,如果能用,就是你IDE配置的问题

感觉icf有问题,开发板上扩展的Flash应该是可以用上的,看GFX的教程就是直接换了一个icf文件,不过这个东西咱们也不敢乱改啊,不用RTOS系统就能编译成功,先这么对付用

点评

你用IAR的话,下载最新版的9.30.1,然后用cubeMX最新的例程库,对于stm32f7芯片,基本上都能找到使用外部flash的需要的各种文件。我用的stm32l496的文件就没有,开始想自己做,发现比较麻烦,时间来不及,就没做,我  详情 回复 发表于 2022-10-18 08:58
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

6060

帖子

6

TA的资源

版主

12
 
huihuihaha 发表于 2022-10-17 11:53 UI设计说白了就是框架+参数,美工就是参数,不要美工就行,简单的框架界面就行

里边都是有普通的界面设计,还是得系统的学一下,不过根据教程自己学收效比较慢

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

13
 
秦天qintian0303 发表于 2022-10-17 11:56 感觉icf有问题,开发板上扩展的Flash应该是可以用上的,看GFX的教程就是直接换了一个icf文件,不过这个东 ...

你用IAR的话,下载最新版的9.30.1,然后用cubeMX最新的例程库,对于stm32f7芯片,基本上都能找到使用外部flash的需要的各种文件。我用的stm32l496的文件就没有,开始想自己做,发现比较麻烦,时间来不及,就没做,我尽量压缩代码,在片上flash运行的。

点评

我用的是IAR8.30,生成的工程正常打开没什么问题,这个应该不是开发环境的问题,还是工程的配置问题或者适配问题  详情 回复 发表于 2022-10-18 16:31
 
 
 

回复

6060

帖子

6

TA的资源

版主

14
 
sipower 发表于 2022-10-18 08:58 你用IAR的话,下载最新版的9.30.1,然后用cubeMX最新的例程库,对于stm32f7芯片,基本上都能找到使用外部 ...

我用的是IAR8.30,生成的工程正常打开没什么问题,这个应该不是开发环境的问题,还是工程的配置问题或者适配问题

点评

你试一下新版的9.30.1吧,体验差异不是一般的大  详情 回复 发表于 2022-10-19 09:28
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

15
 
秦天qintian0303 发表于 2022-10-18 16:31 我用的是IAR8.30,生成的工程正常打开没什么问题,这个应该不是开发环境的问题,还是工程的配置问题或者 ...

你试一下新版的9.30.1吧,体验差异不是一般的大

点评

我试试  详情 回复 发表于 2022-10-19 09:47
 
 
 

回复

6060

帖子

6

TA的资源

版主

16
 
sipower 发表于 2022-10-19 09:28 你试一下新版的9.30.1吧,体验差异不是一般的大

我试试

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

409

帖子

7

TA的资源

纯净的硅(初级)

17
 

TouchGFX这个一直想接触一下

点评

试试吧,很好用  详情 回复 发表于 2022-10-22 20:38
 
 
 

回复

280

帖子

7

TA的资源

一粒金砂(高级)

18
 
lansebuluo 发表于 2022-10-21 12:04 TouchGFX这个一直想接触一下

试试吧,很好用

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表