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