U 8 G 2中国語ライブラリをカスタマイズする方法


U 8 G 2ライブラリを使用してOled表示しますが、中国語サポートが足りず、自分で作った中国語フォントライブラリを使用しようとしています
必要な材料とツール:
  • .mapファイル
  • .pdfファイル(フォントファイル)
  • bdfconv.exe(u 8 g 2持参)
  • テキストとunicodeコード変換ガジェット
  • TTF to BDFツールotf 2 bdf(u 8 g 2 githubにダウンロードあり)
  • 1文字をtxtファイルに収集
    iconvツールはほとんどの文字セット符号化をサポートしていますが、元のtxtファイルはUTF-8符号化で保存することをお勧めします.
    txtテキストファイルは改行してもよいし、重複する文字が存在してもよい.ただし、ASCII文字を含めることはできません.例えばstr.txtファイル
    !"#¥%&'()*+,-./
    0123456789:;<=>?
    @ABCDEFGHIJKLMNO
    PQRSTUVWXYZ[\]^_
    `abcdefghijklmno
    pqrstuvwxyz{|} ̄
        

    2文字ファイルをbdfconvに変換するために必要なMapファイル
    echo '32-128,' > myfont.map
    cat str.txt | iconv -f utf-8 -t c99 | sed 's/\\u\([0-9a-f]\{4\}\)/\$\1,
    /g' | sort | uniq |sed 's/^.//' | tr '/a-f/' '/A-F/' >> myfont.map

    3フォントファイルをbdfファイルに変換
    u 8 g 2のgithubで提供されるotf 2 bdfツール
    ps:このツールはxpシステムの下で解凍して2つのdllが欠けていることを示します
    freetype6.dllと
    zlib1.dllネット上でこの2つのdllをダウンロードしてotf 2 bdfの同じディレクトリの下で働くことができます
    8x8 Fonts:
    otf2bdf -r 72 -p 8  -o 

    16x16 Fonts:
    otf2bdf -r 72 -p 16  -o 

    4 bdfconv変換の使用
    bdfconv -b 0 -f 1 -M myfont.map -n my_88yh_font -o my_88yh_font.c 8x8yh.bdf -d 8x8yh.bdf

    最後に生成されたmy_88yh_font.cヘッダに#include“my_88 yh_font.h”を追加
    arduino処理
    ヘッダファイルmy_を追加88yh_font.h
    #ifndef _MYFONT_H
    #define _MYFONT_H
    
    #include 
    #include 
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #ifndef U8G2_USE_LARGE_FONTS
    #define U8G2_USE_LARGE_FONTS
    #endif
    
    #ifndef U8X8_FONT_SECTION
    
    #ifdef __GNUC__
    #  define U8X8_SECTION(name) __attribute__ ((section (name)))
    #else
    #  define U8X8_SECTION(name)
    #endif
    
    #if defined(__GNUC__) && defined(__AVR__)
    #  define U8X8_FONT_SECTION(name) U8X8_SECTION(".progmem." name)
    #endif
    
    #if defined(ESP8266)
    #  define U8X8_FONT_SECTION(name) __attribute__((section(".text." name)))
    #endif
    
    #ifndef U8X8_FONT_SECTION
    #  define U8X8_FONT_SECTION(name) 
    #endif
    
    #endif
    
    #ifndef U8G2_FONT_SECTION
    #define U8G2_FONT_SECTION(name) U8X8_FONT_SECTION(name) 
    #endif
    
    extern const uint8_t my_88yh_font[] U8G2_FONT_SECTION("my_88yh_font");
    
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif