ESP32 で 日本語漢字フォント をカラー OLED に表示させ、4行同時スクロール ( SSD1331 使用)

ESP32 ( ESP-WROOM-32 )
Arduino core for ESP32 が大幅アップデートされました。
それに伴い、自作ライブラリもアップデートしましたので、最新版をダウンロードしてください。

こんばんは。

ESP-WROOM-32 ( ESP32 ) でようやく 16×16 ピクセル ( ドット )の 日本語漢字フォントを表示させることができました。

そして、ESP8266 では不可能だった、16×16日本語漢字フォントの4行同時スクロールができるようになりました。

そして、日本語をディスプレイに表示させる関数をライブラリ化して、だいぶ簡素化できました。

例のごとく、日本語漢字フォントはライセンスが Public Domain でフリーの東雲(しののめ)フォントを使っています。
極小のディスプレイや電子工作ではとても重宝する、すばらしいフォントです。
かなり複雑な漢字も判読できますので、日本語表示については個人的に非の打ちどころがありません。

では、この表示方法を解説します。

スポンサーリンク

使うもの

ここ3回ほどの記事では以下のようなほとんど同じデバイスしか使っていません。

ESP32 – DevKitC ( ESP-WROOM-32 開発ボード )

カラー OLED SSD1331 モジュール

Amazon.co.jpでは現在中国販売店しかありません。
値段が安いところもありますが、品質は正直分かりません。
スイマセン。

秋月電子通商さんにもありますが、少々高いです。

http://akizukidenshi.com/catalog/g/gM-11560/

SparkFun マイクロSDカードスロット・ピッチ変換基板

SparkFun マイクロSDカードスロット・ピッチ変換基板

micro SDHC カード

私が使って動作確認が取れている micro SDHC カードは以下のものです。

Transcend microSDHCカード 8GB Class10 UHS-I対応 Nintendo Switch 動作確認済 TS8GUSDU1
トランセンドジャパン
¥1,080(2024/03/28 11:30時点)

1/4W 10kΩ程度の固定抵抗 2つ

ブレッドボード、ジャンパーワイヤーパソコン、USBケーブル等

接続する

前回までの記事と全く同じです。
micro SDHC カードスロットは VSPI 接続。
OLED SSD1331 は HSPI 接続です。

もし、micro SDHC カードの読み取りや書き込み不良があれば、SCK や CSピンもプルアップしてみてください。

東雲(しののめ)フォントについて

当ブログでは何度も紹介してきましたが、改めてこの電子工作的にとても素晴らしい東雲フォントをちょこっと紹介します。

16×16 ピクセル(ドット)のフォントは、殆どの日本語漢字を表現できる最も小さいものだと思います。
8×8 ピクセルの美咲フォントもありますが、複雑な漢字は判読が難しいので、この東雲フォントが最適です。

ライセンスは Public Domain で、 フリーです。
古川泰之さん作の、12、14、16 のサイズを持つビットマップフォントで、/efont/ (電子書体オープンラボ) が保守開発をしたものです。
現在は活動を停止しているようです。
オリジナルは以下のページにあります。

東雲 ビットマップフォントファミリー

ただ、この圧縮ファイルはtar.bz2形式のために別途解凍ソフトが必要です。
解凍しにくいと思われますので、後の項目で述べているGitHubのページで再配布させていただきます。
使うファイルは以下の通りです。

全角ゴシック: shnmk16.bdf
半角ゴシック: shnm8x16r.bdf

半角ゴシックの shnm8x16r.bdf というファイル名は長すぎてエラーになる可能性があるので、ファイル名を8文字以下に変更して使って下さい。
例えば、”r” を削除して、

shnm8x16.bdf

とします。

これらのビットマップフォントファイルは BDF形式のテキスト形式で構成されています。
その他、詳しくは以下のページを参照してください。

OLED ( 有機EL ) SSD1306 に16×16ドットのフリーの日本語漢字、東雲フォントを表示させてみました

Arduino IDE の設定など

Arduino IDE は1.8.2 以降を使用してください。
1.8.1 以下の場合は、シリアルモニターの日本語漢字表示は Shift_JIS コードになっています。
1.8.2 以降は UTF-8 コードを出力するだけでシリアルモニターに日本語漢字を表示できます。

また、Arduino core for the ESP32 のインストール方法は以下のページを参照してください。

Arduino core for the ESP32 のインストール方法

コメント

  1. juchang より:

    mgo-tec 様

    「ESP32 で 日本語漢字フォント をカラー OLED に表示させ、4行同時スクロール」に挑戦していますが、「文字列表示サンプルスケッチ」のところでトラブっています。
    入力後、コンパイルをかけるとしばらくは動作するのですが、
    exit status-1
    ボード ESP32 Dev Module に対するコンパイル時にエラーが発生しました。
    とのメッセージとなってしまいます。
    「( ESP8266 )用 Arduino IDF ライブラリを作ってみました」、「関数1行で UTF-8 文字列を フリーの日本語漢字( 東雲 ) フォントに変換できるようにしてみました」ほか、色々調べてみましたが解決策が見出せません。
    SPIFFS メモリを大きくして、micro SDHC カードを使わない方法もあるとのことで、それにも挑戦してみたのですが、同様に、コンパイル時エラーとなってしまいます。
    何か解決のアドバイスをいただけると幸いです。

    • mgo-tec mgo-tec より:

      juchangさん

      毎度お試しいただき、ありがとうございます。

      まず、お伺いしたいのは、exit status 1 の前に何かエラーメッセージが出ていませんか?
      出ていなければ、Arduino IDEのファイルメニューの環境設定のコンパイラの警告表示を「全て」にして、コンパイルし直してみてください。

      エラーメッセージを解読しないと、私も全く分かりません。

      因みに、ネットでエラーメッセージを検索すると、解決策がでている場合が多いですよ。

  2. juchang より:

    mgo-tec 様

    大変お手数をお掛け致します。

    警告表示を「全て」にしてエラーメッセージを確認しました。
    「SPI.h」、「SD.h」、「FS.h」に対し複数のライブラリがあることが原因の一つと判明したので、ファイルを削除し改めてコンパイルし直したところ、その部分のエラーメッセージは消えました。
    残っているエラーメッセージは下記のとおりです。
    Archiving built core (caching) in: C:\Users\Sadao\AppData\Local\Temp\arduino_cache_202978\core\core_espressif_esp32_esp32_FlashMode_qio,FlashFreq_80,FlashSize_4M,UploadSpeed_921600,DebugLevel_none_d7731e9bf27ea9782339ebd79c5efa1f.a
    Traceback (most recent call last):

    File “gen_esp32part.py”, line 386, in

    File “gen_esp32part.py”, line 355, in main

    UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xef in position 0: ordinal not in range(128)

    Failed to execute script gen_esp32part

    解読を試みたのですが難しくてわかりません。
    ご助言の程お願いいたします。

    • mgo-tec mgo-tec より:

      juchangさん

      spi.h SD.h FS.h は大切なファイルです。
      削除してしまうと、ますます動かなくなってしまいます。
      それを削除する前のエラーメッセージを解読しなければなりません。
      それを教えて下さい。

  3. juchang より:

    mgo-tec 様

    削除前のエラーメッセージは、
    「SPI.h」に対して複数のライブラリが見つかりました
    使用済:C:\Users\Sadao\Documents\Arduino\libraries\SPI
    未使用:C:\Users\Sadao\Documents\Arduino\hardware\espressif\esp32\libraries\SPI
    となっていました。
    「SD.h」では、使用済と未使用が逆となっていたので、どちらも有効と思い、
    C:\Users\Sadao\Documents\Arduino\hardware\espressif\esp32\libraries\””
    を残し、片方を削除しました。
    その後、コンパイルし直したところこの部分のエラーメッセージが出なくなりました。
    取り急ぎ現状までの報告です。
    これから、mgo-tec さんのアドバイス通りネットで検索してみます。

    • mgo-tec mgo-tec より:

      複数のライブラリが見つかりましたというメッセージは実は直接関係ありません。
      他のエラーが原因です。
      例えば、必要なライブラリがインストールされていなかったとか、Timeライブラリが無いとかです。

      これより前のコンパイラメッセージは何かありませんでしたか?

  4. juchang より:

    mgo-tec 様

    エラーメッセージが解消しました!

    ネットで検索をしたところ、「str 型と unicode 型を混ぜるな」という記事があり、昨日、「SPIFFS メモリサイズを大きくする作業」をしたことを思い出しました。
    とりあえずこの作業は不要と思い、Arduino core for the ESP32 を再インストールし直したところ、エラーメッセージが消えました。
    その後、コンパイル実行をしたら画面に表示はされたのですが、画面左半分だけの表示となります。
    これからこの問題に取り組んでいきたいと思います。
    以上、これまでの経過を報告いたします。

    • mgo-tec mgo-tec より:

      そうなんですね。
      とりあえず、エラーが消えて良かったですね。
      基本的には、SPIFFSサイズを大きくしても、正しく手順を踏んでいれば問題なく動きます。
      ただ、esp8266の方はメモリサイズが2GBのものが流通していたりして、大きくすると問題が生じてしまいます。
      ESP32ならば、今のところ問題なく動いています。

      近々、ESP32用のトラブルシューティング記事を書こうと思っていますので、今回の件は私なりにも再検証したいとおもいます。
      いろいろ情報ありがとうございました。

  5. juchang より:

    mgo-tec 様

    本ページの画面表示に成功しました!

    画面半分表示の状態で、シリアルモニタを見たところ、
    UTF8toSjis file has not been up load to the flash in SD file system
    Shinonome file has not been up load to the flash in SD file system
    となっていました。
    SD カードスロット・ピッチ変換基板へのピンヘッダのはんだ付けがよくなっかたようで、はんだ付けをし直したところきれいに表示されました。
    休日にもかかわらず拙問にお付き合いをいただきありがとうございました。
    今後ともご指導の程よろしくお願い致します。

    • mgo-tec mgo-tec より:

      juchangさん

      それは良かった!!
      そういうことだったんですね。
      SDカードからファイルと読み取れない場合も、コンパイラ警告メッセージで、SPI.h や FS.h が重複しているという文が出ますね。
      私も最初は意味わかりませんでしたが、その前のメッセージが重要で、それを読み解くと大体解決できます。
      ですからライブラリ重複メッセージは、その前の段階のエラーが影響してそういうメッセージが出るという事です。
      ビギナーの方々には分かりづらいと思います。

      でも、良かったですね。
      私もホッとしました。

      私も何かと忙しく、すぐにお答えできない場合も多々ありますが、当ブログ記事による不具合にはできるだけ対応していきたいとは思っております。
      こちらこそ、今後ともよろしくお願いいたします。

タイトルとURLをコピーしました