M5Stack FIRE (PSRAM付き)およびIPSタイプのLCD ILI9342Cを使ってみた

M5Stack,FIRE,と,IPS,タイプのLCD,ILI9342Cをレビューしてみた M5Stack

M5Stack FIREを分解してみる

M5Stack FIRE は、M5Stack Basic より更にスペックアップしていて、16MBフラッシュ、4MBのPSRAM付き、マイク、三軸加速度センサ、三軸ジャイロセンサ、三軸デジタル磁力センサ、10 x RGB LED、550 or 600mAhバッテリー等が加えられています。
そして、最新のハードウェア構成では、LCD(液晶ディスプレイ)がIPS(In-Plane-Switching)スクリーンのILI9342Cに切り替わっているそうです。
このIPSディスプレイは一時期TwitterのM5Stackユーザーの間でちょっとした話題になりましたね。
これについては後で述べます。

GPIO端子は残念ながら無くなり、GROVEコネクタに置き換わっています。

外観

まず、パッケージを開けるとこんな内容物でした。

M5Stackに充電台が加わり、LEGOブロックパーツがありますね。

付属のUSBケーブルはM5Stack Basicよりは長いコードです。
ですが、USBシリアル通信で、プログラムを書き込む場合、たまにエラーが出ます。
その場合、質の良いUSBケーブルを別途用意した方が良いかもしれませんね。

次に側面を順次見ていきます。
電源ボタン側は、M5Stack Basic に加えて、RGBフルカラーのLEDバーが付いています。

USB Type-C のコネクタは相変わらず上下方向があります。これは初代から変わっていませんね。
USBシリアル通信でポートを認識しない場合や、書込みエラーが起こった場合は、Type-Cのケーブルを上下逆に挿せば認識される場合が殆どです。

GROVE ポートAは、I2C通信用で、GPIO#21(SDA), #22(SCL)に接続されていて、後で紹介するモーションセンサーに接続されています。

次の側は、M5Stack Basic に加えて、バッテリー充電状態表示用のLEDインジケーターと、マイク用の穴が追加になりました。

次の側面はスピーカーとRGBフルカラーLEDバーが付いています。

最後の側面は、GROVEコネクタです。

GROVE ポートB は、GPIO #26(DAC), #36(ADC)に接続されています。
GROVE ポートC は、UARTシリアル通信用で、GPIO #16(RXD2), GPIO #17(TXD2)に接続されています。
このポートCは要注意で、PSRAMと接続されているので、PSRAMと同時には使えません
GROVEポートについては、M5Stack公式サイトに以下のように注意点が書かれていました。

ポートの名前と機能は色で識別できます。赤は主にI2Cに使用されるPortA(2​​1/22)、黒はDA / ADに使用できるPortB(26/36)、Singel-bus通信、青はPortCです。 (16/17)はUartに使用できます。それに対応して、ほとんどのM5ユニットには、M5Coreで使用するポートを指定するための色が一致したポートがあります。これらのポート識別は、UIFlow(Blockly)ユーザーにとって便利です。 ESP32のPINのほとんどは再マッピング可能であるため、高度な使用の場合、カスタマイズを行うことができます。残念ながら、PortA(red)はアナログ読み取りとして使用できません。ESP32のGPIO 21および22を指しますが、ADチャネルの代替はありません。

ADC1(GPIO 32-39に対応した8チャネル)
ADC2(GPIO 0、2、4、12-15、25-27に対応した10チャネル)

AD読み取り機能を使用するには:
1、デュポンケーブルを使用すると、ADチャネルとして使用できる側のピンが参照されます。
2、PortBに付属のM5GOボトムを入手します。
3、PbHUBを取得してPortAに接続すると、6つのPortBを持つことができます。ピンの割り当てとピンの再マッピングの詳細については、EPS32データシートを参照してください。

M5Stack FIRE 本体分解

では、今度は分解してみます。
まず、同梱の六角レンチで4隅のネジを緩め、下図の様にスピーカー側にある凹みにマイナスドライバーを使って慎重にこじ開けます。

開けるとこんな感じになります。

M5Stack Basicと比べて良いところは、バッテリーが劣化して膨らんできても、ケースが破損しにくい構造になっていますね。
ただ、バッテリーの発熱とESP32の発熱が合わさって更に悪影響が出てしまう心配がありますね。
ESP32をフルパワーで、多量のデータをWiFi送受信を長時間稼働させる場合、ESP32がかなり発熱すると思われますので、これだけリチウムイオン充電池に近い位置にあるということは、電池の寿命に大きく影響を与える気がしますね。

しかし!!!

実はこのM5Stack FIREの場合はなぜかCPU温度があまり上がりませんでした。
それについては後で述べます。

では、基板上の主なICパーツを見ていきます。
こんな感じです。

これは、M5Stack Basic とほぼ同じで、パーツ構成も一緒でした。
練られて作られたので、ここのCore部分は変更しなくても、他の製品へ展開できる構成なんでしょうね。
因みに、後でも述べていますが、ここにあるIP5306というLi-Po充電池用のチップは、すぐ近くにある外部電池用コネクタに接続されているだけで、M5Stack FIREのBottom内のバッテリー用では無いようです。
Bottom用の IP5306 は Bottom の基板にハンダ付けされていました。

では、Bottomケース側を見るとこんな感じです。
右側の赤丸の所が曲がっていました。

慎重に開けたつもりで、1本だけこういう曲がり方はしないはずなんですが、もしかしたら既に曲がっていたかも知れませんね。
まぁ、そういうこともありますので、気にしない気にしない。
因みに、これはGPIO #5でした。
でも、こうやって開けて見ずに知らずに使っていたら、不具合があっても原因追及に時間がかかったかもしれません。
早めに気付いて良かったです。

また、M5Stack Basic や Gray と違って、M5Stack FIREの場合は、Bottomケースとビス2本で本体と固定されるような構造になっています。
M5Stack Basic や Gray はBottomケースの収まりが悪くて浮いていることが多々ありましたが、M5Stack FIREはガッチリ締まるので、具合が良いですね。

因みに基板のシルク印刷に「M5GO」という名称が見えます。
これは、M5Stack FIREのBottomはM5GOと同じ構成だからということらしいです。

今回、私が購入したものは、Li-Poバッテリー容量が600mAhでした。
最新式のものは500mAhになっているそうなので、2019年11月より前に生産されたものだということがわかります。

本体 Bottomケース分解

さらにネジを開けていくと、こんな感じになります。

M5Stack Basicと違って、マグネットがイイ感じに収まっています。
そして、RGBフルカラーのLEDチップが見えます。
これはNeoPixel系の SK6812 のようです。
GitHubのこちらのページの回路図を見ると、10個のLED全てにシリアル1線接続されていることが分かります。
LED用のスモークカバーがGoodアイデアですね。
この辺のアイデアはケースを自作する時の参考になりますね。

更に下の部分を拡大してみると、こんな感じになります。

マイクロフォン BSE3729 が見えます。
残念ながらこれのデータシートはネット上で見つけることができませんでしたので、詳細はさっぱり分かりません。
こんな狭いところにパーツをギュウギュウに押し込んでいる感じです。

また、ここにLi-Poバッテリー充放電用のチップIP5306がありました。
ということは、本体側のIP5306ではこのバッテリーの制御はしていないということだと思います。

それと、今回初めて知ったパーツが、POGOピンコネクタというものでした。
へぇー、っていう感じです。
マグネットを使った接点接触について、ちょっと勉強になりました。

3軸ジャイロ、3軸加速度、地磁気センサー

では、今度は本体側に戻って、難関の基板を外してみます。
因みにここからは破損し易く、分解したら販売店のサポート保証外になる可能性が大きいので、皆さんにはお勧めできません。
参考程度に見てください。
(因みに、以前のこちらの記事では、破損させてしまいました。。。)

まず、下図の様に細い六角レンチでネジを外します。
同梱の六角レンチでは外せないので、自前のもので外しました。

上図のように、そこのシールは綺麗に剥がせません。
すぐにボロボロになるシールでした。
これを剥がしてしまうと、たぶん販売店のサポート対象外になるシールだと思われます。
後は自己責任です。

次に、下図の様にスピーカーを外して、その後、矢印の方向に基板を動かして慎重に外します。
(この写真ではネジが付いていますが、実際はネジを外してから外しています。)

ただ、上図のように、電源スイッチ部分が破損しやすいので、十分注意します。
今回はスムースに分解できました。

すると、こんな感じでした。

パーツ部分を拡大するとこんな感じです。

まず、こんなところに PSRAM ( 4MB )がありました。
どこにPSRAMをマウントしたのかなと思いましたが、なるほどね、っという感じですね。
PSRAMはM5Stack公式サイトによれば、ESP32のGPIO #16, #17と接続されているとのことです。
GPIO #16, #17を使う時は、PSRAM無効にするなどの注意が必要ですね。

また、モーションセンサはSH200Qではなく、MPU-6886でした。
これは3軸ジャイロスコープと3軸加速度計です。
ということは、2019年8月以降のロット品だということが分かります。
これは、I2C通信で制御します。
アドレスは、0x68 だそうです。

それと、BOSCH製BMM150 という地磁気センサがありました。
地磁気センサは使ったことが無いので、詳細は分かりません。
これもI2Cで制御します。
アドレスは、0x10 だそうです。

MPU6886 と BMM150 については、データシートにある概要だけをザッと和訳してみました。

【MPU6886データシート 概要和訳】
MPU-6886は、3軸ジャイロスコープと3軸加速度計を小さな3 mm x 3 mm x 0.75 mmの24ピンLGAパッケージに統合した6軸モーショントラッキングデバイスです。

  • ハイパフォーマンス仕様:
    ・ジャイロスコープのエラー感度:±1%
    ・ジャイロスコープのノイズ:±4 mdps /√Hz
    ・加速度センサのノイズ:100 µg /√Hz
  • 1 kB FIFOを搭載して、シリアルバスインターフェイス上のトラフィックを削減し、システムプロセッサがセンサーデータをバーストしてから低電力モードに移行できるようにすることで、消費電力を削減します。
  • EIS FSYNCサポート

MPU-6886には、オンチップ16ビットADC、プログラム可能なデジタルフィルター、組み込み温度センサ、およびプログラム可能な割り込みが含まれています。 このデバイスの動作電圧範囲は最低1.71Vです。 通信ポートには、10 MHzのI2Cおよび高速SPIが含まれます。

【BMM150 データシート 概要和訳】
BMM150は、消費者市場向けのスタンドアロンの地磁気センサです。 3つの垂直軸で磁場を測定できます。BOSCH独自のFlipCoreテクノロジーに基づいて、BMM150のパフォーマンスと機能は慎重に調整され、電子コンパス、ナビゲーション、拡張現実などのすべての3軸モバイルアプリケーションの厳しい要件に完全に一致します。

評価回路(ASIC)は、地磁気センサの出力をデジタル結果に変換し、業界標準のデジタルインターフェイス(SPIおよびI2C)で読み取ることができます。

BMM150のパッケージとインターフェイスは、多数のハードウェア要件に適合するように設計されています。センサは超小型フットプリントとフラットパッケージを特長としているため、モバイルアプリケーションに非常に適しています。寸法がわずか1.56 x 1.56 x 0.6 mm3のウェーハレベルチップスケールパッケージ(WLCSP)により、PCB配置の高い柔軟性が保証されます。

BMM150は、超低電圧動作(1.62V〜3.6VのVDD電圧範囲、1.2V〜3.6VのVDDIO電圧範囲)を提供し、顧客固有のアプリケーションで機能、性能、消費電力を最適化するようにプログラムできます。プログラム可能な割り込みエンジンは、開発者に設計の柔軟性を提供します。

BMM150は、携帯電話、ハンドヘルド、コンピューター周辺機器、マンマシンインターフェイス、仮想現実機能、およびゲームコントローラーの地上フィールドの3軸を感知します。

バッテリーチャージベースユニット分解

では、今度はM5Stack Basicには無くてFIREにある、バッテリー充電用のベースユニットを分解してみます。

このバッテリーチャージベースユニットは、マグネットで簡単に本体に接続出来て便利ですね。
ですが、なぜか充電しかできなく、USBシリアル通信でプログラムの書込みができません。

バッテリーが消耗していれば、上図のようにSDカードスロット側の面にLEDランプが点滅します。

チャージベースユニット単体で見るとこんな感じです。

裏側はこんな感じです。

ネジや滑り止めゴムが初代Basicよりも進化して設計されている感じがしますね。
それに、LEGOブロック用の穴も拡張性を考えていますね。

これのネジを外すとこんな感じになります。

この基板で、自作でUSBからの別回路を作れそうですね。

では、更にこの基板を外すと下図のようになります。

あれ?
USB Type-C とPOGOピンの接続パターンが見当たりません。

この基板の反対側をよーく見てみると、下図の様に薄っすらと基板回路パターンが浮いて見えます。

これを見る限りでは、USB Type-C の5VとGNDしかPOGOピンコネクタに接続されていませんでした。
POGOピンのデータ端子は、本体のUSBシリアル変換用チップCP2104に接続されていないようなので、この基板上でハンダ付けして細工しても、本体とはUSBシリアル通信はできないようです。

ただ、簡単にマグネットで取り外しできてしまうと、USBシリアルで書き込み中に誤って外してしまい、書込み失敗したり、FLASHの寿命を縮める可能性があるので、充電専用とした設計にしたのは正解かも知れませんね。

では、次の節ではIPSタイプのLCD(液晶ディスプレイ)について見ていきます。

コメント

  1. サーボ より:

    はじめまして。サーボ と申します。
    ついこの前に M5StackFire と M5Camera を購入し、いろいろ勉強しているところです。
    mgo-tec さんの記事を見つけ、参考にさせていただいおり大変ありがたいです。
    お忙しいところお疲れさまです。

    「PSRAMを使った Arduino IDE スケッチ(プログラミング)例」で、
    PSRAM data size が 220 となっている理由につきまして、ちょっと心当たりがあります。

    c_buf1 には、ヌル文字を含む10文字の配列を5個分だけ格納する領域へのポインタを設定され、
    c_buf2 には、上記領域を5分割してそれぞれの領域の先頭へのポインタを設定されているのかなと思います。

    ps_malloc() で c_buf1 の領域を確保する処理につきまして、sizeof(char *) の代わりに
    sizeof(char) で領域を確保してはいかがでしょうか。”char *” は M5StackFire では 4 バイトの変数なので、
    確保したいメモリ量の 4 倍の量を確保してしまいます。
    sizeof(char) に変更した場合の領域の量は、10 * 5 + 5 * 4 = 70 bytes かと思います。

    修正して動作を確認すると、PSRAM data size は 72 となっておりました。
    70 となっていないのは、mgo-tec さんのおっしゃる「4byte単位で」読み書きするため、4 バイト単位で
    領域が確保されるのかなと思います。

    少しでも参考になればと、コメントさせていただきました。

    • mgo-tec mgo-tec より:

      サーボさん

      記事をご覧いただき、ありがとうございます。
      おー!
      そう言えば、sizeof(char *)はESP32では4byteでした。
      すっかり忘れていました。
      というか、2次元配列のps_malloc()確保は、ポインタ型でしか初期化できないと思い込んでいました。
      今取組中の課題が終わったら試してみようと思います。
      ありがとうございました。
      m(_ _)m

  2. サーボ より:

    mgo-tec さん

    お役に立てて何よりです!
    お体に気を付けながら、時間があるときにでも試してみてくださいませ (^^

タイトルとURLをコピーしました