Coder Social home page Coder Social logo

no-chicken / ov-watch Goto Github PK

View Code? Open in Web Editor NEW
271.0 3.0 62.0 159.38 MB

A powerful Smart Watch based on STM32, FreeRTOS, LVGL. It only cost ¥80 RMB ( $12 USD ).

Home Page: https://www.bilibili.com/video/BV1hh4y1J7TS/

License: GNU General Public License v3.0

C 99.20% Assembly 0.05% C++ 0.24% HTML 0.01% Makefile 0.01% Batchfile 0.01% CMake 0.02% Dockerfile 0.01% Python 0.43% Shell 0.01% Handlebars 0.01% Ruby 0.02%
freertos lvgl stm32 smartwatch

ov-watch's Introduction

OV-Watch

📒 Overview

A powerful Smart Watch

如果你觉得这个手表的硬件难焊接难复刻,又想进行代码的学习,可以试一下新的STM32F411开发板:

FriPi炸鸡派:https://github.com/No-Chicken/FryPi

🔗视频链接:

bilibili主页 | 硬件开源 | V2.3新增功能视频 | V2.2演示视频

🚀 增加的功能说明

V2.3.3相对V2.3.2修改的功能包括:

  1. 增加了BootLoader程序.

  2. 增加了IAP OTA功能, 即可以通过蓝牙升级程序.

  3. 修改了一些bug.

✒️如何烧录BootLoader和升级APP:

由于具体的步骤太多这里不放了, 详细见Firmware中的README文件: BootLoader和APP说明

如果你觉得带BootLoader的V2.3.3版本太麻烦了, 可以自行去下载ver2.3.2分支, 用以前的代码.

📑功能表如下图所示:

🌟实物图

💻软件部分设计细节:

1.低功耗设计

手表的模式分为3个。第一个是正常的运行模式,手表正常运行;第二个是睡眠模式,MCU进入STOP模式,MPU6050仍在记步数;第三个是关机模式,TPS63020直接关闭使能,此时无3V3供电,只有Vbat有供电。

在最开始的时候,手表从睡眠到唤醒使用的是MPU6050的运动功能,打开中断,唤醒,但是这样尝试过,有个问题就是需要抖动幅度很大才能触发中断。所以最后还是用的RTC定时中断,然后定时检测当前手势状态,如果有抬腕动作则唤醒。

MPU6050不能直接使用DMP库,初始化后功耗很高,需要进行一些改动,才能让功耗下来,具体看工程代码。

蓝牙使用了KT6328A后,不建议关闭蓝牙使能,他的待机功耗很低。

最后接3V3测试,运行模式70-80mA,待机模式1mA左右,关机模式基本不耗电只有RTC在工作。当然后面没有测试电源接到Vbat端经过DCDC供电的情况,这个功耗就完全看DCDC的效率的。

2.心率血氧

血氧部分暂时还没有写。

心率计算本来使用的官方的库,但是计算太慢了,后面改为自己写的一个简易的峰值检测的算法。EM7028的PPG信号如下图所示

3.数据存储

目前使用的外部的EEPROM进行数据存储,主要用于存储设置等,详细可以看Datasave.c文件。

4.页面切换逻辑

为了实现页面切换,可以返回上次的界面,这里使用了一个栈来存储页面对应的,例如,使用user_Stack_Pop(&ScrRenewStack);弹出上一个界面,然后进入到新的界面再使用 user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);入栈一个界面的指针地址。注意不能直接在push操作使用类似ui_HomePage入栈,它是会动态变化的,这是个很大的坑。

//key1 pressed
if(keystr == 1)
{
    user_Stack_Pop(&ScrRenewStack);
    if(user_Stack_isEmpty(&ScrRenewStack))
    {
        ui_MenuPage_screen_init();
        lv_scr_load_anim(ui_MenuPage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);
        user_Stack_Push(&ScrRenewStack,(long long int)&ui_HomePage);
        user_Stack_Push(&ScrRenewStack,(long long int)&ui_MenuPage);
    }
    else if(ScrRenewStack.Data[ScrRenewStack.Top_Point-1] == (long long int)&ui_HomePage)
    {
        ui_HomePage_screen_init();
        lv_scr_load_anim(ui_HomePage,LV_SCR_LOAD_ANIM_MOVE_RIGHT,0,0,true);
    }
}

5.计算器逻辑

计算器的逻辑就是很经典的计算器问题,经典的就是开两个栈,一个存放符号,一个存数字,然后进行出栈计算等等操作,以1+2*6/3为例,具体的过程如下动图所示。但是会有一个问题就是小数点,这个动图展示的只是整数计算的逻辑,带小数点的详细见代码。

具体过程是:

  1. 遍历表达式,当遇到操作数,将其压入操作数栈。
  2. 遇到运算符时,如果运算符栈为空,则直接将其压入运算符栈。
  3. 如果运算符栈不为空,那就与运算符栈顶元素进行比较:如果当前运算符优先级比栈顶运算符高,则继续将其压入运算符栈,如果当前运算符优先级比栈顶运算符低或者相等,则从操作数符栈顶取两个元素,从栈顶取出运算符进行运算,并将运算结果压入操作数栈。
  4. 继续将当前运算符与运算符栈顶元素比较。
  5. 继续按照以上步骤进行遍历,当遍历结束之后,则将当前两个栈内元素取出来进行运算即可得到最终结果。

6.LVGL在windows在vscode的仿真配置参考

参考链接: https://blog.csdn.net/weixin_49337111/article/details/136536375

已经更改好的可以跑的代码放在了lv_sim_vscode_win这个文件夹中,应该可以直接使用vscode打开。

ov-watch's People

Contributors

no-chicken avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ov-watch's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.