849|6

223

帖子

4

资源

纯净的硅(中级)

玩转RP2040之结项报告 [复制链接]

 

 

RP2040前面的几篇测试报告:

1 玩转RP2040之开箱测评与上电运行

2 玩转RP2040之Python开发环境搭建

3 玩转RP2040之LCD绘制基本形状测试

4 玩转RP2040之使用Python在LCD上显示图片

5 玩转RP2040之使用Python在LCD上显示多类型字体

6 玩转RP2040之设计一个表盘

 

本篇实现一个综合的功能:

  • 利用LCD显示一个运动表盘

  • 利用LCD显示运动手表中的其它功能显示,如天气信息、打开支付宝等

  • 利用IMU判断板子的翻转,实现表盘中功能的切换

程序编写

一些定义

import time
from machine import Pin, SPI
import gc9a01
import myimu
​
from prop_font import chango_16
from prop_font import chango_32
from prop_font import chango_64
​
from mono_font import inconsolata_16 
from mono_font import inconsolata_32
from mono_font import inconsolata_64
​
import NotoSans_32
import NotoSerif_32
import NotoSansMono_32
​
import vga1_bold_16x16
​
DC = 8
CS = 9
SCK = 10
MOSI = 11
RST = 12
​
BL = 25

表盘显示功能封装为一个类

class WatchPanel:
    def init(self):
        self.spi = SPI(1, baudrate=60000000, sck=Pin(SCK), mosi=Pin(MOSI))
        self.tft = gc9a01.GC9A01(
                self.spi,
                240,
                240,
                reset=Pin(RST, Pin.OUT),
                cs=Pin(CS, Pin.OUT),
                dc=Pin(DC, Pin.OUT),
                backlight=Pin(BL, Pin.OUT),
                rotation=0)
   
        #时分秒
        self.hour = 22
        self.minute = 08
        self.second = 55
        self.last_hour = -1
        self.last_minute = -1
        self.last_second = -1
        
        # enable display and clear screen
        self.tft.init()
    
    def display_inconsolata_font(self, font, data, column, row):
        for char in data:
            self.tft.bitmap(font, column, row, font.MAP.index(char))
            column += font.WIDTH
            
    def show_static_info(self):
        #蓝牙
        bl_x = 70
        bl_y = 17
        self.tft.vline(bl_x, bl_y, 20, gc9a01.BLUE)
        self.tft.line(bl_x - 5, bl_y + 3, bl_x + 5, bl_y + 20 - 6, gc9a01.BLUE)
        self.tft.line(bl_x - 5, bl_y + 20 - 3, bl_x + 5, bl_y + 6, gc9a01.BLUE)
        self.tft.line(bl_x, bl_y, bl_x + 5, bl_y + 6, gc9a01.BLUE)
        self.tft.line(bl_x, bl_y + 20, bl_x + 5, bl_y + 20 - 6, gc9a01.BLUE)
​
        #电量
        self.tft.text(vga1_bold_16x16, "80%", 95, 20, gc9a01.CYAN)
        bat_x = 145
        bat_y = 20
        bat_w = 30
        bat_h = 15
        self.tft.hline(bat_x, bat_y, bat_w, gc9a01.WHITE)
        self.tft.hline(bat_x, bat_y + bat_h, bat_w, gc9a01.WHITE)
        self.tft.vline(bat_x, bat_y, bat_h, gc9a01.WHITE)
        self.tft.vline(bat_x + bat_w, bat_y, bat_h, gc9a01.WHITE)
        self.tft.vline(bat_x + bat_w + 1, bat_y + 2, bat_h - 4, gc9a01.WHITE)
        self.tft.vline(bat_x + bat_w + 2, bat_y + 2, bat_h - 4, gc9a01.WHITE)
        self.tft.fill_rect(bat_x + 3, bat_y + 3, bat_w - 10, bat_h -5 , gc9a01.GREEN)
​
        #日期与星期
        self.display_inconsolata_font(inconsolata_16, "12/08", 150, 60)
        self.tft.text(vga1_bold_16x16, "Thur", 150, 90, gc9a01.YELLOW)
        
        #运动步数
        self.tft.text(vga1_bold_16x16, "walk:4567", 50, 190, gc9a01.YELLOW)
​
    def show_time_info(self):
        self.second = self.second + 1
        if self.second >= 60:
            self.minute = self.minute + 1
            self.second = 0
        
        hour_str = "%02d" % self.hour
        minute_str = "%02d" % self.minute
        second_str = "%02d" % self.second
        
        self.tft.fill_rect(25, 50, 115, 60, gc9a01.BLACK)
        self.tft.write(chango_64, hour_str, 25, 50, gc9a01.WHITE)
        self.tft.fill_rect(60, 105, 115, 60, gc9a01.BLACK)
        self.tft.write(chango_64, minute_str, 60, 105, gc9a01.YELLOW)
        self.tft.write(NotoSans_32, second_str, 180, 130, gc9a01.GREEN)
        
        self.last_hour = self.hour
        self.last_minute = self.minute
        self.last_second = self.second
        
    def show_img(self, img):
        self.tft.jpg(img, 0, 0, gc9a01.SLOW)
        
    def show_watch(self):
        self.tft.fill(gc9a01.BLACK)
        self.show_static_info()
        self.show_time_info()

主函数

def main():
    #IMU
    qmi8658=myimu.IMU_QMI8658C()
    
    watchPanel=WatchPanel()
    watchPanel.init()
    
    idx = 1
    while True:
        #read QMI8658
        xyz=qmi8658.Read_XYZ()
        print("accz:%f" % xyz[2])
        if xyz[2] > -1:
            idx = idx+1
            if (idx == 4):
                idx = 1
        
        if (idx == 1):
            watchPanel.show_watch()
        elif (idx == 2):
            watchPanel.show_img("weather.jpg")
        elif (idx == 3):
            watchPanel.show_img("pay.jpg")
        time.sleep(1)
​
​
main()

测试

显示时间界面

1.png

显示天气界面

2.png

显示支付宝界面

3.png

演示视频

VID_20230102_215443_x264

 

总结

本篇利用RP2040实现了一个综合功能:运动表盘的显示与功能的切换,切换功能只利用IMU检测Z轴加速度的变化,后续可考虑结合6轴的数据解算出姿态角,从而可以使姿态检测更加准确。

此帖出自移动便携论坛

回复

1643

帖子

1

资源

版主

6轴的数据解算出姿态角解析速度如何?能达到多快的频率

此帖出自移动便携论坛

点评

目前还没有做姿态解算,只是用来单一Z轴的加速度简单的实现姿态变化检测  详情 回复 发表于 2023-1-3 22:11

回复

2619

帖子

0

资源

版主

这个界面切换采用加速度传感器的角度变化的想法不错!!!好像有手表就可以这样,无接触式控制。

此帖出自移动便携论坛

回复

223

帖子

4

资源

纯净的硅(中级)

秦天qintian0303 发表于 2023-1-3 08:55 6轴的数据解算出姿态角解析速度如何?能达到多快的频率

目前还没有做姿态解算,只是用来单一Z轴的加速度简单的实现姿态变化检测

此帖出自移动便携论坛

回复

27

帖子

0

资源

一粒金砂(中级)

很想也买一个模块,自己亲自设计体验一下。

此帖出自移动便携论坛

回复

142

帖子

3

资源

一粒金砂(高级)

这个温度条做的漂亮

此帖出自移动便携论坛

点评

这个只是个图片,哈哈  详情 回复 发表于 2023-1-11 23:30

回复

223

帖子

4

资源

纯净的硅(中级)

sipower 发表于 2023-1-10 09:19 这个温度条做的漂亮

这个只是个图片,哈哈

此帖出自移动便携论坛

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

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
零起步轻松学系列丛书介绍

零起步轻松学系列丛书介绍 丛书前言 一、学习电子技术意义 电子技术应用日益广泛,电子技术无处不在,电子技术的应用 ...

ISD1110、1420语音录放电路

ISD1110的/PLAYL、/PLAYE、/REC、A7和A6内部有上拉电阻,A5~A0内部有下拉电阻。因此R6、R7和R8不用接;不分段的话,地址也不必 ...

冒死也要向大家推荐的两本书

59641 :congratulate: 59642 本帖最后由 37°男人 于 2011-2-8 14:22 编辑 ]

各种开发板资料汇总

本帖最后由 dcexpert 于 2015-11-10 23:37 编辑 搜集各种开发板的官方资源,方便查找。(本帖将持续更新,也欢迎大家推荐资源 ...

最精简的stm32编码器程序

本帖最后由 weizhongc 于 2015-4-8 10:07 编辑 #define ROTATE_A PAin(2) #define ROTATE_B PAin(3) s16 DATA=0; void ...

关于场效应管的相位关系

请问,场效应管的相位关系是不是跟三极管一致?

【NXP Rapid IoT评测】+ Rapid IOT套件测评总结

评测的结束日期到了,是时候总结一下这次的评测了。首先说下这个套件的优缺点,然后总结一下开发过程以及评测结束后的遗憾。 ...

基于MSP430F5529按键的长按与短按

长按与短按的区别只是加上一个适当的延时然后再去判断引脚状态。 定义: #define KEYDIR P2DIR #define KEYIN P2IN #def ...

【新思科技IP资源】采用ARC处理器IP实现高效面部检测和识别

简介 人脸识别(即识别和验证照片中的人脸的挑战)对人类来说是一个简单的问题,但对计算机来说却是一个复杂的问题。经过 60 年 ...

贴片磁珠与贴片电感的选用

贴片磁珠与贴片电感的选用 片式磁珠的功能主要是消除存在于传输线中的RF噪声。 片式磁珠由软磁铁氧体材料组成,构成高体积电阻 ...

关闭
站长推荐上一条 1/5 下一条

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

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

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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