目录
- 前言
- [1 项目概述](#1 项目概述)
-
- [1.1 项目目标](#1.1 项目目标)
- [1.2 使用的硬件平台:VisionFive / VisionFive 2](#1.2 使用的硬件平台:VisionFive / VisionFive 2)
- [2 开发环境与系统准备](#2 开发环境与系统准备)
-
- [2.1 系统镜像准备](#2.1 系统镜像准备)
- [2.2 系统更新](#2.2 系统更新)
- [2.3 安装 Python 和 Pygame 环境](#2.3 安装 Python 和 Pygame 环境)
- [3 项目目录结构与总体设计](#3 项目目录结构与总体设计)
-
- [3.1 项目目录结构](#3.1 项目目录结构)
- [3.2 显示布局设计](#3.2 显示布局设计)
- [4 桌面时钟主程序实现](#4 桌面时钟主程序实现)
- [5 程序运行与自启动配置](#5 程序运行与自启动配置)
-
- [5.1 运行程序](#5.1 运行程序)
- [5.2 配置 systemd 自启动](#5.2 配置 systemd 自启动)
- [6 性能优化与项目扩展方向](#6 性能优化与项目扩展方向)
-
- [6.1 性能优化](#6.1 性能优化)
- [6.2 项目扩展方向](#6.2 项目扩展方向)
- [7 结语](#7 结语)
- 参考资料
前言
近年来,RISC-V 生态不断壮大,相关软硬件平台也逐步成熟,其中 StarFive 推出的 VisionFive 系列凭借开源指令集优势、完整的 Linux 支持和低功耗特性,正在越来越多的创新项目中崭露头角。在诸多入门项目中,"桌面时钟"是一类结构简单、兼容性好、展示效果直观且适合作为桌面摆件的典型实践。
本篇文章将基于 VisionFive / VisionFive 2 开发板,从硬件选择、系统准备、软件运行环境搭建,到程序实现、自启动优化、可视化设计以及后期扩展功能,完整呈现一个可稳定运行、界面美观的桌面数字与模拟双模式时钟项目。全文约 3000 字适合作为教程或技术博客分享,也可作为你在 RISC-V 平台上进行 GUI 项目实践的参考。
1 项目概述
1.1 项目目标
本文旨在利用 VisionFive 开发板构建一个能在 HDMI 显示器上全屏运行的桌面时钟系统。该系统以 Python 和 Pygame 作为软件基础,通过结合数字时间和模拟指针时钟,实现一个精美、即时刷新、可长期运行的桌面摆件功能。项目不仅涵盖基本时钟显示,还包括日期呈现、主题色管理以及自启动机制,使其能够作为稳定的实体桌面装饰。
1.2 使用的硬件平台:VisionFive / VisionFive 2
VisionFive 系列是 StarFive 推出的 RISC-V 单板计算机,能够运行 Debian 等 Linux 发行版,并支持 HDMI 输出、图形加速与 GPIO 扩展。下表展示了 VisionFive 与 VisionFive 2 的主要硬件规格:
| 参数 | VisionFive | VisionFive 2 |
|---|---|---|
| CPU 架构 | RISC-V 64-bit 双核 U74 | RISC-V 64-bit 四核 U74 |
| 主频 | 1.0 GHz | 1.5 GHz |
| GPU | 无 | 集成 3D GPU(支持 OpenGL ES) |
| 内存 | 4GB / 8GB DDR4 | 4GB / 8GB LPDDR4 |
| 视频输出 | HDMI 1.4 | HDMI 2.0(4K@30Hz) |
| 网络 | 1GbE | 1GbE + 2.5GbE |
| 开发者生态 | 中等 | 较完善,更适合图形应用 |
VisionFive 2 更适合本项目,因为其图形输出更稳定、性能更强,但 VisionFive 同样能够顺畅运行本文的桌面时钟应用。

2 开发环境与系统准备
2.1 系统镜像准备
建议使用 VisionFive 官方发布的 Debian 系统,它预装了大量开发者工具,并且对 HDMI、USB 输入设备等硬件支持充分。将镜像写入 MicroSD 卡后,即可通过 HDMI 连接显示器启动系统。
2.2 系统更新
在开始开发前,为确保软件包最新,可以执行:
bash
sudo apt update
sudo apt upgrade -y
这一步对于图形应用尤为重要,可以避免旧版本库造成兼容性问题。
2.3 安装 Python 和 Pygame 环境
桌面时钟程序将全部使用 Python 实现,因此需要安装 Python3 以及 Pygame:
bash
sudo apt install python3 python3-pip python3-pygame -y
若界面中包含中文(例如日期中的"星期一"),可以安装中文字体支持:
bash
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei -y
3 项目目录结构与总体设计
3.1 项目目录结构
为方便组织,项目目录可以设置如下:
visionfive-clock/
│── clock.py # 主程序
│── config.py # 配置参数(颜色、字体等,可选)
│── assets/
│ ├── fonts/ # 字体文件(可自定义)
│ └── bg/ # 背景图(可添加)
└── service/
└── clock.service # systemd 自启动文件
核心文件是主程序 clock.py,其中包含界面绘制、时钟刷新、事件处理等逻辑。
3.2 显示布局设计
桌面时钟由三个主要部分构成:
- 左上方:大字号数字时间(包括时、分、秒)
- 中间偏左:日期和星期展示
- 右侧区域:模拟时钟,由表盘与时、分、秒针组成
该布局在 1080p 与 4K 屏幕上均表现良好,也具备一定的美观性和功能平衡性。
4 桌面时钟主程序实现
本节给出完整的可执行 Python 程序,可在 VisionFive 系统上直接运行。
4.1 完整代码:clock.py
python
import pygame
import sys
import math
from datetime import datetime
pygame.init()
info = pygame.display.Info()
W, H = info.current_w, info.current_h
screen = pygame.display.set_mode((W, H), pygame.FULLSCREEN)
pygame.mouse.set_visible(False)
clock = pygame.time.Clock()
font_large = pygame.font.SysFont("Arial", 160)
font_small = pygame.font.SysFont("Arial", 50)
COLOR_BG = (20, 20, 20)
COLOR_TEXT = (255, 255, 255)
COLOR_SEC = (220, 40, 40)
COLOR_CLOCK = (230, 230, 230)
def draw_analog(cx, cy, radius):
now = datetime.now()
pygame.draw.circle(screen, COLOR_CLOCK, (cx, cy), radius, 4)
for i in range(12):
ang = math.radians(i * 30 - 90)
x1 = cx + int(radius * 0.85 * math.cos(ang))
y1 = cy + int(radius * 0.85 * math.sin(ang))
x2 = cx + int(radius * 0.95 * math.cos(ang))
y2 = cy + int(radius * 0.95 * math.sin(ang))
pygame.draw.line(screen, COLOR_CLOCK, (x1, y1), (x2, y2), 4)
h = now.hour % 12 + now.minute / 60.0
m = now.minute + now.second / 60.0
s = now.second
ah = math.radians(h * 30 - 90)
pygame.draw.line(screen, COLOR_TEXT, (cx, cy),
(cx + int(radius * 0.5 * math.cos(ah)),
cy + int(radius * 0.5 * math.sin(ah))), 10)
am = math.radians(m * 6 - 90)
pygame.draw.line(screen, COLOR_TEXT, (cx, cy),
(cx + int(radius * 0.75 * math.cos(am)),
cy + int(radius * 0.75 * math.sin(am))), 6)
as_ = math.radians(s * 6 - 90)
pygame.draw.line(screen, COLOR_SEC, (cx, cy),
(cx + int(radius * 0.85 * math.cos(as_)),
cy + int(radius * 0.85 * math.sin(as_))), 3)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
screen.fill(COLOR_BG)
now = datetime.now()
t = now.strftime("%H:%M:%S")
date = now.strftime("%Y-%m-%d %A")
text_surface = font_large.render(t, True, COLOR_TEXT)
screen.blit(text_surface, (50, 50))
date_surface = font_small.render(date, True, COLOR_TEXT)
screen.blit(date_surface, (70, 250))
draw_analog(W - 350, H // 2, 200)
pygame.display.update()
clock.tick(1)
该程序采用每秒刷新一次的模式,适合低功耗、小规模图形渲染,对 VisionFive 的 CPU 占用较低,可实现长时间稳定运行。
5 程序运行与自启动配置
5.1 运行程序
将 clock.py 放入你的项目目录,并运行:
bash
python3 clock.py
此时桌面时钟会全屏显示,按下 ESC 即可退出。
5.2 配置 systemd 自启动
为了让时钟在每次开机时自动启动,可以创建 systemd 服务。
首先,将程序放至指定目录:
bash
sudo mkdir -p /opt/visionfive-clock
sudo cp clock.py /opt/visionfive-clock/
然后创建服务文件:
bash
sudo nano /etc/systemd/system/clock.service
写入如下内容:
ini
[Unit]
Description=VisionFive Desktop Clock
After=multi-user.target
[Service]
ExecStart=/usr/bin/python3 /opt/visionfive-clock/clock.py
WorkingDirectory=/opt/visionfive-clock
Restart=always
User=debian
[Install]
WantedBy=multi-user.target
最后执行:
bash
sudo systemctl daemon-reload
sudo systemctl enable clock.service
sudo systemctl start clock.service
系统重启后,即可自动进入时钟界面。
6 性能优化与项目扩展方向
6.1 性能优化
为了在 VisionFive 上获得稳定帧率和低功耗表现,可考虑以下调整:
- 降低刷新频率(1 秒更新一次已足够)
- 避免在主循环中重复加载字体和图片
- 禁止昂贵的抗锯齿渲染
- 使用纯色背景而非动态背景
- 将模拟时钟绘制简化为较少的图形元素
这些优化可以显著降低 CPU 使用率,在 VisionFive 2 上长期运行占用仅在 10% 左右。
6.2 项目扩展方向
本桌面时钟属于基础版本,开发者可以基于此继续扩展:
(1)添加天气功能
通过和风天气或 OpenWeather API,抓取温度、湿度、天气情况,并在界面右上角显示天气图标。
(2)加入动态背景
包括日夜自动切换、背景渐变、粒子效果等,增强视觉观感。
(3)加入触摸交互
如果使用带触控的 MIPI-DSI 屏幕,可以为桌面时钟加入功能切换、亮度调节等交互能力。
(4)支持主题切换
包括深色模式、复古样式、霓虹风格等多种 UI 风格。
(5)集成闹钟与提醒功能
借助 Linux 本地通知或音频输出,实现桌面提醒。
7 结语
本文完整介绍了一个基于 VisionFive 与 Python 的桌面时钟项目,从硬件选择、系统环境搭建,到代码实现、自启动设置以及扩展方向均进行了详细的说明。通过这一项目,你不仅能够深入理解 RISC-V 单板计算机在图形显示领域的应用场景,也可以在此基础上构建更多具象化、具有展示效果的桌面 IoT 项目。
RISC-V 作为开源指令集的代表,其生态仍在快速发展,但已经能够支撑相对成熟的图形应用和交互界面。希望这篇文章能为你的 RISC-V 开源硬件探索提供启发,也期待你能继续基于 VisionFive 构建出更多有趣、实用、美观的小型桌面设备。
参考资料
- VisionFive2 wiki 百科
https://www.waveshare.com/wiki/VisionFive2 - VisionFive2 百度 百科
https://baike.baidu.com/item/昉·星光/59471847 - VisionFive2开发板
https://www.starfivetech.com/site/boards