目录

一、概述

1.1 案例介绍

1.2 适用对象

1.3 案例时间

1.4 案例流程

1.5 资源总览

二、环境和资源准备

2.1 准备开发环境

2.2 安装依赖

2.3 下载工具源码

2.4 华为云码道配置SKILL

三、chinese-font-ssd1306工具的介绍

3,1 工具简介

3.2 工具结构说明

3.3 基本使用方法

命令行参数

基本示例

3.4 多字体支持

3.5 生成的 C 代码结构

3.6 支持的字体列表

3.6.1 中文字体

3.6.2 英文字体

四、在WS63开发板上显示中文字体

五、常见问题

5.1 字体显示方向错误

5.2 如何减少数据量


本文首发于华为云论坛:https://bbs.huaweicloud.com/forum/thread-0212721077018358303-1-1.htmlhttps://bbs.huaweicloud.com/forum/thread-0212721077018358303-1-1.html

一、概述

1.1 案例介绍

本案例将基于AI IDE华为云码道(CodeArts)代码智能体构建在星闪开发板上显示中文字体的助手。本案例所介绍 chinese-font-ssd1306 skill工具将系统字体转换为 SSD1306 OLED 显示屏所需的点阵数据 C 语言代码。该工具支持中英文混合显示,可自定义字体名称、大小和风格,特别适合嵌入式 OLED 显示项目开发。通过本案例,开发者可以快速为自己的嵌入式项目生成美观的中文字体显示数据。理论上,该工具不仅能够用于星闪WS63开发板,也可以用于其他MCU。

1.2 适用对象

  • 企业开发者
  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计30分钟。

1.4 案例流程

说明:

  1. PC本地下载安装AI IDE,完成Windows版AI IDE华为云码道(CodeArts)代码智能体安装部署。
  2. 在AI IDE华为云码道的项目级SKILLs配置chinses-font-ssd1306 ,构建中文字体转换助手;
  3. 与华为云码道对话,调用chinses-font-ssd1306,完成中文字体的显示。

1.5 资源总览

本案例使用的资源均为免费资源。

资源名称规格单价(元)
华为云码道(CodeArts)代码智能体通用体验版免费
chinese-font-ssd1306 工具开源工具免费

二、环境和资源准备

2.1 准备开发环境

参考案例《AI IDE华为云码道(CodeArts)代码智能体安装部署》完成华为云码道(CodeArts)代码智能体Windows版AI IDE安装部署。

参考文档HiSpark Studio插件版本环境搭建构建星闪WS63开发板的开发环境。

2.2 安装依赖

chinese-font-ssd1306 工具依赖 Python 3.x 和 Pillow 库,执行以下命令安装:

pip install Pillow

2.3 下载工具源码

通过 git 下载源码到本地,代码仓地址:https://gitcode.com/zealsoft/chinese-font-ssd1306.git

git clone https://gitcode.com/zealsoft/chinese-font-ssd1306.git
cd chinese-font-ssd1306

2.4 华为云码道配置SKILL

  1. 在码道右上角打开设置,进入设置界面后选择技能与规则,在项目级板块下技能的右侧点“+ 新建”。编辑技能名称(样例:chinese-font-ssd1306),然后点确定。

  2. 点确定后,系统自动在当前目录下创建.codeartsdoer/skills/chinese-font-ssd1306目录,并在该目录下新建了一个SKILL.md文件。

  3. 将“2.3 下载工具源码”中下载文件替换/拷贝到.codeartsdoer/skills/chinese-font-ssd1306目录下,系统将自动加载至项目级SKILL。

三、chinese-font-ssd1306工具的介绍

3,1 工具简介

在 SSD1306 OLED 开发中使用汉字点阵转换工具,核心目的是解决嵌入式设备的显示资源限制,实现高效、精准的图形 / 文字渲染,具体原因可分为以下 4 个核心维度:

嵌入式系统(如 WS63、STM32、ESP32、Arduino)的 Flash 和 RAM 资源通常十分有限(KB 级或 MB 级):

  • 一个 16x16 的汉字,转换为点阵后仅占用 32 字节(16×16÷8),而如果保存整个字库可能需要数M字节;
  • 点阵数据为纯静态数组,可直接存入 Flash 中,运行时无需动态分配内存,避免内存溢出风险。

SSD1306 屏幕分辨率低(常见 128×64),点阵工具可自定义取模规则(如列行式、水平扫描),确保生成的数据与驱动库完全兼容,避免文字 “错位”“颠倒”。• 点阵工具支持批量转换,可一次性生成多个汉字的点阵数据,直接复制到代码中使用;生成的 C 语言数组可跨平台复用(如从 WS63 移植到 STM32),无需因硬件平台更换而重新调整显示逻辑。

点阵转换工具本质是 “通用字体→嵌入式专用点阵” 的桥梁,其核心价值是在嵌入式系统的资源限制与显示需求之间找到平衡,既保证了运行效率,又简化了开发流程,是 SSD1306 等点阵式 OLED 开发的必备工具。

3.2 工具结构说明

项目结构如下:

chinese-font-ssd1306/
├── README.md                   # 说明文档
├── SKILL.md                    # Skill 主文档
├── scripts/
│   └── font_converter.py       # 字体转换脚本
└── references/
    └── ssd1306_guide.md        # SSD1306 技术参考

3.3 基本使用方法

命令行参数

参数说明默认值
-t, --text要转换的文本-
-i, --input输入文本文件路径-
-o, --output输出 C 代码文件路径font_data.c
-f, --font字体名称宋体
-s, --size字体大小(16-64)16
--bold使用粗体False
--italic使用斜体False
--prefix数组名前缀font_data

基本示例

# 转换文本,使用默认宋体 16x16
python scripts/font_converter.py -t "你好世界" -o font_data.c

# 使用微软雅黑,32x32 大小
python scripts/font_converter.py -t "你好世界" -f "微软雅黑" -s 32 -o font_data.c

# 使用粗体
python scripts/font_converter.py -t "你好世界" --bold -o font_data.c

3.4 多字体支持

当需要在同一项目中使用多种字体时,使用 --prefix 参数为每种字体指定不同的前缀:

# 生成宋体字体数据
python scripts/font_converter.py -t "春暖花开" -f "宋体" -s 32 --prefix "songti" -o font_songti.c

# 生成仿宋字体数据
python scripts/font_converter.py -t "安康顺遂" -f "仿宋" -s 32 --prefix "fangsong" -o font_fangsong.c

3.5 生成的 C 代码结构

生成的 C 代码包含以下部分:

  1. 字符信息结构体:包含 Unicode 编码、宽度、高度和数据指针
  2. 字符数据数组:每个字符的点阵数据
  3. 字符索引表:所有字符的查找表
  4. 查找函数:根据 Unicode 编码查找字符数据

示例代码结构:

// 字符信息结构体
#ifndef CHARINFO_DEFINED
#define CHARINFO_DEFINED
typedef struct {
    uint16_t char_code;    // Unicode编码
    uint8_t width;         // 字符宽度
    uint8_t height;        // 字符高度
    const uint8_t *data;   // 点阵数据指针
} CharInfo;
#endif

// 字符数据数组
const unsigned char songti_char_0000[128] = { ... };

// 字符索引表
const CharInfo songti_chars[4] = {
    { 0x6625, 32, 32, songti_char_0000 },
    ...
};

// 查找函数
const CharInfo* songti_find_char(uint16_t code) { ... }

3.6 支持的字体列表

3.6.1 中文字体

字体名称文件名说明
宋体simsun.ttc默认字体,适合一般显示
黑体simhei.ttf粗体风格,适合标题
微软雅黑msyh.ttc现代风格,显示清晰
楷体simkai.ttf手写风格
仿宋simfang.ttf传统风格

3.6.2 英文字体

字体名称文件名说明
Arialarial.ttf无衬线字体
Times New Romantimes.ttf衬线字体

四、在WS63开发板上显示中文字体

  1. 返回华为云码道对话界面,输入如下问题:“复制application\samples\peripheral\helloworld_oled到application\samples\peripheral\qingming,将qingming工程加入到系统的配置文件,使用chinese-font-ssd1306工具将显示内容改为宋体的“春暖花开”和仿宋体“安康顺遂”,均为32*32。”

  2. 等待码道自动生成。

  3. 进入HiSpark的系统配置页面,选中Qingming例程,并保存。

  4. 使用HiSpark的“编译”工具编译工程

  5. 使用HiSpark的“烧录”工具下载程序

  6. 程序烧录成功后,开发板会显示中文字体。

五、常见问题

5.1 字体显示方向错误

本工具生成**水平字节排列(Row-major)**格式的点阵数据。如果显示方向错误,请检查您的 SSD1306 驱动是否支持此格式。也可以让华为云码道修复显示代码以适应开发板驱动程序

5.2 如何减少数据量

解决方案:

  1. 只包含实际需要的字符
  2. 使用较小的字体大小
  3. 分多个文件按需加载

【案例共创】【第10期】华为云码道(CodeArts)代码智能体 + SKILL完成应用开发/调试实践https://bbs.huaweicloud.com/forum/thread-0212720921179660512-1-1.html

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐