.. | ||
main | ||
bdf2c | ||
bdf2c.c | ||
CMakeLists.txt | ||
README.md | ||
sdkconfig.defaults |
BdfFontDemo for SSD1306
u8g2 is a great Library for monochrome displays.
This library contains a lot of BDF format fonts.
This project is a demo that displays BDF format fonts.
How to use BDF Font
- Download the BDF font file.
Thank you olikraus for releasing useful software.
git clone https://github.com/olikraus/u8g2
ls $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/bdf
- Convert BDF font files to header files.
I used this repository.
Thank you Pixelmatix for releasing useful software.
cd esp-idf-ssd1306/BdfFontDemo
cc -o bdf2c bdf2c.c
./bdf2c -n ncenR12 -b < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/bdf/ncenR12.bdf > main/ncenR12.h
./bdf2c -n timR12 -b < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/bdf/timR12.bdf > main/timR12.h
./bdf2c -n battery -b < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/battery/battery19.bdf > main/battery.h
./bdf2c -n emoticons -b < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/emoticons/emoticons21.bdf > main/emoticons.h
./bdf2c -n Scroll_o_Sprites -b < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/pbm/Scroll-o-Sprites.bdf > main/Scroll-o-Sprites.h
- BDF font files can be viewed with the following command.
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/bdf/ncenR12.bdf | more
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/bdf/timR12.bdf | more
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/battery/battery19.bdf | more
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/emoticons/emoticons21.bdf | more
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/pbm/Scroll-o-Sprites.bdf | more
- Add header files to main.c.
#include "ssd1306.h"
#include "ncenR12.h"
#include "timR12.h"
#include "battery.h"
#include "emoticons.h"
#include "Scroll-o-Sprites.h"
- Show BDF Font
ssd1306_clear_screen(&dev, false);
ssd1306_contrast(&dev, 0xff);
show_bdf_font_text(&dev, __ncenR12_bitmap__, "Hello World", 0, 0);
show_bdf_font_code(&dev, __battery_bitmap__, 48, 100, 0);
show_bdf_font_code(&dev, __battery_bitmap__, 49, 110, 0);
show_bdf_font_code(&dev, __battery_bitmap__, 50, 120, 0);
Font display position
The font's display position starts from the upper left corner of this image.
Therefore, there will be some white space above the font.
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
XXXXXX_X,XXXXX___,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XXXXXX,XXX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
__XX____,_XX_____,________,
XXXXXX_X,XXXXX___,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
Font bounding box and character bounding box
BDF font file has a font bounding box (FONTBOUNDINGBOX).
This indicates that there is a 6 pixel margin below the font.
FONTBOUNDINGBOX 21 26 -3 -6
Each character has a character bounding box (BBX).
This BBX value indicates that it should be moved one pixel to the right when displayed.
By providing a character bounding box (BBX), this can omit the leftmost blank space.
STARTCHAR d
ENCODING 100
SWIDTH 574 0
DWIDTH 10 0
BBX 8 12 1 0
BITMAP
0E
06
06
06
3E
66
C6
C6
C6
C6
66
3B
ENDCHAR
Fonts that take character bounding box (BBX) into consideration change as follows.
STARTCHAR d
ENCODING 100
SWIDTH 574 0
DWIDTH 10 0
BBX 9 12 0 0
BITMAP
07
03
03
03
1F
33
63
63
63
63
33
1D8
ENDCHAR
Fonts that take character bounding box (BBX) and font bounding box (FONTBOUNDINGBOX) into consideration change as follows.
STARTCHAR d
ENCODING 100
SWIDTH 574 0
DWIDTH 10 0
BBX 9 26 0 0
BITMAP
00
00
00
00
00
00
00
00
07
03
03
03
1F
33
63
63
63
63
33
1D8
00
00
00
00
00
00
ENDCHAR
Both the font bounding box (FONTBOUNDINGBOX) and the character bounding box (BBX) determine the display position.
This image takes into account the font bounding box (FONTBOUNDINGBOX) and character bounding box (BBX).
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
_____XXX,________,________,
______XX,________,________,
______XX,________,________,
______XX,________,________,
___XXXXX,________,________,
__XX__XX,________,________,
_XX___XX,________,________,
_XX___XX,________,________,
_XX___XX,________,________,
_XX___XX,________,________,
__XX__XX,________,________,
___XXX_X,X_______,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,