815|7

83

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第2期】+ 控制屏幕显示中文 [复制链接]

 

本帖最后由 swzswz 于 2023-8-12 11:10 编辑

控制屏幕显示中文总体流程

很高兴参加第二期的活动,由于第一期也是用micropython语言进行编程,第二期仍然采用这个进行编程。最开始想用板载的tft 7789芯片彩屏进行中文显示,但是没能成功。后来借助第一期的OLED显示,利用0.96寸的屏幕进行中文显示,过程分为两部分:

  • 首先找到中文字体的文件ttf,利用otf2bdf命令(linux)进行文件格式转换,再利用adafruit_bitmap_font模块导入BDF字体
  • 在样例文件ssd1306的模版上进行改进,主要是替换字体,已经修改显示的字符,将字符改成中文。

注意提前搭建好环境,安装thonny软件,以及将相应的库导入到板子中,放到其lib目录下。可以参考dk_adafruit_esp32_s3_tft_feather_en.pdf这个文档。具体我放在附件中。


字体格式转换以及导入字体

  1. 字体转换 参考https://learn.adafruit.com/custom-fonts-for-pyportal-circuitpython-display/use-otf2bdf这个链接,先进行otf2bdf命令脚本安装,再执行转换。 电脑字体文件,在系统盘(c盘)下的/windows/font目录下,下面是我的字体截图。

利用linux环境进行字体转换,我用ubuntu22,ssh远程命令进行转换。

  1. sudo ap-get install otf2bdf
  2. otf2bdf STXINWEI.TTF -p 12 -o STXINWEI.bdf

转换后的字体导入板子中,由于文件太大,我直接在电脑上写代码,保存在电脑中,如下图。

  1. 字体导入 利用adafruit_bitmap_font模块导入字体,并将bitmap进行更新,具体可以看这个模块的使用,
  1. from adafruit_bitmap_font import bitmap_font
  2. from displayio import Bitmap
  3. font = bitmap_font.load_font("./font/STXINWEI.bdf", Bitmap)

中文显示

借助displayio_ssd1305_simpletest.py模版,我们主要修改的代码在两个位置,如下,第一个是文本字符串改成中文,第二个是label函数第一个参数改成导入的字体。

  1. text = "中国人"
  2. text_area = label.Label(
  3. font, text=text, color=0xFFFFFF, x=28, y=HEIGHT // 2 - 1
  4. )

总代码如下:

  1. # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
  2. # SPDX-License-Identifier: MIT
  3. """
  4. This test will initialize the display using displayio and draw a solid white
  5. background, a smaller black rectangle, and some white text.
  6. """
  7. # SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
  8. # SPDX-License-Identifier: MIT
  9. """
  10. This test will initialize the display using displayio and draw a solid white
  11. background, a smaller black rectangle, and some white text.
  12. """
  13. import board
  14. import displayio
  15. import terminalio
  16. from adafruit_display_text import label
  17. import adafruit_displayio_ssd1306
  18. from adafruit_bitmap_font import bitmap_font
  19. from displayio import Bitmap
  20. displayio.release_displays()
  21. oled_reset = board.D9
  22. font = bitmap_font.load_font("STXINWEI.bdf", Bitmap)
  23. # Use for I2C
  24. i2c = board.I2C()# uses board.SCL and board.SDA
  25. # i2c = board.STEMMA_I2C()# For using the built-in STEMMA QT connector on a microcontroller
  26. display_bus = displayio.I2CDisplay(i2c, device_address=0x3C, reset=oled_reset)
  27. # Use for SPI
  28. # spi = board.SPI()
  29. # oled_cs = board.D5
  30. # oled_dc = board.D6
  31. # display_bus = displayio.FourWire(spi, command=oled_dc, chip_select=oled_cs,
  32. # reset=oled_reset, baudrate=1000000)
  33. WIDTH = 128
  34. HEIGHT = 32# Change to 64 if needed
  35. BORDER = 5
  36. display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)
  37. # Make the display context
  38. splash = displayio.Group()
  39. display.show(splash)
  40. color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1)
  41. color_palette = displayio.Palette(1)
  42. color_palette[0] = 0xFFFFFF# White
  43. bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
  44. splash.append(bg_sprite)
  45. # Draw a smaller inner rectangle
  46. inner_bitmap = displayio.Bitmap(WIDTH - BORDER * 2, HEIGHT - BORDER * 2, 1)
  47. inner_palette = displayio.Palette(1)
  48. inner_palette[0] = 0x000000# Black
  49. inner_sprite = displayio.TileGrid(
  50. inner_bitmap, pixel_shader=inner_palette, x=BORDER, y=BORDER
  51. )
  52. splash.append(inner_sprite)
  53. # Draw a label
  54. # text = "Hello World!"
  55. text = "中国人"
  56. text_area = label.Label(
  57. font, text=text, color=0xFFFFFF, x=28, y=HEIGHT // 2 - 1
  58. )
  59. splash.append(text_area)
  60. while True:
  61. pass

现象

先点击软件thonny中的stop按钮,再点击运行,oled上会有“中国人”字符显示。

下面是附件,一个是文档说明,一个是代码。

ssd1306_chinese.py

(2 KB, 下载次数: 1)

Adafruit ESP32-S3 TFT Feather 入门手册.pdf

(18.64 MB, 下载次数: 2)

最新回复

会python就非常不错了,我基本上没接触过,还是一点一点根据推荐来吧   详情 回复 发表于 2023-8-14 15:20
点赞(1) 关注
 
 

回复
举报

7145

帖子

11

TA的资源

版主

沙发
 
解决能力也太强了吧,给你点赞!

点评

共同学习,参考这个我也是找了半天,主要python我会,但是具体找这个函数和库有点麻烦,参考网页和github搞了半天  详情 回复 发表于 2023-8-14 14:31
 
 
 

回复

6713

帖子

9

TA的资源

版主

板凳
 

内存大就是好,中文字库都能放下  

点评

内存还可以,大概4m,将库文件和字体文件放进去就没多少了  详情 回复 发表于 2023-8-14 14:30
个人签名

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

 
 
 

回复

7350

帖子

2

TA的资源

版主

4
 

字库放到板子上了?还是生成的中文点阵再放到板子上?

点评

字库用工具将ttf转成bcf,再放到板子上,文章有具体的描述  详情 回复 发表于 2023-8-14 14:29
 
 
 

回复

83

帖子

1

TA的资源

一粒金砂(中级)

5
 
wangerxian 发表于 2023-8-14 10:20 字库放到板子上了?还是生成的中文点阵再放到板子上?

字库用工具将ttf转成bcf,再放到板子上,文章有具体的描述

 
 
 

回复

83

帖子

1

TA的资源

一粒金砂(中级)

6
 
秦天qintian0303 发表于 2023-8-13 19:25 内存大就是好,中文字库都能放下  

内存还可以,大概4m,将库文件和字体文件放进去就没多少了

 
 
 

回复

83

帖子

1

TA的资源

一粒金砂(中级)

7
 
lugl4313820 发表于 2023-8-13 08:46 解决能力也太强了吧,给你点赞!

共同学习,参考这个我也是找了半天,主要python我会,但是具体找这个函数和库有点麻烦,参考网页和github搞了半天

点评

会python就非常不错了,我基本上没接触过,还是一点一点根据推荐来吧  详情 回复 发表于 2023-8-14 15:20
 
 
 

回复

6713

帖子

9

TA的资源

版主

8
 
swzswz 发表于 2023-8-14 14:31 共同学习,参考这个我也是找了半天,主要python我会,但是具体找这个函数和库有点麻烦,参考网页和github ...

会python就非常不错了,我基本上没接触过,还是一点一点根据推荐来吧

个人签名

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

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表