1186|3

194

帖子

4

TA的资源

纯净的硅(初级)

楼主
 

兆易GD32H759I-EVAL LVGL - [仪表盘] [复制链接]

 

大家好,今天继上一节我们移植LVGL之后,我本地也跑了LVGL的benchmark。发现GD32H759I这个MCU在处理图像方面非常强大。非常适合跑一些大资源的项目,比如说涉及到LVGL方面的。或者是图像方面的。那么今天的帖子我将使用 兆易GD32H759I-EVAL 开发板结合LVGL来制作一个电脑的仪表盘。并且结合我自己编写的一个上位机程序,可以通过串口的方式把电脑的CPU 或者RAM的内存占用率发送给GD32H759I-EVAL。 通过串口中断的方式在回调函数中更新LVGL来实现实时查看CPU或者RAM使用率的效果。在本篇文章中你将会看到如何使用Gui-guider来创建LVGL元素并且在开发板上显示。

 

 

正文

 

今天我们先看效果:(上位机软件使用教程)

 

6月22日

 

 

开发板效果

WeChat_20240622043242

 

 

上位机源码:

import psutil
import math
import serial.tools.list_ports
import time
import tkinter as tk
from tkinter import ttk
from threading import Thread


def get_memory_usage():
    """获取当前系统的内存使用率并向上取整"""
    memory_usage = psutil.virtual_memory().percent
    return math.ceil(memory_usage)


def list_serial_ports():
    """列出可用的串口"""
    ports = serial.tools.list_ports.comports()
    return [port.device for port in ports]


def send_memory_usage():
    """不断获取内存使用率并发送到指定的串口"""
    global sending
    sending = True
    serial_port = port_combobox.get()
    baud_rate = int(baud_rate_combobox.get())

    ser = serial.Serial(serial_port, baud_rate)
    try:
        while sending:
            memory_usage = get_memory_usage()
            hex_memory_usage = bytes([memory_usage])  # 将内存使用率转换为单字节
            ser.write(hex_memory_usage)
            status_label.config(text=f"Status: Sending (Port: {serial_port}, Baud Rate: {baud_rate})")
            time.sleep(1)  # 每秒获取一次
    except KeyboardInterrupt:
        print("Stopping...")
    finally:
        ser.close()
        status_label.config(text="Status: Not sending")


def stop_sending():
    """停止发送内存使用率"""
    global sending
    sending = False
    status_label.config(text="Status: Stopping... Please wait.")
    time.sleep(2)  # 等待2秒以确保线程停止
    status_label.config(text="Status: Not sending")


# GUI
root = tk.Tk()
root.title("Memory Usage Sender")

# Prevent resizing of the window
root.resizable(False, False)

# Serial Port Selection
port_label = tk.Label(root, text="Select Serial Port:")
port_label.pack()

ports = list_serial_ports()
port_combobox = ttk.Combobox(root, values=ports, width=25)
port_combobox.pack()

# Baud Rate Selection
baud_rates = [9600, 19200, 38400, 57600, 115200]
baud_rate_label = tk.Label(root, text="Select Baud Rate:")
baud_rate_label.pack()

baud_rate_combobox = ttk.Combobox(root, values=baud_rates, width=10)
baud_rate_combobox.pack()

# Start Button
start_button = tk.Button(root, text="Start Sending", command=lambda: Thread(target=send_memory_usage).start(), pady=10)
start_button.pack()

# Add empty label for spacing
tk.Label(root).pack()

# Stop Button
stop_button = tk.Button(root, text="Stop Sending", command=stop_sending, pady=10)
stop_button.pack()

# Status Label
status_label = tk.Label(root, text="Status: Not sending")
status_label.pack()

root.geometry("300x250")  # 设置窗口大小为300x250

# 将窗口显示在屏幕中心
root.eval('tk::PlaceWindow . center')

sending = False  # 初始状态为未发送

root.mainloop()

 

接下来我们看下如何使用GUI-guider创建这个仪表盘并且实现这个功能的。(本文假设你已经下载和安装了GUI-guider)

 

1 - 打开GUI-guider

 

 

 

2- 创建新项目并且选择LVGL版本,选择8.35即可,上一章我们移植的LVGL是8.4。 并不冲突

  3- 选择模拟器

 

  4- 选择空项目

 

 

4- 根据屏幕大小选择不同的分辨率

 

  4 - 使用拖拽的方式绘制LVGL的页面,从左向右三个框分别是LVGL支持的所有组件, LVGL主视图和模拟器生成代码的按钮。

 

  5- 拖拽并且绘制仪表盘,可以在界面右侧更换背景颜色

  6- 模拟并且生成代码

 

  7- 选择C语言模拟器,并且点击确定

 

  8 - 模拟器运行效果
 

 

9 - 导出生成的代码

 

  10 - 导出后的文件夹

 

  11 - 复制src 到项目目录

 

  12- Keil 中新增分组,将Src文件夹生成所有可以包含的文件都包含进去

 

 

14- 新增文件的编译查找路径

 

 

15 - 程序主程序中,除了LVGL的核心移植还需要额外添加下述截图文件以及全局变量声明

  16 - 在主程序中初始化串口, 初始化LVGL

  17 - 中断回调函数中,更新LVGL的显示, 你可能需要引入#include "gui_guider.h"

 

 

现在我们来详细的梳理一下逻辑。 在单片机上,首先初始化串口以及中断回调。之后初始化LVGL,使屏幕可以正常显示仪表盘。然后启动上位机通过串口发送数据给单片机。当单片机收到数据之后触发中断,在中断中更新LVGL。

 

 

代码如下:

 

07-LVGL_GUI_GUIDER.zip (14.38 MB, 下载次数: 14)

 

上位机软件:

MemoryUsageSender.exe (10.64 MB, 下载次数: 14)

 

上位机代码:

MemoryUsageSender.py (2.73 KB, 下载次数: 2)

MemoryUsageSender.exe

10.64 MB, 下载次数: 5

最新回复

LVGL的效果确实不错啊,后续也准备搞一下     详情 回复 发表于 2024-6-23 11:34
点赞 关注
 
 

回复
举报

6992

帖子

11

TA的资源

版主

沙发
 

NXP给路人做了嫁衣了。。。

点评

好用不就可以嘛  详情 回复 发表于 2024-6-24 13:40
 
 
 

回复

6483

帖子

10

TA的资源

版主

板凳
 

LVGL的效果确实不错啊,后续也准备搞一下  

个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

194

帖子

4

TA的资源

纯净的硅(初级)

4
 
lugl4313820 发表于 2024-6-22 22:34 NXP给路人做了嫁衣了。。。

好用不就可以嘛

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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