積みパーツを消化していく...
はじめに
- 何でこれを買ったのか、いつ買ったのかも記憶にないけど、机の上に転がっているのを見て見ぬふりするのも嫌になったので、消化していく(=とりあえず、動かしてみる)
接続
-
公式HPによれば、spiの3線式、4線式もしくはi2cに対応しているけど、デフォは4線式spiで、他に切り替えるためには半田ゴテ作業が必要なので、デフォのままとする。
- 4線spiといっても、教科書的な4線式spi(CS,SCLK,MOSI,MISO)と意味は異なり、ディスプレイの4線「CS,SCLK,MOSI,D/C(=Data/Command)」となる。また、RSTピン(RES)も存在する。なお、NCはNoConnectingの略称であり、何も繋がない。
-
HPの一番下の方を見ると、チップはsh1106みたい。HPにサンプルプログラムもあるけど、sh1106なら、u8g2ライブラリが対応しているから、サンプルプログラムは無視して、M5atomS3でu8g2を使ったプログラムを書く。
-
u8g2の制御チップ毎のイニシャライザのリストのうち、4線のソフトウエアspi(atomS3はハードウエアspiの端子がないはず)から選ぶ感じかな。
- M5atomS3の各ピンを下記の通り割り当てた
- 底面の端子を使うため、atomHATを使った。まあ、HATを使わずに、直接ぶっ刺してもいいけど。
- arduinoIDEでは、SPIのデフォルト端子名「SS(上記CS),SCK(上記CLK),MISO(不使用),MOSI(上記DIN)」を使って設定する。
実際の動作
書いたコード(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したときの表示。
- よって、実際のコードは、もっともバッファの大きいNONAME_Fを使った。
おわりに
- 週1回のペースで投稿していたから、今週も何もしないのは気持ち悪いから投稿してみた。
- まあ、投稿する方が真面目にコードも書くから、自分のevernoteに作業を残すだけよりいいかも。
- 中身薄くてゴメンだけど...