M5Stack Faces

M5Stack Faces に関する記事です。



M5Stack Faces

M5Stack Faces は機能が盛りだくさんのガジェットです。

M5Stack Faces の MCU は Espressif ESP32 です。

See Also:


購入

直販他で買えます。


各部詳細

Faces は本体であるコア (M5Stack Gray) とボトム (バッテリーシャーシ)、チャージベース、Face キーボードから構成されています。


コア (M5Stack Gray)

コアは裏蓋が特殊な M5Stack Gray です。

電源が ON の状態で電源ボタンを軽く一回押すとリセット、ダブルクリックか 10 秒長押しで電源 OFF となります。

ユーザー定義ボタン

ユーザー定義ボタンは次のようにアサインされています。

ボタン GPIO
ボタン A 39 (M5_KEY_A)
ボタン B 38 (M5_KEY_B)
ボタン C 37 (M5_KEY_C)

I2C

内蔵デバイスの I2C アドレスは次のようになっています。また、本体左側面の GROVE コネクタには I2C が出ています。

機能 I2C アドレス
IP5306 (電源管理) 0x75
MPU6886 (6 軸モーショントラッキングセンサ) 0x68
BMM150 (3 軸地磁気センサ) 0x10
Faces キーボード 0x08

後継の Core2 には RTC が内蔵されています。そこで「外付けの RTC でもいいので Gray でも使ってみよう!」と考えがちなのですが、多くの RTC モジュールと I2C アドレスがカブってしまい使えません。Core2 でも使われている PCF8563 であれば大丈夫なようです。

IC I2C アドレス
DS1307 0x68
DS3231 0x68
PCF8523 0x68
PCF8563 0x51

スピーカー (アンプ)

この部分をハンダブリッジするとスピーカー (アンプ) を無効化して 25 番ピンを GPIO として使えるようになります。

See Also:

M-Bus (M5-Bus)

コア内部にあるコネクタは M-Bus (M5-Bus) と呼ばれています。裏蓋がある場合、M-Bus は 15 ピンと 8 ピンのピンヘッダとピンソケットとして外に出ています。

Faces のボトムには M5Stack Gray の裏蓋にある 8 ピンのピンヘッダがありません。


ボトム

バッテリーが内蔵されたシャーシです。コアや Face キーボードを取り付けることができます。

6x M3x10 screw が付属する事になっていますが、実際には 4x M3x10 screw, 2x M3x12 screw です。コアを固定するネジの方が 2mm 長いです。

コアはネジ 2 本で固定する事になるため、強く締めすぎると上側に隙間ができます。上部にツメでもあればよかったのでしょうが...この問題は後継の Faces II Bottom で解決していますが、コア側にもネジ穴が必要なためコア部も Core 2 等に交換しないと意味はないと思います。

See Also:


チャージベース

充電台です。何故かこれだけ単体売りされていないため、チャージベースを入手するには Faces Kit を購入する必要があります。

下部に USB TYpe-C コネクタがあります。磁石が内蔵されているため鉄板にくっつきます。


[Face] キーボード (Qwerty)

QWERTY 配列のキーボードです。I2C で接続されています。I2C アドレスは 0x08 です。制御しているのは Arduino でおなじみ ATmega328P なので、これをプログラミングしてファームウエアを更新する事ができます。

大文字は aA を押してからタイプします。紺色の文字は sym キーを押してからタイプします。赤い文字はFn キーを押してからタイプします。alt を押しながらタイプすると特殊なキーコードが送られます。

何故か〔sym〕〔0〕で〔ESC〕キーが押せません

LED インジケーター

下部の左右にインジケーター用の LED があります。LED の状態とその意味については次のようになっています。

Shift 2ndF Lock
aA L 点灯 L 点滅 (遅)
sym LR 交互に点滅 R 点滅 (速)
Fn R 点灯 R 点滅 (遅)
alt L点滅 (速)

キーコード

デフォルトのファームウェアだと、キーコードは次のようになっています。


 
q w e r t y u i o p
Q W E R T Y U I O P
# 1 2 3 ( ) _ - + @
~ ^ & ` < > { } [ ]
(0x90) (0x91) (0x92) (0x93) (0x94) (0x95) (0x96) (0x97) (0x98) (0x99)
a s d f g h j k l BS
(0x08)
A S D F G H J K L BS
* 4 5 6 / : ; ' " Delete
(0x7F)
| = \ % (0xB4) (0xB5) (0xB6) (0xB7) (0xB8) BS
(0x9A) (0x9B) (0x9C) (0x9D) (0x9E) (0x9F) (0xA0) (0xA1) (0xA2) (0xA3)
z x c v b n m $ Enter
(0x0D)
Z X C V B N M $ Enter
7 8 9 ? ! , . (0xFF) Enter
(0xBA) (0xBB) (0xBC) (0xBD) (0xBE) (0xBF) (0xC0) (0xC1) Enter
(0xA5) (0xA6) (0xA7) (0xA8) (0xA9) (0xAA) (0xAB) (0xAC) Enter
0 Space
(0x20)
0 Space
0 Space
0 Space
(0xAF) (0xB0)

0x80 以上を返すキーは自前で制御する必要があります。また、デフォルトのファームウェアでは〔Enter〕キーを押すと 0x0D 0x0A が送られるので注意が必要です。

See Also:


[Face] 電卓 (Calculator)

電卓キーボードです。I2C で接続されています。I2C アドレスは 0x08 です。制御しているのは Arduino でおなじみ ATmega328P なので、これをプログラミングしてファームウエアを更新する事ができます。

文字は凹んでいるので擦り減ることはないとは思います。ここに白でスミ入れしてあるだけで随分印象が変わったのではないかと...。

ぺんてるホワイト極細で塗ってみるとこうなります。視認性は上がりますが、仕上がりはお世辞にもキレイとは言えません。やっぱり塗料買ってきて薄めて細い筆で流し込んで...面倒くさいっ!

See Also:


[Face] ゲームパッド (GameBoy)

ゲームパッドです。I2C で接続されています。I2C アドレスは 0x08 です。制御しているのは Arduino でおなじみ ATmega328P なので、これをプログラミングしてファームウエアを更新する事ができます。

中身はタクトスイッチなので、正直操作性はよくありません。それにしても "GameBoy" という名称は大丈夫なのでしょうか (^^;A

See Also:


[Face] ジョイスティック (JoyStick) [別売]

アナログジョイスティック + LED です。I2C で接続されています。I2C アドレスは 0x5E です。制御しているのは Arduino でおなじみ ATmega328P なので、これをプログラミングしてファームウエアを更新する事ができます。

せめてボタンが 2 個付いていれば...本体 (コア) のボタンを使うのでは使い勝手が悪いと思います。下部の ICSP の並びが逆になっているのに注意。

See Also:



セットアップ

この製品は ESP32 ベースなため、ESP32-WROOM-32 の記事を参考にボードを追加します。

次にライブラリマネージャで "M5Stack" を検索し、M5Stack ライブラリを導入します。

ボードの種類としては "M5Stack-Core-ESP32" となります。

USB シリアルのドライバとして CP2104 用のものが必要ですが、多くの場合、接続時に自動でインストールされると思います (Windows の場合)。

See Also:



チュートリアル

[ファイル | スケッチ例] に、M5Stack-Core-ESP32 用のサンプルスケッチが多数用意されています。

ESP32-WROOM-32 用のスケッチも殆どそのまま動作するので参考になると思います。



Face キーボードファームウェアの書き込み

Face キーボードには制御用のプロセッサとして Arduino Uno 等でおなじみの ATmega328P が使われており、ファームウェアを書き換えることができます。

ファームウェアは Face キーボードの下部にある ICSP 端子に任意の書き込み装置 (プログラマ) を接続して書き換えます。例によって USBasp を使うのが最も簡単だと思います。もちろん UNO 等を書き込み装置にしても構いません。

プログラマとの接続

少なくとも Faces Kit 付属の 3 つのキーボードは下部の ICSP 端子の VCC が未結線になっているため、電源だけは上の端子 (3V3) へ供給します。供給電圧は 5V で問題ありません。

ピン 信号
6 GND
5 MOSI
4 MISO
3 SCK
2 RST
1 (NC)

下側の ICSP はピンヘッダを立ててメスのジャンパーワイヤで接続するのが最も簡単です。ハンダ付けする必要はなく、少し斜めにしてテンションを掛けてやれば大丈夫です。

確実性を求めるなら、スルーホール用テストワイヤを使うなり、ピンヘッダをハンダ付けしてください。

See Also:

ファームウェア書き込み手順

  1. ファームウェアを Arduino IDE で開きます。
  2. [ツール | 書込装置] で書き込み装置 (プログラマ: USBasp 等) を選びます。
  3. [ツール | ボード] で Arduino Pro or Pro Mini を選びます。
  4. [ツール | プロセッサ] で ATmega328P (3.3V, 8MHz) を選びます。
  5. [スケッチ | 書込装置を使って書き込む] でファームウェアを書き込みます。

ファームウェア書き込みの注意点

Face キーボードは内部発振 8MHz で動作するため、クリスタル (水晶発振器) が実装されていません。不適切なブートローダーを書き込むなどして Fuse ビットが書き換わってしまった場合、クリスタルを外付けしない限り Fuse ビットを元に戻すことはできませんし、不適切な Fuse ビットが書き込まれてしまった場合にはヒューズリセッタが必要となる事があるので注意してください。

See Also:


RunCPM + VT100 Emu for Wio Terminal / M5Stack

CP/M をスタンドアロンで動作させる事ができます。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: