Help us understand the problem. What is going on with this article?

M5Stack MicroPython API調査記録 LCD編

More than 1 year has passed since last update.

M5Cloud README.mdなどからのM5Stack MicroPython 固有のAPI調査記録LCD編(2018年1月28日現在)

LCD

LCDを使うには m5stack モジュールの lcd オブジェクトをインポートする。

インポート例1:

from m5stack import lcd
lcd.print('hello world!')

インポート例2:

import m5stack
m5stack.lcd.print('hello world!')

インポート例3:

import m5stack
lcd = m5stack.lcd
lcd.print('hello world!')

lcd オブジェクトは実際には display モジュールにある TFT クラスのインスタンス。このTFTクラスは、M5Stackに取り付けられているILI9341タイプのTFTをSPIで制御する。


ESPとLCDの配線

ESP32ピン LCD(ILI9342) 役割
GPIO23 MOSI SPI シリアル入力
GPIO18 SCLK SPI シリアルクロック
GPIO14 CS SPI CS 入力
GPIO27 DC DC (data/command) 入力
GPIO33 RST リセット入力

色の指定

LCDでの色指定は、24bitの整数値であり、R/G/Bにそれぞれ8ビットを使う(が、有効なのはR/Bで上位5ビット、Gで上位6ビット)。

例: 0xFF0000 は赤、 0x00FF00 は緑を表す。

lcdオブジェクトには、以下のよく使う色の定義が用意されている。

BLACK, NAVY, DARKGREEN, DARKCYAN, MAROON, PURPLE, OLIVE, LIGHTGREY, DARKGREY, BLUE, GREEN, CYAN, RED, MAGENTA, YELLOW, WHITE, ORANGE, GREENYELLOW, PINK

LCDに緑で `hello world を印字するには次のようにする。

lcd.print('hello world', color=lcd.GREEN)

以下のように直接整数値での指定もできる。

lcd.print('hello world', color=0X00FF00)

表示枠

座標指定および描画は表示枠に対して相対的である。初期状態で表示枠は画面全体になるよう設定されている。

フォント

利用できる組込みフォントには以下がある。

FONT_Default, FONT_DefaultSmall, FONT_DejaVu18, FONT_Dejavu24, FONT_Ubuntu, FONT_Comic, FONT_Minya, FONT_Tooney, FONT_Small, FONT_7seg


LCDのメソッド

lcd.setBrightness(brightness)

LCDの明るさを brightness に設定する(0-255)。

lcd.setColor(color [,bcolor])

デフォルトの前景色を color、背景色を bgcolor に設定します。

lcd.pixel(x, y [,color])

指定座標(x、y)にピクセルを描画する。パラメータ color が設定されていない場合は前景色をデフォルトで使う。

lcd.readPixel(x, y)

指定座標(x, y)の色の値を取得する。

現状はなぜか常に 0xffffff が返る。

※ LCDがMISOピン結線されていないので使えないそうだ。v0.3.0で削除された。

lcd.line(x, y, x1, y1 [,color])

座標(x、y)から(x1、y1)まで直線を描きます。パラメータ color が指定されていない場合は前景色をデフォルトで使う。

lcd.lineByAngle(x, y, start, length, angle [,color])

座標(x,y)から start 離れたところを始点として長さ length の直線を描画する。パラメータ color が指定されていない場合は前景色をデフォルトで使う。

パラメータ angle には角度(0~359)を与える。

lcd.triangle(x, y, x1, y1, x2, y2 [,color, fillcolor])

座標(x,y), (x1,y1), (x2,y2)を頂点とした三角形を描画する。パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は三角形を塗りつぶす色を指定する。

lcd.circle(x, y, r [,color, fillcolor])

座標(x,y)を中心、半径を r とした円を描画する。パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は円を塗りつぶす色を指定する。

lcd.ellipse(x, y, rx, ry [,opt, color, fillcolor])

座標(x、y)と(rx、ry)を2つの焦点として楕円を描画する。パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションの opt は描画部分を指定する。デフォルトは 15 で全体を描画する。以下の描画部分を指定でき、これらの論理和で複数の描画部分も指定できる。
* 1 - 右上部分
* 2 - 左上部分
* 4 - 左下部分
* 8 - 右下部分

オプションのパラメータ fillcolor は楕円を塗りつぶす色を指定する。

lcd.arc(x, y, r, thick, start, end [color, fillcolor])

座標(x、y)を中心とした半径 r、開始角度 start、終了角度 end の円弧を描画する。

円弧のエッジの太さはパラメータ thick で措定する。

パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は円弧のエッジを塗りつぶす色を指定する。

lcd.polygon(x, y, r, sides, thick [,color, fillcolor, rotate])

座標(x、y)を中心とした半径 r の多角形を描画する。パラメータ sides は多角形の辺の数、thick はエッジの太さを指定する。

パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は円弧の多角形を塗りつぶす色を指定し、rotate は多角形の回転角度を指定する。

lcd.rect(x, y, width, height, [color, fillcolor])

座標(x,y)を左上隅の開始位置として、幅 width 、高さ height の短形を描画する。

パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は短形を塗りつぶす色を指定する。

例:

lcd.rect(10, 100, 100, 200, 0xFF0000) # 塗りつぶさない
lcd.rect(10, 100, 100, 200, 0xFF0000, 0x00FF00) # 緑で塗りつぶす

lcd.roundrect(x, y, width, height, r [color, fillcolor])

座標(x,y)を左上隅の開始位置として、幅 width 、高さ height の角を丸めた短形を描画する。パラメータ r は丸める角の半径を指定する。

パラメータ color が指定されていない場合は前景色をデフォルトで使う。

オプションのパラメータ fillcolor は短形を塗りつぶす色を指定する。

lcd.clear([color])

デフォルトの背景色または指定された色 color で画面をクリアする。

lcd.clearWin([color])

デフォルトの背景色または指定された色 color で表示枠内をクリアする。

lcd.orient(orient)

画面の表示方向を設定する。以下の定数が予め定義されている: tft.PORTRAIT, tft.LANDSCAPE, tft.PORTRAIT_FLIP, tft.LANDSCAPE_FLIP

lcd.font(font [,rotate, transparent, fixedwidth, dist, width, outline, color])

フォントを指定します。

Set the active font and its characteristics.

パラメータ 説明
font フォント名定数またはフォントファイル名を指定
rotate フォントの回転角度(0~360)
transparent フォントの前景だけ描画するかを指定
fixedwidth フォントの最大文字幅を固定幅としてフォントを描画する
dist 7-seg フォントのみ、バー間の距離
width 7-seg フォントのみ、バーの幅
outline 7-seg フォントのみ、アウトラインの色
color 塗りつぶし色、指定されていない場合は前景色をデフォルトで使う
lcd.font(lcd.FONT_Dejavu24) # フォント FONT_Dejavu24 に設定

lcd.attrib7seg(dist, width, outline, color)

7-セグメントフォントの特徴を設定。

パラメータ 説明
dist バー間の距離
width バーの幅
outline アウトライン色
color 塗りつぶし色

lcd.fontSize()

現在のフォントの幅と高さをタプルで返す。

lcd.text(x, y, text [, color])

文字列 text を描画する。パラメータ (x, y) で印字位置、 color で文字色を指定する。

  • x: 印字する水平位置を指定する。以下の特殊な指定もある:

    • LASTX, 前の印字に張り付くように水平位置を決める
    • CENTER, LCD中央に印字するよう水平位置を決める
    • RIGHT, 右寄せになるよう水平位置を決める
  • y: 印字する垂直位置を指定する。以下の特殊な指定もある:

    • LASTY, 前の印字に張り付くように垂直位置を決める
    • CENTER, LCD中央に印字するよう垂直位置を決める
    • BOTTOM, 下寄せになるよう垂直位置を決める
  • text: 表示する文字列。文字列中には以下の2つの特殊文字を指定できる:

    • ‘\r’ CR (0x0D), 行末までクリア
    • ‘\n’ LF (ox0A), 改行
  • color: 描画する色を指定する。指定されていない場合は前景色をデフォルトで使う。

lcd.print(text [, x, y, color])

以下を除いて lcd.text() と同じ。

  • 表示する文字列 text が第1パラメータ
  • x, yの指定がオプションパラメータで、それぞれ LASTX, LASTY を指定したことになる

lcd.println(text, [x, y, color])

最後に改行する以外は lcd.print() と同じ。

例:

from m5stack import lcd

# hello world を表示
lcd.print('hello world')

# 座標 x=10,y=100 に hello world を表示
lcd.print('hello world', 10, 100)

# 緑色で hello world を表示
lcd.print('hello wrold', color=0x00FF00)

# 座標 x=10,y=100 に赤色で hello world を表示
lcd.print('hello world', 10, 200, 0xFF0000) 

# フォント FONT_Dejavu24 に設定
lcd.font(lcd.FONT_Dejavu24)
lcd.println('hello world')  # 表示の後に改行

lcd.textWidth(text)

文字列 text のフォント占有幅を返す。

lcd.textClear(x, y, text [, color])

座標 (x,y) に文字列 text によって使われる領域を、デフォルトの背景色または指定された色 color で画面をクリアする。

lcd.image(x, y, file [,scale, type])

座標 (x,y) を開始位置として画像ファイル file を表示します。

  • 画像形式は JPGBMP をサポート
  • 定数 lcd.CENTERlcd.BOTTOMlcd.RIGHT は x と y に使用できる
  • xy には負数も指定できます

  • scale: 画像の拡大率

    • JPEGの場合は 0 から 3 までで、以下の拡大率になる: 1/(2^scale) (1/2, 1/4 or 1/8)
    • BMPの場合は 0 から 7 までで、以下の拡大率になる: 1/(scale+1)
  • type: 画像形式 lcd.JPG または lcd.BMP

lcd.setwin(x, y, x1, y1)

表示枠を  (x,y) - (x1,y1) の短形に設定する。

lcd.resetwin()

表示枠をフルスクリーンにリセットする。

lcd.savewin()

現在の表示枠設定をセーブする。

lcd.restorewin()

前に savewin() でセーブした表示枠の設定を元に戻す。

lcd.screensize()

LCD のサイズを (width, height) のタプルで返す。

LCDのサイズは320x240のはずであるが、現状ではなぜか(320, 320)が返る。

※ v0.3.0から正常に(320, 240)を返すようになった。

lcd.winsize()

表示枠のサイズを (width, height) のタプルで返す。

こちらも lcd.setwin() で設定しないかぎりは(320, 320)が返ってしまう。

※ v0.3.2から正常にデフォルトで(320, 240)を返すようになった。

lcd.hsb2rgb(hue, saturation, brightness)

HSB形式で指定した色を同等のRGB値に変換して返す。

パラメータ:

  • hue: float: 色相 0 ~ 1.0未満
  • saturation: float; 彩度 0 ~ 1.0
  • brightness: float; 明度 0 ~ 1.0

lcd.compileFont(file_name [,debug])

ソースフォントファイル(拡張子が .c)をバイナリのフォントファイル(拡張子が .fon)にコンパイルする。

debug=True であれば、コンパイルしたフォントの情報が表示される。

tft フォントから c ソース・ファイルを作成するには ttf2c_vc2003.exe プログラムが使える。手順は README を参照。

inachi
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away