加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

【RT-Thread作品秀】运动手表

2020/12/19
945
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
方块图(8)
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

【RT-Thread作品秀】运动手表

作者:何雄

概述

该作品是基于ART-PI硬件平台,外接OLED蜂鸣器,按键,X-NUCLEO-IKS01A3传感器套件完成实现的运动手表。

运动手表应该能够兼顾温湿度,气压信息,指南针以及步数等,能够实时监控环境的状态。

该运动手表实现功能如下:

  1. 时间日期星期显示;
  2. 网络时间获取;
  3. 天气获取并显示;
  4. 温度(HTS221),湿度(HTS221),气压(LPS2HH)信息的获取并显示;
  5. 指南针功能(LIS2MDL);
  6. 步数(LSM6DSO)监控;
  7. 闹钟功能,蜂鸣器闹钟;
  8. 设置功能,开启网络时间以及设置闹钟;
  9. OLED显示功能
  10. 板载按键
  11. 秒表

 

开发环境

硬件:STM32H750-RT-ART-PI, X-NUCLEO-IKS01A3传感器,OLED,蜂鸣器,板载按键

RT-Thread版本:4.0.3

开发工具及版本:RT-thread studio 2.0.0

RT-Thread使用情况概述

内核部分:线程管理(静态线程创建/删除),临界操作,时钟管理。

组件部分:FinSH控制台,虚拟文件系统,LwIP,SAL

软件包部分:cjson,netutils,easyflash,u8g2

其他:串口,pin,RTC,IIC

 

硬件框架

 

项目中使用到了STM32H750中的RTC实时时钟不在原理图中。

同时用到了ART-PI板载的wifi模块对天气获取以及网络时间的获取。

硬件部分比较简单主要是通过IIC控制OLED以及传感器数据的读取(读取4个传感器数据分别用作温湿度,气压以及磁场和运动检测),通过GPIO控制蜂鸣器。

按键用来切换查看界面以及设置信息,本项目只采用了一个按键,通过软件逻辑实现对4中按下状态的识别。

硬件线路连接:

蜂鸣器 - PA9

OLED SCL - PH13

OLED SDA - PH15

X-NUCLEO-IKS01A3传感器 SCL - PB0

X-NUCLEO-IKS01A3传感器 SDA - PB2

软件框架说明

整体软件实现了功能框架如下:

 

软件中主要包括了下面的功能:

  1. 按键状态的信号采集以及滤波功能,由于只有一个按键,所以将这一个,按键的按下状态做了不同的识别,分为了4种按下的状态可以用来处理所有的任务。
  2. OLED的显示功能
  1. 启动界面,会显示RT-Thread的logo以及项目logo。
  2. 时间显示界面:会显示时间,日期,星期,wifi连接状态,天气信息,在wifi没有连接的状态下,wifi图标会闪烁。
  3. 菜单列表:用来切换显示的界面,包含设置,秒表、步数、温度、湿度、气压、方位。通过短按按钮切换。
  4. 设置界面。可以设置是否开启网络时间更新以及设置闹钟。闹钟设置界面中可以设置闹钟是否启用以及设置闹钟时间。
  5. 秒表功能,在该界面下,秒表线程被创建,按下按钮切换到开启按钮下按下按钮可以开启计时,再次按下暂停计时,退出该界面自动删除线程。
  6. 步数查看。步数线程会一直运行,用于记录运动状态,使用LSM6DSO获取加速度数,由此进行步数算法检测步数。
  7. 温度、湿度、气压查看。获取传感器的数据进行处理之后显示在界面上。
  8. 指南针(方位)界面,可以查看当前面向的方向,使用了LIS2MDL磁力传感器以及LSM6DSO加速度传感器通过算法结合计算出指向方位,并通过图形显示以及问题提示的方式指向当前的方位(东、南、西、北、东南、东北、西南、西北)。
  9. 返回。返回时间显示界面。
  1. 闹钟功能

RTC获取的时间到了闹钟设置中设置的指定的时间之后将触发闹钟功能。在主界面下通过短按按钮关闭。

 

软件模块说明

一、按键功能介绍:

因为板载只有一个按键,我也没有外接按键资源,所以将这一个按键通过按键时间的长短分为了4种按下状态,通过松手判断按钮按下的时间长短。

按键线程中使用了软件按键滤波功能,滤波时间是50ms。

四种按键状态分别如下:

1 【短按】:按下时间小于等于500ms

2 【中长按】:按下时间大于500ms小于等于1.5s

3 【偏长按】:按下时间大于1.5s小于等于2.5s

4 【长按】:按下时间大于2.5s

按键线程在初始化的时候创建。

 

  • OLED显示功能

OLED的显示功能是主要的功能,这里对OLED的功能做详述说明。

  1. 开机动画。上电的时候会显示开机界面,首先显示RT-Thread的图标,之后显示运动手表的logo,显示完成之后自动进入主界面。
  2. 主界面就是时间显示界面,如下图:
  1. 最上边显示【星期 - 月份 日期】;
  2. 中间部分显示时间,如果网络连接之后会自动更新时间,可以在设置界面关闭自动更新,网络时间会更新到RTC中,时间直接读取自RTC。;
  3. 最下面一列显示wifi连接状态以及天气信息,在wifi没有连接的状况下会500ms闪烁一次,wifi连接之后,wifi图标不再闪烁,天气图标会自动循环显示。
  4. 天气包括晴天,雨天,多云,夜晚,晴转阴。
  5. 天气信息通过网络获取,获取网络天气的json信息,处理出信息,所以需要线连接网络才可以使用。
  6. 如果按下开关,最下一列中间会显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】,如下右图,没有开关按下的时候不显示。
  7. 长按按钮进入菜单选择界面
  8. 中长按按钮进入设置界面

                         

 

  1. 菜单界面
  1. 菜单界面显示【返回】【设置】【秒表】【步数】【温度】【湿度】【气压】【方位】,如下左图。
  2. 最上边显示左边菜单图标,右边显示退出图标。
  3. 短按按钮切换菜单在上述1)中的菜单列表中循环切换
  4. 中长按按钮进入选中的菜单功能中。
  5. 长按按钮退回主界面
  6. 按下按钮的时候屏幕最上面中间会显示按钮按下的状态【KEY1】【KEY2】【KEY3】【KEY4】,如下右图           
  • 设置

设置界面显示【是否启动网络时间】以及【闹钟设置】

  1. 网络时间后面的方框表示是否启用,实心方框表示启用,默认是启用的
  2. 短按按钮切换菜单
  3. 中长按按钮设置

选中【闹钟设置】,短按进入闹钟设置界面。

  1. 中长按切换选中菜单,分别有【启用闹钟】【小时设置】【分钟设置】
  2. 选中启用菜单,短按启用或者禁止,启用了闹钟之后会创建闹钟线程,运行闹钟功能,禁止闹钟之后会删除闹钟线程。
  3. 选中小时设置或者分钟该设置,短按时间会增加。
  4. 闹钟设置好了之后,到达指定时间会启动蜂鸣器报警,在主界面下短按按钮会关闭闹钟,到下一次到指定时间会重新报警。

 

四、秒表

当切换到秒表界面的时候会自动创新秒表线程,在退出秒表显示界面时会自动删除秒表任务,秒表任务100ms运行一次。

1、秒表显示界面,最上边左边显示秒表图标,右边显示退出图标

2、中间显示记录秒表时间

3、下面显示操作菜单

1) 第一个是开始按钮,短按启动计时,菜单编程停止,短按停止计时,如下左图。

2) 中间是清空按钮,短按按下清空计时数据

3) 右边是返回,短按返回菜单列表

4、中长按切换下列的菜单

5、长按退回主界面

6、按下按钮的时候屏幕最上面中间会显示按钮按下的状态【KEY1】【KEY2】【KEY3】【KEY4】,如下右图                                       

  • 步数

1、在菜单栏中,选中【步数】,中长按进入界面,显示当前步数。

2、步数是通过LSM6DSO加速度计和角速度计获取的数据计算出来的。通过采样加速度值,连续多次采集数据,通过算法计算各个轴的加速度值是否满足步数运动的条件,以此计算是否运动,步数检测的灵敏度也可以在代码中进行调节。

3、该界面中间显示当前步数信息。

4、该界面下最下边显示【清空】和【返回】菜单,通过短按进行切换

5、选中【清空】,中长按之后清空步数,选中【返回】,中长按退回菜单列表。

6、步数线程在启动时创建,会一直监控步数。

7、长按按钮退出

8、按下按钮会在上方中间显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】

 

  • 温度

1、在菜单列表中,选中【温度】,中长按进入界面,显示当前温度。

2、温度是通过HST221传感器,采集的,该传感器中存在标定数据,通过获取标定数据,然后利用一次线性方程公式对读取出来的数据进行处理,最后会的温度。

3、该界面中间显示温度数据,每1s刷新一次。

4、该界面下显示有【刷新】和【返回】,短按进行菜单切换。

5、选中【刷新】,中长按刷新当前温度

6、选中【返回】,中长按会返回菜单列表界面

7、温度数据在该界面下才会从传感器中读取

8、长按按钮退出

9、按下按钮会在上方中间显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】

    

 

  • 湿度

1、在菜单列表中,选中【湿度】,中长按进入界面,显示当前湿度百分比。

2、湿度是通过HST221传感器,采集的,该传感器中存在标定数据,通过获取标定数据,然后利用一次线性方程公式对读取出来的数据进行处理,最后会的湿度。

3、该界面中间显示湿度数据,每1s刷新一次。

4、该界面下显示有【刷新】和【返回】,短按进行菜单切换。

5、选中【刷新】,中长按刷新当前湿度

6、选中【返回】,中长按会返回菜单列表界面

7、湿度数据在该界面下才会从传感器中读取

8、长按按钮退出

9、按下按钮会在上方中间显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】

    

 

  • 气压

1、在菜单列表中,选中【气压】,中长按进入界面,显示当前气压值。

2、气压是通过LPS2HH传感器获取,每1s刷新一次

3、该界面中间显示气压数据。

4、该界面下显示有【刷新】和【返回】,短按进行菜单切换。

5、选中【刷新】,中长按刷新当前气压值

6、选中【返回】,中长按会返回菜单列表界面

7、气压数据在该界面下才会从传感器中读取

8、长按按钮退出

9、按下按钮会在上方中间显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】

 

    

 

  • 指南针

1、在菜单列表中,选中【方位】,中长按进入界面,指南针功能,创建指南针线程。

2、指南针数据是通过LIS2MDL传感器获取,LIS2MDL获取磁力数据,通过,用LSM6DSO的加速度数据进行补偿,通过公式计算出X轴与Y轴方向的磁力强度,进而计算当前传感器所指向的方向。

3、该界面通过图形显示指示的方向,中间的指针会指向当前的方位;

左下角的文字会显示指向的方位数据,分别有东、南、西、北、东南、东北、西南、西北。

4、长按按钮退出

  1. 按下按钮会在上方中间显示开关按下的状态【KEY1】【KEY2】【KEY3】【KEY4】

                                                        

  • RTC功能

RTC线程会在初始化的时候创建,最开始会显示设定的时间,这个时候会等待网络连接,在设置了获取网络时间的状态下,网络连接之后会获取网络时间并更新到RTC,网咯时间每24小时更新一次,如果关闭网络时间功能则不会更新。

 

演示效果

演示效果图:

 

演示视频

比赛感悟

本次比赛是第一次接触rt-thread,之前也仅仅是听说过,没有上手实践。这次比赛收获还是挺多的,首先就是了解了RT-thread这个操作系统。给我的感觉就是操作方便,组件丰富,应用灵活,可以使用该系统直接实现很多功能而不需要过多的编程,可以让实现应用的工程师将更多的精力放在功能的实现上面,通过使用该系统,极大的提升里的开发效率。

本次比赛我学到了rt-thread的基本的使用方式,线程创建删除暂停以及恢复,信号量,临界操作等功能的使用,同时也学习了一些组件的使用,像是网络组件,OLED显示组件等。

在作品完成过程中也遇到了一些困难,比如IIC调试总是报错,OLED显示问题,传感器数据获取不出来获取获取出来的数据不对,堆栈溢出之类的问题,通过各种调试手段以及串口打印错误信息一一排除,完成作品。

本次比赛也只是对RT-Thread有了一些基本的了解,接下来会抽时间对该系统做深入的学习,今我在使用过程中感觉惟一的不足就是内存消耗比较大,但是在使用便捷性,功能等方便优于我使用过的其他操作系统,希望RT-Thread越做越好。

  • 代码地址.txt
    描述:代码地址
  • RT-Thread大赛作品提交_运动手表.docx
    描述:作品描述文件

相关推荐

电子产业图谱

TA的热门作品