加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

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

2020/12/19
879
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗(yàn)、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
方塊圖(8)
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

作者:何雄

概述

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

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

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

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

 

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

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

RT-Thread版本:4.0.3

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

RT-Thread使用情況概述

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

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

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

其他:串口,pin,RTC,IIC

 

硬件框架

 

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

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

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

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

硬件線路連接:

蜂鳴器 - PA9

OLED SCL - PH13

OLED SDA - PH15

X-NUCLEO-IKS01A3傳感器 SCL - PB0

X-NUCLEO-IKS01A3傳感器 SDA - PB2

軟件框架說明

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

 

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

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

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

 

軟件模塊說明

一、按鍵功能介紹:

因?yàn)榘遢d只有一個按鍵,我也沒有外接按鍵資源,所以將這一個按鍵通過按鍵時間的長短分為了4種按下狀態(tài),通過松手判斷按鈕按下的時間長短。

按鍵線程中使用了軟件按鍵濾波功能,濾波時間是50ms。

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

1 【短按】:按下時間小于等于500ms

2 【中長按】:按下時間大于500ms小于等于1.5s

3 【偏長按】:按下時間大于1.5s小于等于2.5s

4 【長按】:按下時間大于2.5s

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

 

  • OLED顯示功能

OLED的顯示功能是主要的功能,這里對OLED的功能做詳述說明。

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

                         

 

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

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

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

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

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

 

四、秒表

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

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

2、中間顯示記錄秒表時間

3、下面顯示操作菜單

1) 第一個是開始按鈕,短按啟動計(jì)時,菜單編程停止,短按停止計(jì)時,如下左圖。

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

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

4、中長按切換下列的菜單

5、長按退回主界面

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

  • 步數(shù)

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

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

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

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

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

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

7、長按按鈕退出

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

 

  • 溫度

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

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

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

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

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

6、選中【返回】,中長按會返回菜單列表界面

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

8、長按按鈕退出

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

    

 

  • 濕度

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

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

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

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

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

6、選中【返回】,中長按會返回菜單列表界面

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

8、長按按鈕退出

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

    

 

  • 氣壓

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

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

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

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

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

6、選中【返回】,中長按會返回菜單列表界面

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

8、長按按鈕退出

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

 

    

 

  • 指南針

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

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

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

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

4、長按按鈕退出

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

                                                        

  • RTC功能

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

 

演示效果

演示效果圖:

 

演示視頻

比賽感悟

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

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

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

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

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

相關(guān)推薦

電子產(chǎn)業(yè)圖譜