2
3

arduinoでOLEDディスプレイに日本語表示する

Last updated at Posted at 2024-08-19

はじめに

この記事ではLovyanGFXを用いて、日本語を表示していましたがu8g2ライブラリを使えば、さらに簡単に日本語表示が可能ということがわかりました。

そのため、今回はu8g2ライブラリについて基本的な事項を解説します。

IMG_4835 (1).jpg
↑↑↑猫の毛ついてます(笑)

u8g2ライブラリのインストール

arduino IDEのライブラリマネージャから行います。

image.png

すぐに見つかると思います。

日本語フォントについて

U8g2ライブラリには3種類の日本語フォントが最初から入っています。

詳細についてはU8g2のgithubリポジトリを確認してください

image.png

U8g2のコンストラクタ設定と初期化手順

U8g2ライブラリを利用するためにはコンストラクタの呼び出しとbegin()関数の2つのステップで行われます。

コンストラクタ

U8G2_[ディスプレイ型番]_[解像度]_[通信方式] u8g2(回転設定, リセットピン, その他のピン...);

この形式で行います。SSD1306で128×32のディスプレイの場合

U8G2_SSD1306_128X32_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

ディスプレイの設定

NONAMEは特定のディスプレイ製造元などがないということを示しています。amazonで購入したディスプレイなどはこれでいいと思います。
SSD1306_128X32_NONAME製造元がない128X32のSSD1306を使用するということです

通信方式の設定

F_HW_I2C通信方式を表しています。

通信方式のオプションは

  • F_HW_I2C: フルバッファ、ハードウェアI2C
  • 1_SW_I2C: ページバッファ、ソフトウェアI2C
  • F_4W_HW_SPI: フルバッファ、4線式ハードウェアSPI
  • F_SW_SPI: フルバッファ、ソフトウェアSPI など。
    等があります。

回転方向の設定

u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

この項目は回転方向、リセットピンの設定、I2CやSPIのピンの設定です。

回転方向のオプションは

  • U8G2_R0: 回転なし
  • U8G2_R1: 90度回転
  • U8G2_R2: 180度回転
  • U8G2_R3: 270度回転
  • U8G2_MIRROR: ミラー表示
    があります。

リセットピンの設定

リセットピンを設定する場合は

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 13);

のように記述します。

リセットピンを使用しない場合はU8X8_PIN_NONEと記述します。

I2C/SPIのピン設定

I2Cの場合は、ピンはあらかじめ設定されているため未表記で大丈夫です

SPIの場合は、Clock,data,CS,reset等を設定する必要があります。

U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);

begin()メソッド

setup()関数内でu8g2.begin();を呼び出します。

これが実際に初期化処理やディスプレイの設定を行います。

enableUTF8Print()メソッド

日本語表示を行う場合は、setup()関数内でenableUTF8Print()を宣言する必要があります。

u8g2.enableUTF8Print()と記述します。

そのほかメソッド

void setup() { 
	u8g2.begin(); 
	// UTF-8エンコードされた文字列の使用を有効化 
	u8g2.enableUTF8Print(); 
	// ディスプレイのコントラストを設定(0-255) 
	u8g2.setContrast(128); 
	// ディスプレイの上下反転を設定
	u8g2.setFlipMode(1); 
}

U8g2で実際に表示する

ここからはloop関数内やそのほかの関数で利用する際の関数やメソッドを説明します。

clearBuffer()メソッド

clearbuffer()メソッドは、ディスプレイのバッファをクリアして、白紙に戻します。

u8g2.clearBuffer()

と記述します。

setFont()メソッド

setFont()メソッドは使用するフォントを設定します。
以下にフォントの一例を表示します。

日本語を表示するフォント1: u8g2_font_unifont_t_japanese1
日本語を表示するフォント2: u8g2_font_unifont_t_japanese2

u8g2_font_unifont_t_japanese1ではひらがな/カタカナ/基本的な最低限の漢字が含まれています。

u8g2_font_unifont_t_japanese2ではひらがな/カタカナ/基本的な漢字が含まれています。

そのほかフォントは以下のURLにあります。

u8g2.setFont(u8g2_font_unifont_t_japanese1)

setCursor()メソッド

setCursor()メソッドは、テキストを描画する位置を決めます。(0,0)は左上の画面の角になります。
setCursor()メソッドは、Print()メソッドとセットで使うのが基本です。

u8g2.setCursor(0,20);
u8g2.print("Hello");
u8g2.sendBuffer();

とすれば、以下の画像のようになります。

注意:指定した位置は表示する文字の下端になります。

u8g2-coordinate-system.png

print()メソッド

print()メソッドは画面に表示したい文字を入力します。

u8g2.setCursor(0,20);
u8g2.print("Hello");
u8g2.sendBuffer();

sendBuffer()メソッド

sendBuffer()メソッドはprintで得た文字列を実際のディスプレイに表示するために、バッファに送信します。

使用例

これまでの関数などを使用して以下の文字が表示できます。

IMG_4834 (1).jpg

#include <U8g2lib.h>

  

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

  

void setup() {

  u8g2.begin();

  u8g2.enableUTF8Print();  // UTF-8エンコードされた文字列の使用を有効化

  u8g2.setFont(u8g2_font_unifont_t_japanese1);  // 日本語フォントを設定

  u8g2.setFontMode(1);  // テキストの背景を透明に設定

  u8g2.setDrawColor(1);  // 文字色を白に設定

}

  

void loop() {

  u8g2.clearBuffer();

  u8g2.setCursor(0, 12);  // 1行目の位置

  u8g2.print("Hi、この記事は");

  u8g2.setCursor(0, 28);  // 2行目の位置

  u8g2.print("いかがでしたか");

  u8g2.sendBuffer();

  delay(1000);  // 1秒間表示を維持

}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3