当前位置: 首页 > article >正文

在 RT-Thread 上使用单色屏 UI 库 - U8G2

U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306等多种类型的OLED驱动。

U8g2的官方开源地址为:https://github.com/olikraus/u8g2

由于官方已经对 RT-Thread 做了一定的适配,并且存在于 RT-Thread 的软件包生态中,所以在 RT-Thread 平台上使用这个 UI 库会变得非常简单,接下来我们就来详细演示一下。

演示所用到的资源如下:

  • ART - PI

  • 128 * 64 OLED (SSD1306驱动)

  •  RT-Thread Studio V2.2.6

虽然我用到的硬件为 ART-PI,但由于RT-Thread 本身是支持多种芯片和开发板的,所以如果使用的是其他硬件平台,其配置与使用方法也都是一样的。

同时由于 u8g2 本身也支持了多种单色屏驱动芯片(如SSD1306,SH1107,ST7511等)与通信方式(IIC、SPI等),因此即使你手中的屏幕不是 SSD1306 驱动的,通过参考样例中的代码进行少量修改甚至无须修改也能够运行起来。

接下来我们开始创建工程。打开 RT-Thread Studio,新建一个 RT-Thread 项目,选择基于开发板,在开发板列表中选择 STM32H750-RT-ART-Pi,工程的详细参数如下图所示:

如果你的开发板列表中没有STM32H750-RT-ART-Pi,则需要在 SDK-Manager 中下载这个SDK,具体步骤如下:

1. 点击上方工具栏中的 SDK Manager 按钮:

2. 在弹出的 SDK 管理器界面中打开 Board_Support_Packages,并找到 STMicroelectronics 一栏:

3. 在该栏目中找到 STM32H750-RT-ART-Pi 并选择最新版本进行安装:

图片

基础工程创建好后,我们点击项目资源管理器的 RT-Thread Settings 按钮打开软件包管理界面,并点击 添加软件包 按钮。

图片

在弹出的软件包选择界面的搜索栏中输入 u8g2 进行搜索,并选择搜索结果中的 u8g2-official 进行添加,该版本是 u8g2 官方版本,也是最新版本。

图片

添加完成后我们关闭选择界面,来到软件包管理界面的主界面,此时可以看到列表中已经出现了 u8g2 的软件包卡片,此时我们将鼠标移到 u8g2 卡片上,点击 配置项 进行配置。

图片

由于我使用的 OLED 是 SSD1306 与 I2C 驱动的(软件模拟I2C),而官方正好有对应的例程,因此在配置项中,仅需打开 U8G2 Examples -> SSD1306(I2C的版本):

图片

点击上方工具栏的保存按钮或使用 Ctrl+S 进行配置保存,此时 RT-Thread Studio 会自动下载软件包并完成配置。

图片

工程配置好后我们还需要修改I2C接口对应的引脚。打开 packages > u8g2-official-latest > sys > rt-thread > examples 下的例程源文件:

图片

找到开头的两个I2C引脚定义,由于我是接到了 H2 和 H3 两个 GPIO上,因此我的配置修改为:

图片

修改完成后点击编译:

图片

编译通过,此时就可以下载我们的例程到板子里了。不过这里需要注意,当前步骤在 RT-Thread Studio 下是可以编译成功的,但是如果你是 MDK,则在此时是会编译出错的,具体什么原因这里留个悬念,下次出 MDK 环境的使用案例时会讲到并解决这个编译问题。

下载完成后我们的屏幕上暂时还没有显示,这是因为例程中是通过一个命令行的指令来启动 U8G2 显示的:

图片

可以看到这里注册了 u8g2_ssd1306_12864_sw_i2c_example 这个命令。

此时需要我们打开终端,连接到 ART-PI 的命令行,输入 u8g2 再按下 TAB 键,系统会自动补全指令:

图片

按下回车后即可看到屏幕被点亮:

图片

此时我们的 U8G2 就能够正常工作了。接下来就靠大家发挥各自的想象力,去创造属于自己的有趣界面吧!


http://www.kler.cn/a/301349.html

相关文章:

  • 【Android】Proxyman 抓 HTTP 数据包
  • Springboot基于GIS的旅游信息管理系统
  • 【算法】【优选算法】前缀和(下)
  • esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器
  • 深度解读混合专家模型(MoE):算法、演变与原理
  • Oracle OCP认证考试考点详解082系列19
  • 【Shiro】Shiro 的学习教程(四)之 SpringBoot 集成 Shiro 原理
  • 海外云手机是否适合运营TikTok?
  • Kubernetes部署(haproxy+keepalived)高可用环境和办公网络打通
  • Java 21的Preferences API的笔记
  • 分布式中间件-几个常用的消息中间件
  • redis基本数据结构-hash
  • 数据分析-11-时间序列分析的概念任务和主要方法
  • 第R2周:LSTM-火灾温度预测
  • C语言——希尔排序
  • Qt什么时候触发paintEvent事件
  • 【论文笔记】NDT: Neural Data Transformers (NBDT, 2022)
  • 一些深度学习相关指令
  • 【Qt】按钮样式--按钮内部布局(调整按钮文本和图标放置在任意位置)
  • 上海亚商投顾:沪指探底回升 华为产业链午后爆发
  • 【深度学习讲解笔记】第1章-机器学习基础(3)
  • Oracle Data Guard:Oracle数据库的高可用性和灾难恢复解决方案
  • 最近试用了FunHPC-AI宝箱-ComfyUI-Plus,使用了dreamshaperXL全能模型,生成了几张国风图,效果真的让人惊叹!
  • 安装MongoDB
  • 企业数字化转型、建设和升级面临的主要难题和解决之道(2)
  • 【机器学习】模型性能与可解释性的矛盾以及如何提高可解释性和模型性能