QT&LVGL 实例:基于 GUI 的 GPIO 交互控制

实验目的与条件说明

掌握 LVGL 图形库在嵌入式 Linux 环境下的交叉编译与部署,学习 Linux FrameBuffer (/dev/fb0) 显示驱动与 evdev 触摸屏输入子系统的配置。并验证基于图形界面的触摸事件与底层硬件节点(sysfs GPIO)的业务逻辑联动。

特殊条件说明:由于本开发板未预留空闲的板载用户 LED 指示灯,本次实验采用“纯软件模拟 + 底层节点监控”的方式进行功能验证,不依赖物理外接灯珠。

源码获取

源码可通过以下链接获取
通过网盘分享的文件:platform-demos.tar.gz
链接: https://pan.baidu.com/s/1lT_51v6SzPFyb8oL67GmEg
提取码: YZJS

核心实现机制

程序初始化时,通过 sunxifb_init() 映射屏幕内存,并通过 evdev_init() 绑定真实的触摸屏节点 /dev/input/event1(设备名 goodix-ts)。
界面创建了两个状态显示 Label(灰底代表 OFF,绿底代表 ON)和两个控制按钮。为按钮注册 LV_EVENT_CLICKED 事件:

  • 底层控制:通过 C 语言 open 与 write 函数,直接向 /sys/class/gpio/gpio43/value 写入 "1" 或 "0",实现引脚电平翻转。
  • UI 反馈:同步切换状态,调用 lv_label_set_text() 修改文字,并通过 lv_obj_set_style_bg_color() 将色块由灰色切换为绿色。

编译工程

进入工程目录,在终端中先后执行 make clean 和 make 命令。

make clean    # 清理一下工程
make CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++   # 交叉编译

编译完成后,确认生成了名为 lvgl_led_control 的可执行文件。

运行与现象验证

将可执行文件 lvgl_led_control 传输到开发板的 root 目录中。为了确保程序能够正常读取触摸屏的输入事件,需先在开发板终端赋予设备权限:

# 给触摸屏节点赋予读写权限
chmod 777 /dev/input/event1

# 运行 LVGL 界面程序
./lvgl_led_control

观察现象:

开发板屏幕成功点亮,显示预期的 GUI 界面布局,触摸光标正常显示。

用手指触摸点击屏幕上的 “LED0 Control” 按钮。

物理层验证:在另一个终端通过 cat /sys/class/gpio/gpio43/value 监控,可观察到引脚节点数值由 0 变为 1。

视觉层验证:屏幕界面上的对应色块瞬间由灰色变为绿色,文字更新为 “LED0 is ON”。

图注:LVGL 运行效果实物图(左侧方块变绿,显示 ON 状态)

作者:林晓燕  创建时间:2026-10-22 17:44
最后编辑:林晓燕  更新时间:2026-11-05 14:56