ESP-IDFを使ってみる

M5Stack


M5シリーズにはいくつかのモデルが有りますが、今回M5Stackを入手しました。
M5Stackにはいくつかのグレードが有り、グレードにより内蔵されているコンポーネントが変わりますが、
全てに共通して320x240のカラーTFTが内蔵されています。
TFTのドライバーはILI9341です。
各グレードの詳細はこちらに 資料が有ります。

こちらで紹介しているESP32_TFT_Libraryが使えます。
esp-idf標準のSPIドライバーではなく、自前のドライバーを使っているので、
ものすごく高速に表示することができますが、1つだけ 困ったことが有ります。


初期表示は横向きに表示されますが、これはローテーションを変更することで変えることができます。
但し、ローテーションの変更はハードウェアのレジスター操作で行っているので、以下の様に複数のローテーションの文字を表示することができませ ん。


複数のローテーションを一度に表示するためには、レジスター操作ではなく、ライブラリ内部でフォントを回転する必要が有ります。
そこで、複数のローテーションを一度に表示できるライブラリを新たに作成しました。
ソースはこちらで 公開しています。


汎用ライブラリとして作ったので、menuconfigで以下を指定する必要が有ります。







座標軸の設定はArduino環境と同じ以下の様に設定しています。
初期化関数の中のMDACTL(Memory Data Access Control)のパラメータを変えれば、座標軸の設定を変更することができます。


このライブラリは簡単なグラフィック機能を持っています。
関数の使い方はソースのmain.cを見ればすぐにわかると思います。








テキストのローテーションと反転に対応しています。




16-bit/pixel(65K color)で表示しています。




複数のフォントを同時に使うことができます。
使用するフォントファイルはFONTX形式のフォントファイルで、こ ちらで公開されているものを利用させていただきました。




同じ2インチのILI9225と比べるとM5の方が少し大きく見えますが、実際は同じ大きさです。
同じ色を表示をしていますが、M5の方が少しだけ明るいです。




M5StackにはSK6812のRGB LEDが内蔵されているグレード(FireやGO)が有ります。
NeoPixelとか、カラーバーとか、LedStripと呼ばれているフルカラーのLEDバーですが、こちらのサンプルのmain.c を一部変更する だけで
esp-idfで使えるようになります。
変更するのは以下の2か所です。
#define WS2812_PIN  15

#define delay_ms(ms) vTaskDelay((ms) / portTICK_RATE_MS)

void rainbow(void *pvParameters)
{
  const uint8_t anim_step = 10;
  const uint8_t anim_max = 250;
  const uint8_t pixel_count = 10; // Number of your "pixels"
  const uint8_t delay = 25; // duration between color changes




M5Stackにはいくつかのグレードが有りますが、BAISC以外にはMPU9250BMM150 + MPU6886の9軸センサーが内蔵されています。
色々なライブラリを試しましたが、あまり有効な使い道が見つかりません。
加速度計とジャイロを使えば、移動距離と移動方向を計算で求めることができますが、誤差がかなり大きいみたいです。



M5Stackにはスピーカが内蔵されています。
あまり期待していませんでしたが、結構大きな音が出ます。
アラームとして使うには十分の音量です。
Arduino core for ESP32にはSpeakerクラスが有りますが、ESP-IDFにはそのようなサンプルが無かったので、
Arduino core for ESP32を元に作りました。こちらで 公開しています。

続く....