esp-idf-ssd1306/BdfFontDemo/README.md

221 lines
5.2 KiB
Markdown
Raw Normal View History

2024-09-10 18:35:03 -04:00
# BdfFontDemo for SSD1306
2024-09-10 20:56:52 -04:00
![BdfFontDemo-1](https://github.com/user-attachments/assets/df733de1-b5b8-4142-8123-5a8f992246ff)
2024-09-10 18:35:03 -04:00
![BdfFontDemo-2](https://github.com/user-attachments/assets/224d12c4-8ecf-4116-868a-8f11ca480122)
![BdfFontDemo-3](https://github.com/user-attachments/assets/4dbb6f39-ae0f-4ca2-9e55-ba32476b018e)
u8g2 is a great Library for monochrome displays.
2024-09-10 18:36:24 -04:00
This library contains a lot of BDF format fonts.
2024-09-10 18:35:03 -04:00
This project is a demo that displays BDF format fonts.
# How to use BDF Font
2024-09-10 18:39:39 -04:00
- Download the BDF font file.
Thank you olikraus for releasing useful software.
2024-09-10 18:35:03 -04:00
```
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](https://github.com/pixelmatix/bdf2c) repository.
2024-09-10 18:38:28 -04:00
Thank you Pixelmatix for releasing useful software.
2024-09-10 18:36:24 -04:00
```
2024-09-10 19:10:27 -04:00
cd esp-idf-ssd1306/BdfFontDemo
2024-09-10 18:36:24 -04:00
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 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
```
2024-09-10 18:35:03 -04:00
- BDF font files can be viewed with the following command.
2024-09-10 18:36:24 -04:00
```
./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/emoticons/emoticons21.bdf | more
./bdf2c -B < $HOME/u8g2-hal-esp-idf/examples/i2c/components/u8g2/tools/font/pbm/Scroll-o-Sprites.bdf | more
```
2024-09-10 18:35:03 -04:00
2024-09-10 18:38:28 -04:00
- Add header files to main.c.
2024-09-10 18:36:24 -04:00
```
#include "ssd1306.h"
#include "ncenR12.h"
#include "timR12.h"
#include "emoticons.h"
#include "Scroll-o-Sprites.h"
```
2024-09-10 18:35:03 -04:00
- Show BDF Font
2024-09-10 18:36:24 -04:00
```
ssd1306_clear_screen(&dev, false);
ssd1306_contrast(&dev, 0xff);
2024-09-10 18:43:20 -04:00
show_bdf_font_text(&dev, __ncenR12_bitmap__, "Hello World", 0, 0);
2024-09-10 18:36:24 -04:00
```
2024-09-10 18:43:20 -04:00
# 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.
```
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
2024-09-10 20:46:34 -04:00
______XX,X_______,________,
_____X__,_X______,________,
____X___,_XX_____,________,
____XX__,_XX_____,________,
____XX__,_XX_____,________,
________,XX______,________,
________,X_______,________,
_______X,________,________,
______X_,__X_____,________,
_____X__,__X_____,________,
____XXXX,XXX_____,________,
____XXXX,XXX_____,________,
2024-09-10 18:43:20 -04:00
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
2024-09-10 18:53:56 -04:00
```
2024-09-10 19:20:46 -04:00
# Font bounding box and character bounding box
2024-09-10 19:20:03 -04:00
BDF font file has a font bounding box (FONTBOUNDINGBOX).
2024-09-10 21:33:54 -04:00
This FONTBOUNDINGBOX value indicates that all fonts must have a 3-pixel margin to the left and a 6-pixel margin below the font.
2024-09-10 19:20:03 -04:00
```
FONTBOUNDINGBOX 21 26 -3 -6
```
2024-09-10 21:31:51 -04:00
Each character has a character-specific bounding box (BBX).
This BBX value indicates that there should be a 1 pixel margin to the left of this character.
By providing a character-specific bounding box (BBX), this can omit the leftmost blank space.
2024-09-10 18:53:56 -04:00
```
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
```
2024-09-10 21:31:51 -04:00
Fonts that take character-specific bounding box (BBX) into consideration change as follows.
2024-09-10 19:02:46 -04:00
```
STARTCHAR d
ENCODING 100
SWIDTH 574 0
2024-09-10 20:46:34 -04:00
DWIDTH 11 0
2024-09-10 19:02:46 -04:00
BBX 9 12 0 0
BITMAP
07
03
03
03
1F
33
63
63
63
63
33
1D8
ENDCHAR
```
2024-09-10 21:31:51 -04:00
Fonts that take character-specific bounding box (BBX) and font bounding box (FONTBOUNDINGBOX) into consideration change as follows.
2024-09-10 19:30:48 -04:00
```
STARTCHAR d
ENCODING 100
SWIDTH 574 0
2024-09-10 20:46:34 -04:00
DWIDTH 14 0
BBX 9 12 0 0
2024-09-10 19:30:48 -04:00
BITMAP
00
00
00
00
00
00
00
2024-09-10 19:34:23 -04:00
00
2024-09-10 20:46:34 -04:00
00E0
0060
0060
0060
03E0
0660
0C60
0C60
0C60
0C60
0660
030B
2024-09-10 19:30:48 -04:00
00
00
00
00
00
00
ENDCHAR
```
2024-09-10 21:31:51 -04:00
Both the font bounding box (FONTBOUNDINGBOX) and character-specific bounding box (BBX) determine which pixels are displayed.
This image takes into account the font bounding box (FONTBOUNDINGBOX) and character-specific bounding box (BBX).
2024-09-10 18:53:56 -04:00
```
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
2024-09-10 19:34:23 -04:00
________,________,________,
2024-09-10 20:46:34 -04:00
________,XXX_____,________,
________,_XX_____,________,
________,_XX_____,________,
________,_XX_____,________,
______XX,XXX_____,________,
_____XX_,_XX_____,________,
____XX__,_XX_____,________,
____XX__,_XX_____,________,
____XX__,_XX_____,________,
____XX__,_XX_____,________,
_____XX_,_XX_____,________,
______XX,X_XX____,________,
2024-09-10 18:53:56 -04:00
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
________,________,________,
```