LoginSignup
0
0

SPI接続でOLEDに文字出力した話【u8g2ライブラリ利用】

Last updated at Posted at 2024-04-14

積みパーツを消化していく...

はじめに

  • 何でこれを買ったのか、いつ買ったのかも記憶にないけど、机の上に転がっているのを見て見ぬふりするのも嫌になったので、消化していく(=とりあえず、動かしてみる)
    17130065667680.jpg

接続

  • 公式HPによれば、spiの3線式、4線式もしくはi2cに対応しているけど、デフォは4線式spiで、他に切り替えるためには半田ゴテ作業が必要なので、デフォのままとする。
    image.png
  • 4線spiといっても、教科書的な4線式spi(CS,SCLK,MOSI,MISO)と意味は異なり、ディスプレイの4線「CS,SCLK,MOSI,D/C(=Data/Command)」となる。また、RSTピン(RES)も存在する。なお、NCはNoConnectingの略称であり、何も繋がない。
    image.png
    image.png
    image.png
    image.png
  • HPの一番下の方を見ると、チップはsh1106みたい。HPにサンプルプログラムもあるけど、sh1106なら、u8g2ライブラリが対応しているから、サンプルプログラムは無視して、M5atomS3でu8g2を使ったプログラムを書く。
    image.png
  • u8g2の制御チップ毎のイニシャライザのリストのうち、4線のソフトウエアspi(atomS3はハードウエアspiの端子がないはず)から選ぶ感じかな。
    image.png
  • M5atomS3の各ピンを下記の通り割り当てた
    • grove端子から、5V , GND , G2->DIN , G1->CLK
    • 底面の端子から、G5->CS , G6->D/C , G8->RST
      image.png
  • 底面の端子を使うため、atomHATを使った。まあ、HATを使わずに、直接ぶっ刺してもいいけど。
    image.png
  • arduinoIDEでは、SPIのデフォルト端子名「SS(上記CS),SCK(上記CLK),MISO(不使用),MOSI(上記DIN)」を使って設定する。

実際の動作

image.png

書いたコード(arduinoIDE)

#include <M5Unified.h>
#include <SPI.h>
#include <U8g2lib.h>

//予約語定義
#define SS 5
#define SCK 1
#define MOSI 2
#define MISO -1  //不使用

//自由定義
#define DC 6
#define RST 8

//waveshare_1.3inch用の設定
U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI u8g2(/* No rotation */ U8G2_R0, SCK, MOSI, SS, DC, RST);

void setup() {
  M5.begin();
  SPI.begin();

  digitalWrite(DC, HIGH);   //HIGHでディスプレイデータ、LOWでコマンドデータ
  digitalWrite(RST, HIGH);  //通常はHIGHのまま。LOWのときリセット。
  digitalWrite(SS, LOW);    //LOWでセレクト状態

  u8g2.begin();         // 初期化
  u8g2.setFlipMode(1);  // 画面の向き(0:標準、1:逆向き)

  u8g2.clearBuffer();                       // バッファのクリア
  u8g2.setFont(u8g2_font_cu12_t_cyrillic);  // キリル文字(utf8)
  u8g2.drawStr(0, 15, "Hello World!");      // 文字列格納
  u8g2.drawUTF8(0, 30, "Привет мир!");      // 文字列格納(utf8の場合)
  u8g2.sendBuffer();                        // バッファを画面反映
}

void loop() {
}

コードの解説

  • 接続設定が面倒なだけで、コード自体はたいしたことをしていない。
  • 注意点としては、接続で書いたu8g2のイニシャライザ三つのうち、NONAME_1を使うと、表示がおかしくなること。ページバッファーサイズが1番小さい(128bytes)のせいかな?
  • 下記は、最初に標準の画面の向きでNONAME_1のイニシャライザでHello Worldしたときの表示。
    image.png
  • よって、実際のコードは、もっともバッファの大きいNONAME_Fを使った。

おわりに

  • 週1回のペースで投稿していたから、今週も何もしないのは気持ち悪いから投稿してみた。
  • まあ、投稿する方が真面目にコードも書くから、自分のevernoteに作業を残すだけよりいいかも。
  • 中身薄くてゴメンだけど...
0
0
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
0
0