一、前言

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上显示中文字符相关推荐

  1. STM32如何在LCD上显示单词、文字、图片等

    本文将介绍STM32F103R6如何在LCD12864上显示文字图片 注:本文中用到的字模软件,我放在了文章末尾,点击链接即可下载,是绿色版软件,解压即可使用! 点击下载LCD12864上显示文字图片 ...

  2. java写pdf中文不显示_java – iText pdf在使用NOTO字体或Source Hans时不显示中文字符...

    我正在尝试使用NOTO字体( https://www.google.com/get/noto/)来显示中文字符.这是我的示例代码,来自iText的修改示例代码. public void createP ...

  3. UIQ3.0系列--在模拟器上显示中文

    如何在UIQ3.0SDK的模拟器上显示中文? =============================================================   UIQ3.0的SDK并没有 ...

  4. 西门子二代精简屏无法正常显示中文字符时,如何给屏幕传送Chinese fonts?

    西门子二代精简屏无法正常显示中文字符时,如何给屏幕传送Chinese fonts? 在项目实际使用中,可能需要在触摸屏屏上显示中文字符串.往往会遇到HMI设备上部分中文无法正常显示,此时可以尝试给屏传 ...

  5. opencv-图像上显示中文

    运行环境: vs2013.opencv3.3.win10-64bit 下载显示中文类: OpenCV默认是不支持显示中文字符的,于是网上有人自己写了一个类实现,只需要下载到自己的代码文件中,添加头文件 ...

  6. 在屏幕上输出你好的python语句是_编程实现:在屏幕上输出中文字符“你好,世界”。(输出结果中不带双引号)_学小易找答案...

    [填空题]借战死者诉说战争灾难的汉乐府诗是( ). [判断题]15 的倍数有 15 . 30 . 45 . ( ) [填空题]表现贫民意欲反抗的汉乐府诗是( ). [判断题]不可以在同一台计算机上安装 ...

  7. win10显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法

    与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统.但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览" 库"文件夹并清除旧日志, ...

  8. mac 显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法

    与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统.但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览" 库"文件夹并清除旧日志, ...

  9. PHP页面显示中文字符出现乱码

    [出现问题] php页面显示中文字符出现乱码 [解决方法] 在php页面的代码前插入一行代码即可 header("Content-Type: text/html;charset=utf-8& ...

最新文章

  1. Dockerfile 里指定执行命令用RUN 、ENTRYPOING和用CMD有何不同?
  2. JavaScript对象的chapterI
  3. Debian 8开启sftp服务
  4. Intel Core Enhanced Core架构/微架构/流水线 (7) - 栈指针跟踪器/微熔合
  5. 马上开始的机器学习顶会ICML该关注什么?论文集、精彩Workshop都在这里
  6. 关于三角函数图像的思考
  7. 使用Visual Studio进行单元测试-Part4
  8. JAVA深入研究——Method的Invoke方法(转)
  9. Java多线程篇之List与Collections集合工具类
  10. Nacos1.4.1下载与配置
  11. 第四章:字处理软件Word 2010——知识点整理
  12. 嗅觉AI:为减少食物浪费出点力
  13. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT ...
  14. Erlang_ets冷门函数fun2ms
  15. SPSS学习笔记 -- 独立样本t检验
  16. Onenote无法登录报错显示0xE000078D解决方法
  17. 区块链学习笔记:区块链到底能干什么
  18. Android之Fragment应用——一个简易版的新闻应用
  19. matlab对图像频谱图分析,应用Matlab对图像信号进行频谱分析及滤波
  20. vscode的下载与安装教程

热门文章

  1. 环材化生劝退文章汇总 2019.3
  2. 循环介绍while循环
  3. BBEdit for Mac,专业html文本编辑器
  4. ios12屏蔽更新描述文件文件失效
  5. Thread线程从零认识到深层理解——初识
  6. 智慧工地起重机塔吊机在线远程无线监测方案
  7. 苹果证书 pp文件 appid
  8. 学号信息提取(PTA厦大慕课)
  9. 【批处理脚本】-3.3-exit命令详解
  10. cocos2dx luabinding C/C++/LUA部分