• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【RT-Thread作品秀】運(yùn)動(dòng)手表

2020/12/19
673
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

代碼地址.txt

共2個(gè)文件

【RT-Thread作品秀】運(yùn)動(dòng)手表

作者:何雄

概述

該作品是基于ART-PI硬件平臺(tái),外接OLED,蜂鳴器,按鍵,X-NUCLEO-IKS01A3傳感器套件完成實(shí)現(xiàn)的運(yùn)動(dòng)手表。

運(yùn)動(dòng)手表應(yīng)該能夠兼顧溫濕度,氣壓信息,指南針以及步數(shù)等,能夠?qū)崟r(shí)監(jiān)控環(huán)境的狀態(tài)。

該運(yùn)動(dòng)手表實(shí)現(xiàn)功能如下:

  1. 時(shí)間日期星期顯示;
  2. 網(wǎng)絡(luò)時(shí)間獲??;
  3. 天氣獲取并顯示;
  4. 溫度(HTS221),濕度(HTS221),氣壓(LPS2HH)信息的獲取并顯示;
  5. 指南針功能(LIS2MDL);
  6. 步數(shù)(LSM6DSO)監(jiān)控;
  7. 鬧鐘功能,蜂鳴器鬧鐘;
  8. 設(shè)置功能,開(kāi)啟網(wǎng)絡(luò)時(shí)間以及設(shè)置鬧鐘;
  9. OLED顯示功能
  10. 板載按鍵
  11. 秒表

 

開(kāi)發(fā)環(huán)境

硬件:STM32H750-RT-ART-PI, X-NUCLEO-IKS01A3傳感器,OLED,蜂鳴器,板載按鍵

RT-Thread版本:4.0.3

開(kāi)發(fā)工具及版本:RT-thread studio 2.0.0

RT-Thread使用情況概述

內(nèi)核部分:線(xiàn)程管理(靜態(tài)線(xiàn)程創(chuàng)建/刪除),臨界操作,時(shí)鐘管理。

組件部分:FinSH控制臺(tái),虛擬文件系統(tǒng),LwIP,SAL

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

其他:串口,pin,RTC,IIC

 

硬件框架

 

項(xiàng)目中使用到了STM32H750中的RTC實(shí)時(shí)時(shí)鐘不在原理圖中。

同時(shí)用到了ART-PI板載的wifi模塊對(duì)天氣獲取以及網(wǎng)絡(luò)時(shí)間的獲取。

硬件部分比較簡(jiǎn)單主要是通過(guò)IIC控制OLED以及傳感器數(shù)據(jù)的讀取(讀取4個(gè)傳感器數(shù)據(jù)分別用作溫濕度,氣壓以及磁場(chǎng)和運(yùn)動(dòng)檢測(cè)),通過(guò)GPIO控制蜂鳴器。

按鍵用來(lái)切換查看界面以及設(shè)置信息,本項(xiàng)目只采用了一個(gè)按鍵,通過(guò)軟件邏輯實(shí)現(xiàn)對(duì)4中按下?tīng)顟B(tài)的識(shí)別。

硬件線(xiàn)路連接:

蜂鳴器 - PA9

OLED SCL - PH13

OLED SDA - PH15

X-NUCLEO-IKS01A3傳感器 SCL - PB0

X-NUCLEO-IKS01A3傳感器 SDA - PB2

軟件框架說(shuō)明

整體軟件實(shí)現(xiàn)了功能框架如下:

 

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

  1. 按鍵狀態(tài)的信號(hào)采集以及濾波功能,由于只有一個(gè)按鍵,所以將這一個(gè),按鍵的按下?tīng)顟B(tài)做了不同的識(shí)別,分為了4種按下的狀態(tài)可以用來(lái)處理所有的任務(wù)。
  2. OLED的顯示功能
  1. 啟動(dòng)界面,會(huì)顯示RT-Thread的logo以及項(xiàng)目logo。
  2. 時(shí)間顯示界面:會(huì)顯示時(shí)間,日期,星期,wifi連接狀態(tài),天氣信息,在wifi沒(méi)有連接的狀態(tài)下,wifi圖標(biāo)會(huì)閃爍。
  3. 菜單列表:用來(lái)切換顯示的界面,包含設(shè)置,秒表、步數(shù)、溫度、濕度、氣壓、方位。通過(guò)短按按鈕切換。
  4. 設(shè)置界面??梢栽O(shè)置是否開(kāi)啟網(wǎng)絡(luò)時(shí)間更新以及設(shè)置鬧鐘。鬧鐘設(shè)置界面中可以設(shè)置鬧鐘是否啟用以及設(shè)置鬧鐘時(shí)間。
  5. 秒表功能,在該界面下,秒表線(xiàn)程被創(chuàng)建,按下按鈕切換到開(kāi)啟按鈕下按下按鈕可以開(kāi)啟計(jì)時(shí),再次按下暫停計(jì)時(shí),退出該界面自動(dòng)刪除線(xiàn)程。
  6. 步數(shù)查看。步數(shù)線(xiàn)程會(huì)一直運(yùn)行,用于記錄運(yùn)動(dòng)狀態(tài),使用LSM6DSO獲取加速度數(shù),由此進(jìn)行步數(shù)算法檢測(cè)步數(shù)。
  7. 溫度、濕度、氣壓查看。獲取傳感器的數(shù)據(jù)進(jìn)行處理之后顯示在界面上。
  8. 指南針(方位)界面,可以查看當(dāng)前面向的方向,使用了LIS2MDL磁力傳感器以及LSM6DSO加速度傳感器通過(guò)算法結(jié)合計(jì)算出指向方位,并通過(guò)圖形顯示以及問(wèn)題提示的方式指向當(dāng)前的方位(東、南、西、北、東南、東北、西南、西北)。
  9. 返回。返回時(shí)間顯示界面。
  1. 鬧鐘功能

RTC獲取的時(shí)間到了鬧鐘設(shè)置中設(shè)置的指定的時(shí)間之后將觸發(fā)鬧鐘功能。在主界面下通過(guò)短按按鈕關(guān)閉。

 

軟件模塊說(shuō)明

一、按鍵功能介紹:

因?yàn)榘遢d只有一個(gè)按鍵,我也沒(méi)有外接按鍵資源,所以將這一個(gè)按鍵通過(guò)按鍵時(shí)間的長(zhǎng)短分為了4種按下?tīng)顟B(tài),通過(guò)松手判斷按鈕按下的時(shí)間長(zhǎng)短。

按鍵線(xiàn)程中使用了軟件按鍵濾波功能,濾波時(shí)間是50ms。

四種按鍵狀態(tài)分別如下:

1 【短按】:按下時(shí)間小于等于500ms

2 【中長(zhǎng)按】:按下時(shí)間大于500ms小于等于1.5s

3 【偏長(zhǎng)按】:按下時(shí)間大于1.5s小于等于2.5s

4 【長(zhǎng)按】:按下時(shí)間大于2.5s

按鍵線(xiàn)程在初始化的時(shí)候創(chuàng)建。

 

  • OLED顯示功能

OLED的顯示功能是主要的功能,這里對(duì)OLED的功能做詳述說(shuō)明。

  1. 開(kāi)機(jī)動(dòng)畫(huà)。上電的時(shí)候會(huì)顯示開(kāi)機(jī)界面,首先顯示RT-Thread的圖標(biāo),之后顯示運(yùn)動(dòng)手表的logo,顯示完成之后自動(dòng)進(jìn)入主界面。
  2. 主界面就是時(shí)間顯示界面,如下圖:
  1. 最上邊顯示【星期 - 月份 日期】;
  2. 中間部分顯示時(shí)間,如果網(wǎng)絡(luò)連接之后會(huì)自動(dòng)更新時(shí)間,可以在設(shè)置界面關(guān)閉自動(dòng)更新,網(wǎng)絡(luò)時(shí)間會(huì)更新到RTC中,時(shí)間直接讀取自RTC。;
  3. 最下面一列顯示wifi連接狀態(tài)以及天氣信息,在wifi沒(méi)有連接的狀況下會(huì)500ms閃爍一次,wifi連接之后,wifi圖標(biāo)不再閃爍,天氣圖標(biāo)會(huì)自動(dòng)循環(huán)顯示。
  4. 天氣包括晴天,雨天,多云,夜晚,晴轉(zhuǎn)陰。
  5. 天氣信息通過(guò)網(wǎng)絡(luò)獲取,獲取網(wǎng)絡(luò)天氣的json信息,處理出信息,所以需要線(xiàn)連接網(wǎng)絡(luò)才可以使用。
  6. 如果按下開(kāi)關(guān),最下一列中間會(huì)顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】,如下右圖,沒(méi)有開(kāi)關(guān)按下的時(shí)候不顯示。
  7. 長(zhǎng)按按鈕進(jìn)入菜單選擇界面
  8. 中長(zhǎng)按按鈕進(jìn)入設(shè)置界面

                         

 

  1. 菜單界面
  1. 菜單界面顯示【返回】【設(shè)置】【秒表】【步數(shù)】【溫度】【濕度】【氣壓】【方位】,如下左圖。
  2. 最上邊顯示左邊菜單圖標(biāo),右邊顯示退出圖標(biāo)。
  3. 短按按鈕切換菜單在上述1)中的菜單列表中循環(huán)切換
  4. 中長(zhǎng)按按鈕進(jìn)入選中的菜單功能中。
  5. 長(zhǎng)按按鈕退回主界面
  6. 按下按鈕的時(shí)候屏幕最上面中間會(huì)顯示按鈕按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】,如下右圖           
  • 設(shè)置

設(shè)置界面顯示【是否啟動(dòng)網(wǎng)絡(luò)時(shí)間】以及【鬧鐘設(shè)置】

  1. 網(wǎng)絡(luò)時(shí)間后面的方框表示是否啟用,實(shí)心方框表示啟用,默認(rèn)是啟用的
  2. 短按按鈕切換菜單
  3. 中長(zhǎng)按按鈕設(shè)置

選中【鬧鐘設(shè)置】,短按進(jìn)入鬧鐘設(shè)置界面。

  1. 中長(zhǎng)按切換選中菜單,分別有【啟用鬧鐘】【小時(shí)設(shè)置】【分鐘設(shè)置】
  2. 選中啟用菜單,短按啟用或者禁止,啟用了鬧鐘之后會(huì)創(chuàng)建鬧鐘線(xiàn)程,運(yùn)行鬧鐘功能,禁止鬧鐘之后會(huì)刪除鬧鐘線(xiàn)程。
  3. 選中小時(shí)設(shè)置或者分鐘該設(shè)置,短按時(shí)間會(huì)增加。
  4. 鬧鐘設(shè)置好了之后,到達(dá)指定時(shí)間會(huì)啟動(dòng)蜂鳴器報(bào)警,在主界面下短按按鈕會(huì)關(guān)閉鬧鐘,到下一次到指定時(shí)間會(huì)重新報(bào)警。

 

四、秒表

當(dāng)切換到秒表界面的時(shí)候會(huì)自動(dòng)創(chuàng)新秒表線(xiàn)程,在退出秒表顯示界面時(shí)會(huì)自動(dòng)刪除秒表任務(wù),秒表任務(wù)100ms運(yùn)行一次。

1、秒表顯示界面,最上邊左邊顯示秒表圖標(biāo),右邊顯示退出圖標(biāo)

2、中間顯示記錄秒表時(shí)間

3、下面顯示操作菜單

1) 第一個(gè)是開(kāi)始按鈕,短按啟動(dòng)計(jì)時(shí),菜單編程停止,短按停止計(jì)時(shí),如下左圖。

2) 中間是清空按鈕,短按按下清空計(jì)時(shí)數(shù)據(jù)

3) 右邊是返回,短按返回菜單列表

4、中長(zhǎng)按切換下列的菜單

5、長(zhǎng)按退回主界面

6、按下按鈕的時(shí)候屏幕最上面中間會(huì)顯示按鈕按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】,如下右圖                                       

  • 步數(shù)

1、在菜單欄中,選中【步數(shù)】,中長(zhǎng)按進(jìn)入界面,顯示當(dāng)前步數(shù)。

2、步數(shù)是通過(guò)LSM6DSO加速度計(jì)和角速度計(jì)獲取的數(shù)據(jù)計(jì)算出來(lái)的。通過(guò)采樣加速度值,連續(xù)多次采集數(shù)據(jù),通過(guò)算法計(jì)算各個(gè)軸的加速度值是否滿(mǎn)足步數(shù)運(yùn)動(dòng)的條件,以此計(jì)算是否運(yùn)動(dòng),步數(shù)檢測(cè)的靈敏度也可以在代碼中進(jìn)行調(diào)節(jié)。

3、該界面中間顯示當(dāng)前步數(shù)信息。

4、該界面下最下邊顯示【清空】和【返回】菜單,通過(guò)短按進(jìn)行切換

5、選中【清空】,中長(zhǎng)按之后清空步數(shù),選中【返回】,中長(zhǎng)按退回菜單列表。

6、步數(shù)線(xiàn)程在啟動(dòng)時(shí)創(chuàng)建,會(huì)一直監(jiān)控步數(shù)。

7、長(zhǎng)按按鈕退出

8、按下按鈕會(huì)在上方中間顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】

 

  • 溫度

1、在菜單列表中,選中【溫度】,中長(zhǎng)按進(jìn)入界面,顯示當(dāng)前溫度。

2、溫度是通過(guò)HST221傳感器,采集的,該傳感器中存在標(biāo)定數(shù)據(jù),通過(guò)獲取標(biāo)定數(shù)據(jù),然后利用一次線(xiàn)性方程公式對(duì)讀取出來(lái)的數(shù)據(jù)進(jìn)行處理,最后會(huì)的溫度。

3、該界面中間顯示溫度數(shù)據(jù),每1s刷新一次。

4、該界面下顯示有【刷新】和【返回】,短按進(jìn)行菜單切換。

5、選中【刷新】,中長(zhǎng)按刷新當(dāng)前溫度

6、選中【返回】,中長(zhǎng)按會(huì)返回菜單列表界面

7、溫度數(shù)據(jù)在該界面下才會(huì)從傳感器中讀取

8、長(zhǎng)按按鈕退出

9、按下按鈕會(huì)在上方中間顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】

    

 

  • 濕度

1、在菜單列表中,選中【濕度】,中長(zhǎng)按進(jìn)入界面,顯示當(dāng)前濕度百分比。

2、濕度是通過(guò)HST221傳感器,采集的,該傳感器中存在標(biāo)定數(shù)據(jù),通過(guò)獲取標(biāo)定數(shù)據(jù),然后利用一次線(xiàn)性方程公式對(duì)讀取出來(lái)的數(shù)據(jù)進(jìn)行處理,最后會(huì)的濕度。

3、該界面中間顯示濕度數(shù)據(jù),每1s刷新一次。

4、該界面下顯示有【刷新】和【返回】,短按進(jìn)行菜單切換。

5、選中【刷新】,中長(zhǎng)按刷新當(dāng)前濕度

6、選中【返回】,中長(zhǎng)按會(huì)返回菜單列表界面

7、濕度數(shù)據(jù)在該界面下才會(huì)從傳感器中讀取

8、長(zhǎng)按按鈕退出

9、按下按鈕會(huì)在上方中間顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】

    

 

  • 氣壓

1、在菜單列表中,選中【氣壓】,中長(zhǎng)按進(jìn)入界面,顯示當(dāng)前氣壓值。

2、氣壓是通過(guò)LPS2HH傳感器獲取,每1s刷新一次

3、該界面中間顯示氣壓數(shù)據(jù)。

4、該界面下顯示有【刷新】和【返回】,短按進(jìn)行菜單切換。

5、選中【刷新】,中長(zhǎng)按刷新當(dāng)前氣壓值

6、選中【返回】,中長(zhǎng)按會(huì)返回菜單列表界面

7、氣壓數(shù)據(jù)在該界面下才會(huì)從傳感器中讀取

8、長(zhǎng)按按鈕退出

9、按下按鈕會(huì)在上方中間顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】

 

    

 

  • 指南針

1、在菜單列表中,選中【方位】,中長(zhǎng)按進(jìn)入界面,指南針功能,創(chuàng)建指南針線(xiàn)程。

2、指南針數(shù)據(jù)是通過(guò)LIS2MDL傳感器獲取,LIS2MDL獲取磁力數(shù)據(jù),通過(guò),用LSM6DSO的加速度數(shù)據(jù)進(jìn)行補(bǔ)償,通過(guò)公式計(jì)算出X軸與Y軸方向的磁力強(qiáng)度,進(jìn)而計(jì)算當(dāng)前傳感器所指向的方向。

3、該界面通過(guò)圖形顯示指示的方向,中間的指針會(huì)指向當(dāng)前的方位;

左下角的文字會(huì)顯示指向的方位數(shù)據(jù),分別有東、南、西、北、東南、東北、西南、西北。

4、長(zhǎng)按按鈕退出

  1. 按下按鈕會(huì)在上方中間顯示開(kāi)關(guān)按下的狀態(tài)【KEY1】【KEY2】【KEY3】【KEY4】

                                                        

  • RTC功能

RTC線(xiàn)程會(huì)在初始化的時(shí)候創(chuàng)建,最開(kāi)始會(huì)顯示設(shè)定的時(shí)間,這個(gè)時(shí)候會(huì)等待網(wǎng)絡(luò)連接,在設(shè)置了獲取網(wǎng)絡(luò)時(shí)間的狀態(tài)下,網(wǎng)絡(luò)連接之后會(huì)獲取網(wǎng)絡(luò)時(shí)間并更新到RTC,網(wǎng)咯時(shí)間每24小時(shí)更新一次,如果關(guān)閉網(wǎng)絡(luò)時(shí)間功能則不會(huì)更新。

 

演示效果

演示效果圖:

 

演示視頻

比賽感悟

本次比賽是第一次接觸rt-thread,之前也僅僅是聽(tīng)說(shuō)過(guò),沒(méi)有上手實(shí)踐。這次比賽收獲還是挺多的,首先就是了解了RT-thread這個(gè)操作系統(tǒng)。給我的感覺(jué)就是操作方便,組件豐富,應(yīng)用靈活,可以使用該系統(tǒng)直接實(shí)現(xiàn)很多功能而不需要過(guò)多的編程,可以讓實(shí)現(xiàn)應(yīng)用的工程師將更多的精力放在功能的實(shí)現(xiàn)上面,通過(guò)使用該系統(tǒng),極大的提升里的開(kāi)發(fā)效率。

本次比賽我學(xué)到了rt-thread的基本的使用方式,線(xiàn)程創(chuàng)建刪除暫停以及恢復(fù),信號(hào)量,臨界操作等功能的使用,同時(shí)也學(xué)習(xí)了一些組件的使用,像是網(wǎng)絡(luò)組件,OLED顯示組件等。

在作品完成過(guò)程中也遇到了一些困難,比如IIC調(diào)試總是報(bào)錯(cuò),OLED顯示問(wèn)題,傳感器數(shù)據(jù)獲取不出來(lái)獲取獲取出來(lái)的數(shù)據(jù)不對(duì),堆棧溢出之類(lèi)的問(wèn)題,通過(guò)各種調(diào)試手段以及串口打印錯(cuò)誤信息一一排除,完成作品。

本次比賽也只是對(duì)RT-Thread有了一些基本的了解,接下來(lái)會(huì)抽時(shí)間對(duì)該系統(tǒng)做深入的學(xué)習(xí),今我在使用過(guò)程中感覺(jué)惟一的不足就是內(nèi)存消耗比較大,但是在使用便捷性,功能等方便優(yōu)于我使用過(guò)的其他操作系統(tǒng),希望RT-Thread越做越好。

  • 代碼地址.txt
    下載
    描述:代碼地址
  • RT-Thread大賽作品提交_運(yùn)動(dòng)手表.docx
    下載
    描述:作品描述文件

相關(guān)推薦