arduino如何在ssd1306上显示中文字符
一、前言
arduino的强大之处是在于它有很多开源库支持,一个不懂硬件的人可以轻易上手。它支持各种各样的外设,有各种通讯接口,那么我们可以无限发挥自己的创意,只要你能想得出来的,arduino都可以实现。本篇文章是讲述arduino怎样驱动oled 1306,使用的接口是I2C。
二、准备硬件和软件
1.准备一块ssd1306液晶显示模块,一块arduino开发板。
2.准备arduino IDE,下载地址在:https://www.arduino.cc/
3.下载ssd 1306的支持库u8g2:下载地址在:https://github.com/olikraus/u8g2 利用命令可以下载下来:
git clone https://github.com/olikraus/u8g2.git
或者在arduino上安装u8g2:(1)打开管理库:
(2)搜索并安装u8b2
三、用arduino驱动oled显示屏
(1)接线。我用的是esp32,这个1306的屏幕是使用i2c,我只需在esp32上选取两个引脚作为i2c即可,而1306需要3.3v供电,再接两根线供电。
(2)打开u8b2的例程。
(3)配置工程的引脚和通讯方式。只需要根据屏幕的通讯方式和接的I2C引脚配置即可,配置方式是选择对应的配置去掉注释。我用的是SSD1306_128X64,用了I2C接口,使用23和22作为i2c的引脚,所以我配置是:
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 23, /* data=*/ 22, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
代码如下:
void setup(void) {u8g2.begin();u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}void loop(void) {u8g2.setFont(u8g2_font_unifont_t_chinese2); // use chinese2 for all the glyphs of "你好世界"u8g2.setFontDirection(0);u8g2.clearBuffer();u8g2.setCursor(0, 15);u8g2.print("Hello World!");u8g2.setCursor(0, 40);u8g2.print("世界你好"); // Chinese "Hello World" u8g2.sendBuffer();delay(1000);
}
显示效果如下:
三、制作自定义的字库
u8b2官方的库只能显示很少的中文,如果要显示其他中文就要自己制作字库了。制作字库的工具在目录在:
u8g2\tools\font\bdfconv
bdfconv.exe这个工具是一个dos命令,需要开启cmd.exe在命令行输入命令或者用bat脚本来生成字库。bdfconv.exe命令的使用方法如下:
bdfconv [options] filename
-h Display this help
-v Print log messages
-b <n> Font build mode, 0: proportional, 1: common height, 2: monospace, 3: multiple of 8
-f <n> Font format, 0: ucglib font, 1: u8g2 font, 2: u8g2 uncompressed 8x8 font (enforces -b 3)
-m 'map' Unicode ASCII mapping
-M 'mapfile' Read Unicode ASCII mapping from file 'mapname'
-o <file> C output file
-n <name> C indentifier (font name)
-d <file> Overview picture: Enable generation of bdf.tga and assign BDF font <file> for description
-l <margin> Overview picture: Set left margin
-a Overview picture: Additional font information (background, orange&blue dot)
-t Overview picture: Test string (Woven silk pyjamas exchanged for blue quartz.)
-r Runtime testmap := <mapcmd> { "," <mapcmd> }
mapcmd := <default> | <maprange> | <exclude>
default := "*"
maprange := <range> [ ">" <addexpr> ] Move specified glyph <range> to target code <num>
exclude := "~" <range>
range := <addexpr> [ "-" <addexpr> ] Select glyphs within specified range
addexpr := <mulexpr> [ "+" <mulexpr> ]
mulexpr := <num> [ "*" <num> ]
num := <hexnum> | <decnum>
hexnum := "$" <hexdigit> { <hexdigit> }
decnum := <decdigit> { <decdigit> }
decdigit := "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
hexdigit := "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F" | <decdigit>
{ } zero, one ore more, [ ] zero or once, | alternative
example:-m '32-255' select gylphs from encoding 32 to 255-m '32-255,~64' select gylphs from encoding 32 to 255, exclude '@'-m '32,48-57' select space, '1', '2', ... '9'
build modes:-b 0: Most compact, glyph bitmap is minimal-b 1: Like -b 0, but glyph bitmap is extended to the height of the largest glyph within the selected glyph list.Also the width of the gylphs is extended to cover the delta x advance.-b 2: Like -b 1, but glyph width is set to the width of the largest glyph within the selected gylph list.-b 3: Like -b 2, but width and height are forced to be a multiple of 8.
在“bdfconv”目录下有一个脚本 “test_helvb18.bat” ,
bdfconv.exe -v -f 1 -m "32-127" ../bdf/helvB18.bdf -o helvb18_tf.c -n u8g2_font_helvB18_tf -d ../bdf/helvB18.bdf
type helvb18_tf.c
我们可以利用这个脚本来生成字库,这个是直接通过“helvB18.bdf”字库文件生成 ".C"的字库数据,而中文字库很大,一般都有几M大小,显然这种直接生成的方法不好用。还有另外一种字库生成方法是按需提取字库,利用一个map表来提取要生成字库的内容,map表里面放置的是unicode编码(需要哪些中文就填这些中文的unicode码)。这种生产方式的命令是:
bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese1.map -d ../bdf/7x13.bdf -n u8g2_font_unifont_zgzt -o u8g2_font_unifont_zgzt.c
从这个命令我们可以知道map文件是 “chinese1.map”,全路径是:“u8g2\tools\font\build”,我们可以在“chinese1.map”文件里面添加我们要显示的中文。生产的字库代码在u8g2_font_unifont_zgzt.c里面,我们可以拷贝里面的内容,然后把它替换" U8g2\src\clib\u8g2_fonts.c " 里面的数组“u8g2_font_unifont_t_chinese1”的内容。
参考资料:
1.https://github.com/olikraus/u8g2
2.https://clz.me/u8g2-bdfconv/
3.查看unicode编码的方法
arduino如何在ssd1306上显示中文字符相关推荐
- STM32如何在LCD上显示单词、文字、图片等
本文将介绍STM32F103R6如何在LCD12864上显示文字图片 注:本文中用到的字模软件,我放在了文章末尾,点击链接即可下载,是绿色版软件,解压即可使用! 点击下载LCD12864上显示文字图片 ...
- java写pdf中文不显示_java – iText pdf在使用NOTO字体或Source Hans时不显示中文字符...
我正在尝试使用NOTO字体( https://www.google.com/get/noto/)来显示中文字符.这是我的示例代码,来自iText的修改示例代码. public void createP ...
- UIQ3.0系列--在模拟器上显示中文
如何在UIQ3.0SDK的模拟器上显示中文? ============================================================= UIQ3.0的SDK并没有 ...
- 西门子二代精简屏无法正常显示中文字符时,如何给屏幕传送Chinese fonts?
西门子二代精简屏无法正常显示中文字符时,如何给屏幕传送Chinese fonts? 在项目实际使用中,可能需要在触摸屏屏上显示中文字符串.往往会遇到HMI设备上部分中文无法正常显示,此时可以尝试给屏传 ...
- opencv-图像上显示中文
运行环境: vs2013.opencv3.3.win10-64bit 下载显示中文类: OpenCV默认是不支持显示中文字符的,于是网上有人自己写了一个类实现,只需要下载到自己的代码文件中,添加头文件 ...
- 在屏幕上输出你好的python语句是_编程实现:在屏幕上输出中文字符“你好,世界”。(输出结果中不带双引号)_学小易找答案...
[填空题]借战死者诉说战争灾难的汉乐府诗是( ). [判断题]15 的倍数有 15 . 30 . 45 . ( ) [填空题]表现贫民意欲反抗的汉乐府诗是( ). [判断题]不可以在同一台计算机上安装 ...
- win10显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法
与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统.但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览" 库"文件夹并清除旧日志, ...
- mac 显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法
与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统.但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览" 库"文件夹并清除旧日志, ...
- PHP页面显示中文字符出现乱码
[出现问题] php页面显示中文字符出现乱码 [解决方法] 在php页面的代码前插入一行代码即可 header("Content-Type: text/html;charset=utf-8& ...
最新文章
- Dockerfile 里指定执行命令用RUN 、ENTRYPOING和用CMD有何不同?
- JavaScript对象的chapterI
- Debian 8开启sftp服务
- Intel Core Enhanced Core架构/微架构/流水线 (7) - 栈指针跟踪器/微熔合
- 马上开始的机器学习顶会ICML该关注什么?论文集、精彩Workshop都在这里
- 关于三角函数图像的思考
- 使用Visual Studio进行单元测试-Part4
- JAVA深入研究——Method的Invoke方法(转)
- Java多线程篇之List与Collections集合工具类
- Nacos1.4.1下载与配置
- 第四章:字处理软件Word 2010——知识点整理
- 嗅觉AI:为减少食物浪费出点力
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT ...
- Erlang_ets冷门函数fun2ms
- SPSS学习笔记 -- 独立样本t检验
- Onenote无法登录报错显示0xE000078D解决方法
- 区块链学习笔记:区块链到底能干什么
- Android之Fragment应用——一个简易版的新闻应用
- matlab对图像频谱图分析,应用Matlab对图像信号进行频谱分析及滤波
- vscode的下载与安装教程