arduino u8g2库字体设置

常用函数

[字符顯示相關函式]
⬝ u8g2.drawStr(x, y, s)
說明:在座標 x,y 位置顯示字串,一般都配搭setFont函數設定字體使用,不能繪製 encoding 超過256的,也就是只能顯示英數字符號,超過256需要用 drawUTF8()或drawGlyph()顯示。s字串要加雙引號""。

⬝ u8g2.drawUTF8(x, y, s)
說明:在左下角座標 x,y 位置繪製 UTF8 編碼的字符,大部分Arduino 開發板已有支援。

⬝ u8g2.getDisplayHeight()
說明:取得顯示器的高度

⬝ u8g2.getDisplayWidth()
說明:取得顯示器的寬度

⬝ u8g2.getMaxCharHeight()
說明:取得當前字體裡的最大字符的高度。

⬝ u8g2.getMaxCharWidth()
說明:取得當前字體裡的最大字符的寬度。

⬝ u8g2.getStrWidth()
說明:取得字串的像素寬度。

⬝ u8g2.getUTF8Width()
說明:取得 UTF-8 字符串的像素寬度。

⬝ u8g2.setAutoPageClear(mode)
說明:設置自動清除緩衝區。0:表示關閉,1:表示開啟。

⬝ u8g2.setCursor(x, y)
說明:設定繪製游標位置

⬝ u8g2.setDisplayRotation(u8g2_cb) 說明:設置顯示器的旋轉角度。
U8G2_R0 不旋轉
U8G2_R1 旋轉90度
U8G2_R2 旋轉180度
U8G2_R3 旋轉270度
U8G2_MIRROR 不旋轉,但影像是水平鏡像呈現

⬝ u8g2.enableUTF8Print()
說明:啟用 UTF8字集,許可UniCode向print發送字串。這個函數通常在begin()後調用。

⬝ u8g2.disableUTF8Print()
說明:禁用 UTF8字集 (Unicode字形檔),預設是開啟的。

⬝ u8g2.setFontDirection(dir)
說明:設定顯示字串或字形的繪製方向。
0 :旋轉 0 度,顯示從左到右。
1 :旋轉 90度,顯示從上到下。
2 :旋轉 180度,顯示右到左。
3 :旋轉 270度,顯示從下到上。

⬝ u8g2.setFont(*font)
說明:設置字體集。中文字符集需要較大的記憶體,Uno等較小的開發板常會超過記憶體用量,請更換Mega或其他較大記憶體的開發板。

 

 

 

很重要的

让arduino的print支持UTF8 主要是支持中文

u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function

u8g2.setContrast(200);        // 设置亮度(0-255),似乎用不了,不用也行。

u8g2.begin();       // 初始化的设置

这个begin要放在最下面好像 上面还有setbusclock什么的

 

设置字体

u8g2.setFont(u8g2_font_wqy15_t_gb2312b);

选择字体,u8g2_font_wqy15_t_gb2312b就是汉字。字号从12-16,把前面15改掉来选择。

英文的一般用:u8g2_font_unifont_t_symbols和u8g2_font_ncenB12_tr

中文字体16号就占用了320K空间。

字体非常占用空间

查询字库参考:Wiki - Gitee.com

新版加入了文泉驿字库,有以下几个:

u8g2_font_wqy16_t_chinese1

u8g2_font_wqy16_t_chinese2

u8g2_font_wqy16_t_chinese3

u8g2_font_wqy16_t_gb2312

u8g2_font_wqy16_t_gb2312a

u8g2_font_wqy16_t_gb2312b

说明:chinese1/2/3是小字符集,不常用。gb2312是完整的,有七千多字符;gb2312a没有全角标点符号,4041字符;b比a多了一些额外符号,4531字符。

u8g2字符集命名规则:<prefix> '_' <name> '_' <purpose> <char set>

<purpose>参数 含义
t 透明字体
h 字体等高
m 字体等高等宽
8 固定8x8像素

 

 

 

 

 

 

<char set>参数 含义
f 完整ASCII,256个字符
r ASCII的32-127
u ASCII32-95
n 只有数字和额外的glyphs
... 其他 没东西

 

 

 

 

 

 

u8g2的文本显示在光标的右上角。

 

其它常用函数讲解

home(0);               // 光标返回原点

setCursor(x,y)        // 光标坐标

clear();                    // 清屏和缓冲,光标回原点

clearBuffer();           // 清缓冲

sendBuffer();           // 显示缓冲区

u8g2.drawStr(x,y,“文本”);        // 编码不大于256的文本,y轴向上绘制

u8g2.drawUTF8(x,y,“文本”);         // 可以中文

u8g2.drawGlyph(x,y,HEX);         // 绘制特殊文本图标,比如内置的天气的图标

u8g2.print(xxx);                        // 打印文本字符,可打中文、变量,须同配合setCursor和setFont
#include <ESP8266WiFi.h>
#include <U8g2lib.h>
 
#define SDA 4                       // SDA引脚,默认gpio4(D2)
#define SCL 5                       // SCL引脚,默认gpio5(D1)
 
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /*clock=*/SCL, /*data=*/SDA, /*reset=*/U8X8_PIN_NONE);           // 选择显示屏幕
 
 
void setup(){
  u8g2.begin();               // 初始化
  u8g2.enableUTF8Print();     // UTF8允许
 
  u8g2.clearBuffer();         // 清除缓存,其实初始化里有清除,循环时一定要加上
 
  u8g2.setFont(u8g2_font_wqy12_t_gb2312b);    // 选择中文gb2313b
  u8g2.setCursor(0,15);             // 光标坐标指定
  u8g2.print("你好,U8g2!");        // 指定缓存区需要打印的字符串
    
      
  u8g2.sendBuffer();          // 将定位信息发送到缓冲区
}
 
void loop(){
 
}

 

特殊文本图标

列表看这个

fntgrpiconic · olikraus/u8g2 Wiki · GitHub

 

 u8g2_font_open_iconic_play_4x_t 就是他的字体库名称 就是u8g2.setfont的形参

BBX width/height 什么的都是说的大小 高度,capital A大写

FontDataSize是是库的大小

文字一般直接写就行,图标必须用代码,他这里用十六进制来编码的。0040就是第一个图标代码,你要是想用第三个向上,就是0042,前面64表达啥意思,不知道。但只使用后面的就可以了。

所以你想用天气图标里的月亮🌙,你应该写下面两句:

u8g2.setFont(u8g2_font_open_iconic_weather_1x_t);

u8g2.drawGlyph(0,16,0x0042);

u8g2.sendBuffer();                // 显示缓冲区内容
#include <ESP8266WiFi.h>
#include <U8g2lib.h>
 
#define SDA 4                       // SDA引脚,默认gpio4(D2)
#define SCL 5                       // SCL引脚,默认gpio5(D1)
 
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /*clock=*/SCL, /*data=*/SDA, /*reset=*/U8X8_PIN_NONE);           // 选择显示屏幕
 
 
void setup(){
  u8g2.begin();               // 初始化
  u8g2.enableUTF8Print();     // UTF8允许
 
  u8g2.clearBuffer();         // 清除缓存,其实初始化里有清除,循环时一定要加上
 
  u8g2.setFont(u8g2_font_open_iconic_weather_4x_t);     // 选择内置Weather图标
  u8g2.drawGlyph(0,31,0x0045);                // 选择0x45图标,定位在(0,31)右上方
    
      
  u8g2.sendBuffer();          // 将定位信息发送到缓冲区
}
 
void loop(){
 
}

 

显示配置相关函数

1. u8g2.getAscent()
/**
 * 获取基准线以上的高度
 * @return 返回高度值
 * @Note 关联方法  setFont getDescent setFontRefHeightAll
 */
int8_t U8G2::getAscent(void)
跟字体有关(setFont)
示例:下面例子,ascent是18

2. u8g2.getDescent() —— 获取基准线以下的高度
/**
 * 获取基准线以下的高度
 * @return 返回高度值
 * @Note 关联方法  setFont setFontRefHeightAll
 */
int8_t U8G2::getDescent(void)
跟字体有关(setFont);
示例:下面例子,descent是-5

 

 

posted @ 2025-01-14 12:22  mcwhirr  阅读(1421)  评论(0)    收藏  举报