Attic or Garret

M5Stackを使ってみる

Introduction

M5Stack(M5GO)/M5Camera/M5Stick/M5Atom
それぞれコンパクトなケースに沢山の機能が詰まった魅力的なIoTデバイス
マイコン世代のひとはM5と聴くとSORD m5を思い出すはずw
解析と動くロボットの製作などしています。
内容はIndexにまとめています。お好みの内容をまったりとご覧下さい。(^_^)
備忘録も兼ねています。バージョンなどの違いによって使い方が変わっている可能性もあるのでご注意ください。

公開している内容を著者に無断で転載あるいは商業目的で利用することを禁止します。 改造等は個人の責任のもとに行って下さい。発生した事故、故障などに対して一切の責任を持ちません。 公開している内容のアイデアを流用した作品や公開している独自の解析結果を含む情報を、SNSや書籍などで発表する際はご一報のうえ、こちらのサイトへのリファレンス(リンク)を加えてください。

Index

M5Stack / M5GO

ドローンTelloをM5Stackで飛ばしてみました。(バイナリーモード) (2018/06/12)Index

M5Stack(M5GO)でTelloのバイナリモードを使ったコントロールに成功しました!
ファームはオフライン版のm5stack-20180419-v0.3.9.binを使いました。
バイナリモードなのでカクカクしないでスムーズに動きます。
Telloのバイナリ制御はPingguSoft-pytello-09d98e0e1646からMicroPythonに移植しました。
PingguSoft-pytello-09d98e0e1646.zip

M5Stack用のモーターモジュールを自作してみました。(2018/06/24)Index

M5Stackのコンパクトな筺体にあわせて出来るだけ小さくレゴ互換のモーターモジュールを作ってみました。
設計当時、M5Stack界隈初のロボットカー!M5BALAより先行!
  • ※ M5Stack用のモーターモジュールに関しての総務省 電波環境課 認証推進室の見解です。
    「認証取扱業者が想定している使用法の範囲内だと考えられるため、問題ないと存じます。」

パチパチクラッピー[トール君]を自走式にしました。(2018/07/01)

いちぶでは有名なパチパチクラッピー[トール君]を自走式にしました。(^_^)
クラッピーもサーボでパチパチします。メカも完全内臓、元のスプリングを生かしているのでしっかりパチパチします。そして!手動でもパチパチ出来るステルス改造になっています (^_^) インターフェースをI2C(Grove) にしたのでM5Stackに直結出来ます。 ご要望が多いので内部機構を公開、サーボーを完全に内蔵して、さらに手動でも動くようにするために、最初にレバーなどの部品を採寸して図面化しました。ここから追加パーツを設計して作っています。

New AIBO風のシッポを付けました。(2018/07/18)

パチパチクラッピー[トール君]の目を動くようにしました。(2018/08/11)

M5Stack WALL-E完成しました!(2018/07/24)

WALL-E LEGO(21303)についてはこちらでも解説しています!Raspberry Pi を使ってみる

M5Stackの音割れ問題Index

抵抗を追加して音質改善 (2018/10/18)

M5Stackにはスピーカーが内蔵されていますが、音割れを起したり音質はいまひとつで、もったいない状態でした。 N.YamazakiさんはブログでM5Stackの音量を抵抗1つで調節する画期的な方法を発表されました。 ただしGPIO25をフローティング状態に出来ずに効果が薄かったとのこと。
この方法をMicroPythonで試してGPIO25をフローティング状態にする設定にトライしてみたところ、オープンドレイン(出力)でフローティング状態になりました。 この状態でGPIO25とGPIO26を75Ωでバイパスして、さらにGPIO26とGNDの間に2μFの電解コンデンサをいれたら良い感じの音になりました。(^_^)
machine.Pin(25,Pin.OUT_OD)
詳しくはN.Yamazakiさんのブログをご確認ください。

MP3ファイルを再生して音質改善 (2018/11/15)

MicroPython[loboris]にMP3ファイルの再生機能を追加しました。PDMを使って再生しているので素の状態のM5Stackでの音質も格段に向上しています。
詳しくは「[MicroPythonで]MP3ファイルを再生する」をみてください。

M5Stackで家のドアをメイドカフェ風に改造してみた。 (2018/10/19)Index

ドアに取り付けると開け閉めの方向を検知してキズナアイの声で「いってらっしゃいませご主人様」「おかえりなさいませ主人様」と言ってくれるのでお手軽にメイドカフェ風のドアに変わります。(^_^)
音割れ対策として音声ファイルは波形編集ソフトを使って音量を下げています。
(量子化ビット数が犠牲になります。)

M5Stack用のプロトモジュールケース (2018/10/25)Index

ケースを自作する方のためにプロトモジュールケースのCADデータを公開します。
実物を採寸してCAD化しています。FDMの3Dプリンタで出力しやすいように最適化しています。
爪の部分も出力されます。
編集可能なigesファイルを置いておきます。
M5Stack社がモデルデータを公開しました(2021/11/04) → M5_Hardware

M5Stackのスリム化+バッテリー容量アップ (2019/11/23-)Index

バッテリー容量を1200mAhにバッテリーに合わせてスリムケースを作ります。
物理スイッチもつけました。(Linkman SS-12E01G3)
あわせてキャラメルイエローに塗装しています。 バッテリーはAPPLE iPod 616-0206 交換バッテリー(ロワジャパン)です。コネクタは3Pなので2Pに換装が必要です。カッターの刃先などで外して2Pのコネクタに交換できます。
固定ボルトはM5Stack(BASIC)のボトムのものが使えます。
ケースデータのSTLファイルを置いておきます。 3Dプリンタ(FDM)で出力出来るように調整しています。

M5Camera

M5CameraとM5Stackの双方向通信 (2019/01/23)Index

M5Cameraで撮影したデータをM5StackにWiFiで送信します。逆にM5StackからのDUALSHOCKデータをM5Cameraに送信します。
詳しくは「[MicroPythonで]撮影データを取得する」をみてください。

M5Cameraのバッテリー駆動電圧アップ (2019/03/23)Index

M5Cameraにはバッテリーを繋ぐことが出来ます。USBコネクタから電力を供給すると充電されます。(TP4057経由) M5Cameraには5Vの昇圧回路がないため、回路の途中に昇圧回路を入れてバッテリーからの電力供給でも安定した5Vが出力されるようにしました。

M5Tankを作ってみた。 (2020/05/31-)Index

超小型戦車を作りました。M5Cameraを内蔵しているのでカメラ画像を見ながら操縦できます。

M5StickC

M5StickCの解析 (2019/06/06-)Index

M5Stackファミリー最新のM5StickCが国内販売されました。小さくても拡張性が考慮されているのでとても魅力的なアイテムです。M5Stack、M5Stick(無印)と比べると次の基本仕様が変更されています。
これにより今までと勝手が変わっています。
基板裏面の端子は写真ではコネクタになっていますが、実際にはハンダ付けで子基板と繋がっています。分解の難易度は高いです。

M5StickC[無印]で変わったところ (2019/06/06-)

MCUESP32-PICO-D4 ← ESP32-DOWDQ6/ESP-WROOM-32
(アンテナ面、アンテナ側IC大)
USBシリアル変換Silicon Labs(CP2104) ← FTDI(TFT面、IC大)
パワーマネジメントAXP192 ← IP5306(アンテナ面、IC中)
IMU SH200Q / MPU6886 ← MPU9250(TFT面、IC小)
リアルタイムクロック BM8563 追加(アンテナ面、IC小)
TFTスクリーンST7735S[R] ← ILI9341
  • ※ プッシュボタンのブルアップ抵抗(アンテナ近くの、チップ抵抗): 10KΩ ← 100KΩ(M5Stack)
M5StickCピンマップ(構成図?)公式資料

M5StickC PLUSで変わったところ (2020/07/23-)

TFTスクリーンが大きくなったM5StickCの新バージョンM5StickC PLUSが登場!
TFTスクリーンST7789V2 (1.14inch / 135 x 240dot) ← ST7735S[R] (0.96inch / 80 x 160dot)
ブザー追加
IO出力G25を追加 (G36とシェア)
バッテリー120mAh ← 80/95mAh

M5StickCのトラブル対策 (2019/06/06)

今のところ下記の症状は対処方法が分りました。

@ 電源を入れても画面が真っ黒のまま反応しない

バッテリーの残量が少ない場合に起きるようです。しっかり充電して再度電源を投入しても反応が無いときはesptoolを使ってファームを上書きすると、書き込み後に起動します。(バックアップを忘れずに)

A esptoolを使うとエラーが発生する。

USBシリアル変換ICが変わった事によりOSの環境によって発生するようです。ボーレートを下げることで正常に動作します。(750000、500000、250000、115200)

M5StickC[無印] ロットごとの識別リスト (2020/02/17-)

いまのところ次のロットが確認されています。他にもあるかもしれません
リリースIMUシリアル
変換IC
RTC
電池
液晶
(種類)
基板裏面ラベルと特徴
2019.3
初期ロット
SH200QM5 1915あり0 M5STICKC   5V← 
G0の外部プルアップ抵抗(680Ω)がない
2019.8MPU6886M5 1915あり1,2 M5STICKC   5V← 
2019.10MPU6886M5-A 1955なし3 M5STICKC   5V← :固定ネジあり
未入手MPU6886黄?
(新)
 M5STICKC   5V← :固定ネジあり
OFF時に5Vと3.3Vが端子から出力されない?
2020?MPU6886M5-A 1955あり4
(新)
 M5STICKC   5V← :固定ネジあり
OFF時に5Vと3.3Vが端子から出力されない
  • ※ USBシリアル変換IC(M5カスタム)の4桁表記は19が年、のこり2桁が週を示していると思われます。
  • ※ IO0端子が680Ωでプルアップされているロットとされていないロットがあります。

M5StickC[無印] 液晶の種類 (2020/03/01-)

いまのところ次の種類が確認されています。他にもあるかもしれません
識別主な搭載ロット裏面側面特徴
02019.3液晶の発色が綺麗?
12019.8
22019.8黒(LH096T印字)信号特性が異なっている?
32019.10最低動作電圧が1.8V→2.4Vになっている
42020?表示が他と比較して暗い(下記写真、液晶1と比較)

M5StickCの電圧レギュレータ(DCDC)を調べてみる。 (2020/02/15)

電圧レギュレータ(DCDC)は MPS MP1541 (写真の黄色丸のなか)
刻印が"B3JC"しかなかったので苦労しました…
MP1541DJ-LF-Z データシート
パワーマネジメントIC AXP192

M5StickC[無印]の5V出力端子からのバッテリーリーク問題を改善する。(2020/02/20)

M5StickCの2019.10リリース以前のロットでは電源がOFFの状態のときでも常に5V出力端子からバッテリー電圧が出力され続けます。 GroveかHATになにか繋いでいると動いていないときでも内部バッテリーを消費してしまうので、この問題に対処しました。 解析してしらべたDCDC(MPS MP1541)のEN端子を使って、PchパワーMOSFET(AO3415A)をスイッチングします。 EN端子はハイ・アクティブなので、Nch MOSFET(AO3400A)を使ってEN端子のシグナルを反転してプルアップしてからPchパワーMOSFETに繋いでいます。 5V出力端子は端子をカットして基板から切り離して、PchパワーMOSFETのドレインと繋ぎます。

M5StickCのIMUの個体差 (2020/03/01)

IMU(SH200Q)
加速値、ジャイロ値ともに個体差があります。キャリブレーションされていません

IMU(MPU6886)
madgwickフィルタを使ったときにドリフトが起きる個体がありました。(ドリフト量は大きいです)
ロットが同じMPU6886でも差違があったのでジャイロ値のキャリブレーションがされていない可能性が高いです。(加速値はキャリブレーションされているようです)
静止状態のジャイロ値の測定結果(測定レンジ ±500°/secのRawデータ)

M5Friskを作ってみた。(2019/06/28-)Index

フリスクケースにM5StickCを入れて007の秘密兵器っぽく改造しました。
フリスクのCM(Hello,idea編)をスタンドアローンで再生しています。 スピーカー追加、スイッチ、背面拡張コネクタを移設、LiPoを80mAhから300mAhにアップしています。
SDカードスロットを追加しました!(2020/03/29)
  • ※ M5StickCの樹脂ケースの着せ替えに関して工事設計認証の運用上の明確な判断が確認できませんでした。改造は自己責任で

M5StickCの外付けバッテリーを作ってみた。 (2020/02)Index

ダイソーの300円モバイルバッテリーを改造して、レゴに付けられる小さいバッテリーを作りました。 M5StickCにあわせてコンパクトにするため、もともと入っていたリチウムイオン電池18650を取り出して18350(1200mAh)に入れ替えました。物理スイッチからM5StickCの電源のON/OFFが出来ます。
M5StickCでUSBの電圧を確認して電圧が低下したらシャットダウンします。
内部のリポで起動したときはシャットダウンしません。これで電源にまつわるトラブルから解放されます

M5StickCをレゴ マイクロスカウト(LEGO 9748)にいれてみた。(2020/03/07)Index

M5StickCをマイクロ・スカウタに[無理矢理…]入れてみました!!
  • ・ ボタンもそのまま使えます。
  • ・ マイクロスカウタに内蔵されていたモーターはGeekServo(360°版)に交換
  • ・ USBは電池ボックスを開けると使えます。
  • ・ Grove端子は電池ボックの平面の部分に移設
  • ・ バッテリーは1000mAhに交換
  • ・ アンプとスピーカを内蔵

M5StickCでレゴ フィアット500(LEGO 10271)を走らせてみた。(2021/11/01)Index

ルパンの愛車で有名なFIAT500、以前にM5Atomでラジコン化していたのですが、C_BACK_DRIVERを入手したのでリニューアル、レゴFIAT500のディテールを崩さないように頑張りました。

M5Atom-Lite / M5Atom-Matrix / M5Atom-Echo

M5Atomの解析 (2020/04/14-)Index

  • ・ M5AtomはM5Stack社の製品では最小のシリーズ
  • ・ M5Atom LiteはM5Stickから、LCD、バッテリー、PMIC、RTC、IMU、RTC、MICを外した状態と同じ
  • ・ M5Atom MatrixはM5Atom LiteにLEDマトリックス基板を追加したもの(追加基板にIMU MPU6886も実装)
  • USBからの5Vは逆流防止ダイオードを経由して供給(写真の黄色丸のなか、矢印がある方がUSB側)

M5AtomシリーズのUSBシリアル変換IC(M5カスタム) (2020/06/28-)

USBシリアル変換IC(M5カスタム)のロットによりデバイスドライバの挙動が若干異なります。
M5StickC 2019.10リリース以降と同じ
リリースUSBシリアル変換IC特徴
Light-?M5-A 1955
Matrix-?M5A1 0120M5-A 1955と同系統?
Echo-?M5A1 1220M5 1915と同系統?
  • ※ USBシリアル変換IC(M5カスタム)の4桁表記は19/20が年、のこり2桁が週を示していると思われます。
ICはCH552(金剛ひかりさん解析 2019/2/25) ファームウェアのソースコードも公開されています。
ch55x_esp - CH55xシリーズMCUに基づくUSB-シリアルブリッジ。
ICをよーく見るとM5とレーザー刻印された下にうっすらと552Tの文字が見えます。

M5Atom-Friskを作ってみた。(2020/04/14-)Index

フリスクケースにM5Atom Liteを入れました。リセットスイッチは背面に移しています。
  • ※ M5Atomの樹脂ケースの着せ替えに関して工事設計認証の運用上の明確な判断が確認できませんでした。改造は自己責任で

M5Atomのバッテリーを作ってみた (2020/04/16-)Index

M5Atomの電池ボックス (2020/04/16)

M5Atomにあわせて小さな電池ボックスを作りました。ON/OFF用の物理スイッチもつけました。背面の端子はサイドから出しています。 電源出力は背面の5V端子に繋がります。 サイドに使っているコネクタはNeltron Industrial Co., Ltd. 6604S-40になります。

M5Atomの電池ボックス (お手軽版) (2020/06/05)

M5Atom用の簡易電源を作りました。(作ったというか両面テープで貼っただけ…)
共立エレショップ スイッチ付コイン電池ケース 2032×2用(黒) CR2032-2 BK
共立エレショップ コイン電池ホルダ スイッチ&リード線タイプ CR2032-1CL

駆動時間のチェック

DUALSHOCK3の受信機として使って駆動時間をざっくり調べてみました。
  • ・ CR2032(3.0V)×2(6Vそのまま):
  • 数分間しか動作しませんでした。変換ロスを出したくないので電池出力をそのまま接続、CR2032は間欠使用であれば30mAの出力が可能になっています。(目安として20分くらいの間隔)DeepSleepとBLEを使う必要がありそうです。 Wi-Fiモジュールは電流が足りないため起動できませんでした。
  • ・ LIR2032(3.7V/45mAh/充電可能/充電可能):
    数十分以上動作、IO33で電圧チェック
  • ・ LIR2032(3.7V/45mAh/充電可能)×2 + ステップアップ/ダウン電圧レギュレータ(S9V11F5) 常時5V出力:
    数十分以上動作、短時間なら小型サーボも駆動可能、IO33で電圧チェック
イメージファイル atom_bt_test.zip

M5Atom Liteに9軸センサーを追加してみた。(2020/04/20)Index

M5Atom Liteに9軸センサを追加しました。ちょっとケースを削ったけど奇跡的なマッチング!

M5Atomのレゴマウンタを作ってみた。(2020/04/22)Index

バッテリーとサーボドライバを組み合わせるとレゴ互換で最小クラスのシステムが作れます! レゴマウントのSTLファイルを置いておきます。 お取り扱いは自己責任で、リンクはこちらに

M5Atom WALL-E完成しました!(2020/04/23)Index

WALL-E LEGO(21303)の外観をほとんどそのままにして、キャタピラ、アーム、ヘッド(上下左右)を動くようにしました!DUALSHOCK3でコントロールします。 WALL-E LEGO(21303)についてはこちらでも解説しています!Raspberry Pi を使ってみる

M5Atom 2足歩行ロボ NanoWalker U800(2020/05/13-)Index

ちっちゃい2足歩行ロボNanoWalker U800をつくりました!
いつものようにプレステ3のコントローラ(DUALSHOCK3)で操作します。
レゴのミニフィグを乗せてもちゃんと歩きます。(^_^)
バッテリーはLi-Po(200mAh)になりました(物理スイッチ & そのまま充電可能です)

WALL-Eと共演 (^_^) (2020/05/25)

今週のビックリドッキリメカ 発進!

M5Atom Echoでサウンドエフェクトが出るようにしました。(2020/06/10)

M5Stack Japan Creativity Contest 2020でNanoWalker U800が入賞しました! (2020/10/03)

M5Stack Japan Creativity Contest 2020 同点3位で入賞しました (^_^)v
Jimmy社長から、嬉しいコメントを頂きました。とっても光栄で嬉しいです!
素敵なお言葉、ありがとうございます。
M5Stack Japan Creativity Contest 2020 入賞発表 !

M5Atomでプッシュフォン型キーボードを作ってみた (2020/07/21)Index

プッシュフォンのメカをそのまま使用してBluetoothキーボードにしました。懐かしのプッシュホンの感覚を楽しめます。 小型バッテリー搭載。(Atomの下の黒い箱) 小型バッテリー → M5Atomの電池ボックス LIR2032(3.6V/40mAh)×2対応バージョン
プログラムの解説 → [MicroPythonで]
Bluetoothを使う

M5Atomでサーマルプリンタに印刷してみた (2021/12/01)Index

M5Atomに小型のサーマルプリンタを繋いで管理人さんを[高速]出力してみました。
ドライバをMicroPythonのモジュールにしたのでUIFlowからの印刷も出来ます。 同種のサーマルプリンタは、大まかに2種類の制御基板が使われていてコマンド仕様が異なります。 いずれも十分に余裕のある電源を使わないと正常に印刷されません。
モデル名日本語対応価格(単体)キット
DP-EH600 / COM-14970OK (完全ではない模様)6,000円?
QR701 / EM-5820NG3,000円以下ATOM Thermal Printer Kit
  • ※ QR701は一部のパラメータを変更したときに値を印刷してしまいます。(困る)

M5Atom Echo スピーカーの保護対策 (2020/06/9-)Index

M5Atom Echoは小さい筐体にスピーカーとマイクが入ったスマートスピーカー向けのモジュール
現在スピーカーの定格入力がアンプ出力より低いためスピーカーが劣化/破損する問題が発生しています。
スピーカーが破損してショート状態になってしまうと、ケースが変形するほどの高熱となりとても危険です。
  • ※ esptool使用時は要注意!

対策1 : M5Atom Echoに出力するデータをプログラムで調整する

プログラムで出力データを調整します。56%以内に収めれば壊れることはありません。
  • ※ プログラムの不具合などにより想定外の動作をしたときにスピーカーが壊れる可能性があるため完全な対策ではありません。
i2s_write…ではじまる関数に渡す値をビットシフトをするなどして出力を下げることができます。 wav,mp3などのファイルデータは波形編集ツールを使って事前に振幅を下げることができます。

対策2 : M5Atom Echoに供給する電圧を下げる (2020/06/13)

NS4168の動作電圧は3.0V〜5.5Vです。Echo内部では5V端子に接続されているので5V端子(背面もしくはGrove/USB)への供給電圧を3.8V程度に下げることでスピーカーの定格入力に合せます。
本体改造をしないで対応できます。(PC接続時にはUSBから5Vが供給されるので注意が必要)

対策3 : M5Atom Echo内部のNS4168に供給する電圧を3.3Vに下げる (2020/06/13)

NS4168の6番ピンの足をあげて3.3Vに繋ぎます。これでスピーカーの定格に収まります。

対策4 : スピーカーを交換する (2020/06/10-)

NS4168の定格出力以上のスピーカーに交換します。交換可能なスピーカーの仕様は8Ω1.25w以上となります。元のスピーカーの仕様は8Ω0.7w(20mm×10mm)です。(公式アナウンス)
  • aitendoに20mm×10mm以下のサイズのスピーカーがあります。許可入力(通常1W / 瞬間1.5W)のものしかありませんがこのサイズでは仕方ありません。実際の使用では問題ないと思われます。
3,4枚目の写真 : レイアウトを変更してφ18(最大φ21)のスピーカーを格納、音質良好!スイッチも押せます。

M5AtomシリーズのUSBシリアル変換IC(CH552)によるWi-Fi問題Index

ユーザーの調査により問題が発覚

最初にそーたメイ(@sohta02)さんが解析して詳しく報告しました。(2021/3/4〜)
Wifi電波の到達距離が他のESP32デバイスと比較して極端に短い(アクセスポイントから数m程度)問題
USBシリアル変換IC(CH552)から仕様外の電圧がESP32に流入することで問題が発生するとの報告です。M5Atom以外に一部のM5Stickでも発生するようです。
そーたメイ(@sohta02)さんの追加調査により「IO0=4.2V以上のとき一気にWiFiが悪化する」と判明しています。(2021/11/23)
安定化電源で確認しました。USBコネクタからの給電だと5.12VでIO0=4.2VとなりNG(USBの規格は電圧誤差±5%なので5.25Vまでは基準内)、5Vピンに直接5Vを給電するとIO0=4.3VとなりNG

USBシリアル変換IC(CH552)のソースコード公開 (2021/11/16-)

日本のユーザーからの呼びかけにM5Stack社が対応してくださり、ソースコードを公開してくれました!

USBシリアル変換IC(CH552)の対策済みファームウェア (2021/11/20)

M5Stack社公開したソースコードは指定されたコンパイラ(SDCC)ではビルド出来ないものだったため、Kenta IDA(@ciniml)さんが金剛ひかりさんのソースコードを修正して対策版のバイナリーを用意してくれました。

USBシリアル変換IC(CH552)のファームウェア更新手順 (2021/11/20-)

そーたメイ(@sohta02)さんの調査により通常のUSBケーブルで上書きできるM5Atom/M5Stickがごく僅かであることが判明しました。 専用ケーブルにより書き込みが可能になります。
ファームウェアを更新することによりUSBシリアル変換IC(CH552)からESP32に流れる電圧は約3.3Vになり仕様内に収まり、Wi-Fi問題は解決します。
そーたメイ(@sohta02)さんが考案した専用ケーブル

USBシリアル変換IC(CH552)を3.3Vで駆動する (2021/11/16)

M5Atomのパターンを解析してCH552への供給電源を5Vから3.3Vに変更する方法を調べた結果、赤の箇所をパターンカットして黄色ラインを接続することで3.3V駆動に変更することが出来ます。上記の3.3Vで駆動するための追加ソースコードを修正したファームウェアへの更新が必須となります。

M5Stack / M5Stick / M5CameraのI2C(Grove)コネクタ

M5Stackの製品の本体にはI2C(Grove)のコネクタが搭載されています。ここに外部モジュールを接続できます。
端子それぞれの割り当てはこちらになります。
  • ・ 白 I2C SCL
  • ・ 黄 I2C SDA
  • ・ 赤 5V出力
  • ・ 黒 グランド
M5Stack社の一部のケーブルは白と黄が逆になっています。カットして使う際は注意が必要です。

M5StackのI2C(Grove)を調べてみる。Index

シグナル(SCL,SDA)は3.3KΩのプルアップ抵抗で3.3Vにプルアップされています。
電源出力は5Vとシグナルの3.3Vと電圧が異なっているので注意が必要です。
5VでプルアップするとESP32に定格を越えた電圧が入力されてしまいます。プルアップ抵抗が内蔵されているI2Cデバイスもあるので注意が必要です。

M5StickCのI2C(Grove)を調べてみる。 (2020/02/06)Index

シグナル(SCL,SDA)はプルアップされていません。
シグナルはショットキーバリアダイオードで保護されています。(写真の黄色丸のなか)
5Vとの電圧の差違は吸収されます。

M5CameraのI2C(Grove)を調べてみる。Index

シグナル(SCL,SDA)は3.3Vにプルアップされています。
電源電圧とシグナル(3.3V)の電圧が異なっている際は注意が必要です。
M5Cameraにはバッテリー接続端子がありますが5Vの昇圧回路がありません。バッテリー駆動時はバッテリー電圧が端子に出力されます。

ファームウェアのバックアップ / リストア

esptoolのインストールIndex

@ CP210x USB - UART ブリッジ VCP ドライバのインストール

SILICON LABSのサイトからダウンロードしてインストールします。
OSに合わせて選択します。Windows 7/8/8.1(v6.7.6)を使いました。

A Pythonのインストール

OSに合わせて選択します。バージョン3.6.5を使いました。
Windows環境の際はインストーラ版を使って Customize installation -> "Advanced Options" -> "Add Python to environment variables"のチェックが必要です。

B esptoolのインストール

pip install esptool
エラーが発生する際は下記の実行が必要な場合があります。
python -m pip install --upgrade pip

消去Index

esptool.py -p COM3 -b 921600 erase_flash
COM3 任意のCOMポート

バックアップIndex

esptool.py -p COM3 -b 921600 read_flash 0 0x400000 firmware.bin
COM3 任意のCOMポート
0x400000 ファームウェアのサイズ(4MB / 8MB)
firmware.bin 任意のファイル名

リストアIndex

esptool.py -p COM3 -b 921600 write_flash 0 firmware.bin
COM3 任意のCOMポート
firmware.bin バックアップしたファイル名
書き込み後に起動しない場合などは先に消去してから再実行してください。

M5Stack / M5Stick / M5Camera / M5AtomをMicroPythonで使ってみる。

M5Stack / M5Stick / M5Camera / M5Atomで使えるMicroPythonファームウェアには複数の種類があります。さらにビルドに使ったESP-IDF(CPU開発元の公式SDK)のバージョンによっても機能が異なってきます。
micropython.org公式版(新v1.1x)ソースコードM5ハード対応[低]
loboris公式版(旧v1.9.4) カスタムソースコード開発休止??M5ハード対応[中]
M5cloudloboris カスタム開発休止M5ハード対応[中]
M5Stack公式loboris カスタムソースコード開発休止M5ハード対応[中]
flow.m5stack.com公式版(新v1.1x) カスタム?M5ハード対応[高]
それぞれ互換性がないため相互に使うにはプログラムの手直しが必要です。
M5Stack公式ではUIFlowを推奨しています。
UIFlowをオフラインで使う場合はUIFlow-Desktop-IDEを使います。ダウンロード

現状ではどのMicroPythonでも使えない機能があるため、今のところ機能が豊富なloboris版をM5Stack(M5Sstick/M5Atom)に最適化したリビルド済みのイメージファイルを用意しました!
追加した機能

@ M5Stack / M5Stick / M5Atom のハードウェアに対応

A MP3ファイルの再生に対応

B Madgwickフィルタに対応

C Bluetoothに対応 (btstackの一部の機能)

D バッファに格納されたイメージデータの表示に対応

E readintoを使ったときにデータ格納位置をオフセット指定できる。

F WAVファイルの再生時にバッファー容量を指定できる。

MicroPython[loborisリビルド版] ダウンロード
  • ※ FLASHサイズ/SPI速度/PSRAM別になっています。
  • ※ 名前にbtstackがあるファイルはBluetoothの一部機能が使えますが実験バージョンです。btstackがメモリを占有するため利用可能メモリが減っています。(PSRAMが搭載されていないとWiFiが使えません)
  • ※ 書き込みに失敗する場合は消去(erase_flash)をしてから再度書き込みを実行してください。

リビルド版を使っているときはMicroPython[loborisリビルド版]と記載しています。
開発環境はuPyCraft V0.28を使っています。v0.30(Win)は不具合で使えませんでした。

MicroPython[loboris]をリビルドする[玄人志向]Index

詳しくはBuilding MicroPython for ESP32を参考にしてください。
きほん備忘録です。リビルドに関しては日本語での解説ページもいくつかあるので参考にしてください。
  • ※ Linuxを使う場合はsamba経由でファイルをコピーせずに直接unzipすること

@ sdkconfig の準備

ビルドにはM5Stackに対応したsdkconfigファイルが必要です。M5Stack_MicroPythonのPython_BUILD/firmware/以下にあります。必要な種類から選びます。
MicroPython_BUILD/firmware/esp32_all/sdkconfig
※ menuconfigを実行することで公式版とloboris版の記述の差異も更新されます。

A menuconfigを実行してsdkconfigをカスタマイズ

B ./BUILD.shの編集

FILE_SIZE=16 変更したFlashサイズに合わせます。

C ビルトインモジュールの追加

components/micropython/esp32/modulesにpythonで記述されたファイルを追加するとビルトインモジュールとしてインポートすることが出来ます。
サイズの大きいファイル(16KB以上)のインポートは不安定に繋がるのでこちらに格納する必要があります。

D ビルド

./BUILD.sh clean QSTRに変更がある場合は必須
./BUILD.sh -v
なぜか下記の実行も必須でした。
../Tools\esp-idf\components\partition_table\ gen_esp32part.py partitions_mpy.csv partitions_mpy.bin

E M5Stackに書き込み (ファイルは上記で作成したファイル)

Windowsを使いました。
esptool.py -p COMシリアルポート番号 -b 921600 --before default_reset --after no_reset write_flash 0x1000 bootloader.bin 0xf000 phy_init_data.bin 0x10000 MicroPython.bin 0x8000 partitions_mpy.bin

MP3ファイルを再生する (MicroPython[loborisリビルド版]) (2018/11/15)Index

MP3ファイルの再生機能を追加しました。バックグラウンドで再生を続けるので処理を継続できます。
mp3ファイルはモノラルに変換してください。

DAC

PDMを使って再生しているので音質も向上しています。
dac=machine.DAC(Pin(25))

dac.mp3play('ファイル名.mp3',freq=48000(省略可),buffsize=8(省略可),stacksize=4096(省略可))

sleep(1) 少し間隔をあける
while dac.check_play():再生確認
  sleep(0.1)
dac.stopwave()再生停止
psramがない状態でbtstack(Bluetooth)と同時に使うときはbuffsizeを4以下に設定しないとハングします。

DAC (M5Stack)

PDMを使った再生では下記の対策を行うことで音質が向上します。
音声出力(GPIO25)からGNDの間に75Ωの抵抗と1μF(もしくは2μF)のコンデンサを並列に入れる。

I2S (M5Atom Echo)

M5Atom EchoのスピーカーはESP32のビルトインDACではなくI2SオーディオIC(NS4168)に接続されています。 そのため再生方法が異なります。
from machine import I2S

spk = I2S(I2S.NUM0, bck=Pin(19), ws=Pin(33), sdout=Pin(22), mode=I2S.MASTER_TX,
    dataformat=I2S.B16, channelformat=I2S.ALL_RIGHT,
    samplerate=48000, dmacount=2, dmalen=1024)

spk.mp3play('ファイル名.mp3',(省略可),stacksize=4096(省略可))
  • ※ I2Sのチャンネルは2チャンネルありますが、現在チャンネル0しか使えません。I2Sのチャンネル0はDACクラスでも一部(write)を除き使用している為、これらの機能は今のところ同時には使えません。
  • ※ SDカードからのデータを再生する際はdmacount=2では音飛びするみたいです。

WAVファイルを再生する (MicroPython[loborisリビルド版]) (2018/11/02)Index

dac.wavplay('/sd/ファイル名.wav', サンプルレート補正, バッファ数(省略可))
WAVデータはDMAを使ってDAコンバータに転送されます。 DMAのサイズはバッファ数2(バッファ長1024Byte)と固定されているため、バッファ数を指定できるようにオプションを追加しています。 32を指定した場合、バッファサイズは32KBになります。弊害として再生開始までの時間が長くなります。

M5Stack

SDカードスロットとLCDはインターフェース(VSPI)を共有しています。 SDカードとLCDへのアクセスが集中した状態ではLCDへの表示が遅れたり再生音が途切れることがあります。バッファーを増やすことで改善されます。

グラフィック/テキストを描画する (MicroPython[loborisリビルド版])Index

初期化

イメージデータを表示する (MicroPython[loborisリビルド版]) (2019/04/09-)

tft.image(0, 0, 'イメージファイル名')
tft.image(0, 0, '', type=tft.JPG, buf=バッファ)
バッファに格納されたイメージデータを表示できるようにオプションを追加しています。
※ バッファを指定する際はtypeの指定が必須。
jpegのデーコードはESP32のマスクROMに格納されたTiny JPEG Decompressorで行います。デコードされたデータは16x16ドットのブロックごとにDMA転送されます。

描画

tft.set_bg(tft.WHITE)
tft.set_fg(tft.BLACK)
tft.clear()
tft.rect(1, 1, 158, 78) 端から端まで線を引く
tft.font(tft.FONT_Ubuntu) フォント指定
tft.text(0, 0, 'test', tft.BLACK) テキストの表示
詳しくは…
display・loboris/MicroPython_ESP32_psRAM_LoBo Wiki・GitHub

LovyanGFXでグラフィック/テキストを描画する (MicroPython[loborisリビルド版]) (2020/08/07-)Index

lovyan03さん製作の超高速グラフィックライブラリLovyanGFXをMicroPythonでも使えるようにしました。
displayモジュールと共存出来ません、別途リビルドが必要です。
MicroPython[loboris+lovyan03リビルド版] ダウンロード (実験バージョン)
  • ※ MicroPython対応にあたってlovyan03さんにご対応頂きました。この場を借りて感謝申し上げます。

初期化

import lgfx

lgfx.init()
model=lgfx.getBoard()
lgfx.setColorDepth(lgfx.COLOR_BITS24)
if model==lgfx.M5Stack:
  pass
elif model==lgfx.M5StickC:
  lgfx.setRotation(lgfx.LANDSCAPE_FLIP)
elif model==lgfx.M5StickCPlus:
  lgfx.setRotation(lgfx.LANDSCAPE_FLIP)

LovyanGFXでイメージデータを表示する (MicroPython[loborisリビルド版])

lgfx.drawJpgFile('イメージファイル名', 0, 0) x, yの位置指定が出来ます
lgfx.drawJpg(data, 0, 0) バッファに格納されたイメージデータ,x, yの位置指定が出来ます
  • ※ LovyanGFXのsprite機能にはただいま対応中
  • ※ printfは実装していません
以下loborisリビルド版限定の現象の可能性が高いです。
  • ※ PSRAMを使う場合は40MHz駆動にする必要があります。
  • ※ PSRAMとLovyanGFXとBluetooth(BTSTACK)を組み合わせて使うとIRAMが不足します。SPIのIRAM使用を停止することでビルドできます。
  • ※ LovyanGFXとBluetooth(BTSTACK)を組み合わせた状態でFTPを使うと転送速度が落ちます。

イメージデータを連続表示する (MicroPython[loborisリビルド版]) (2019/04/09-)Index

M5Stack

上の動画は内蔵フラッシュメモリーに保存した画像ファイル(jpeg)を連続表示して実現しています。 全画面(320×240)にjpeg画像1枚を表示する時間を測定すると約0.1ミリ秒でした。 全画面表示はLCD(ILI9341)のアクセススピードより、画像データ保管場所からの転送スピードに影響されます。

SDカードをマウントする (MicroPython[loboris])Index

SDカードは次の初期化を行うことでマウントできます。

M5Stack

import uos

uos.sdconfig(uos.SDMODE_SPI, clk=18, mosi=23, miso=19, cs=4, maxspeed=40)
uos.mountsd()
SDカードスロットはインターフェース(VSPI)をLCDと共有しています。
SDカードとLCDを同時にアクセスする際には注意が必要。
maxspeedはSPIインターフェースのクロック速度を指定します。(初期値40、省略できます)実際の転送速度はSDカードとの相性によるようです。

M5StickC

import uos

uos.sdconfig(uos.SDMODE_SPI, clk=0, mosi=26, miso=36, cs=2, maxspeed=14)
uos.mountsd()
GPIOマトリックスにより任意のピンを割り当てます。maxspeedは14Mでないとアクセスできませんでした。

外部SPI機器を使う際のトラブル&対策Index

ESP32モジュールにはHSPIとVSPIの2系統のSPIインターフェースが用意されています。(FlashとpsRAM用は別) またSPIはDMAも使用しておりMicroPythonでは現状下記に固定されています。
  • ・ LCD (DMA1)
  • ・ SDスロット (DMA2)
  • ・ 外部SPI機器 (DMA1)
このためLCDと外部SPI機器は同時に使用出来ず、次のエラーが発生します。
spi_master: spi_bus_initialize(96): dma channel already in use
[SPI_UTILS]: spi initialization failed with rc=0x103

M5Stack

VSPIにLCDとSDカードスロットが接続されています。外部用SPI端子もVSPIに接続されます。

ジャイロ、加速度、地磁気センサを使う (MicroPython[loborisリビルド版])Index

なるべく共通化できるようにプログラムを記述していますが、設定値は各センサーの仕様によります。

Madgwickフィルタが簡単に使える (MicroPython[loborisリビルド版])Index

Madgwickフィルタを使う事によりロール、ピッチ、ヨー角が高精度に取得できます。
  • ※ センサーがキャリブレーションされていないとドリフトします。
import madgwick
madgwick.begin(50) 50Hz:周波数が高い方が精度があがります ループ内の処理に合わせて決めます。

st=time.ticks_ms()
while True:
  diff=time.ticks_diff(time.ticks_ms(), st)
  if diff<20: 20ms:設定した周波数に対応したインターバル
    sleep_ms(diff)
  st=time.ticks_ms()

  gyro=imu.gyro
  acc=imu.acceleration
  # 地磁気センサーなし
  madgwick.updateIMU(gyro[0], gyro[1], gyro[2], acc[0], acc[1], acc[2])

  # 地磁気センサーあり
  mag=imu.magnetic
  madgwick.update(gyro[0], gyro[1], gyro[2], acc[0], acc[1], acc[2], mag[0], mag[1], mag[2])

  print(madgwick.getRoll(), madgwick.getPitch(), madgwick.getYaw()) ロール、ピッチ、ヨーの取得

DeepSleepを使う (MicroPython[loboris])Index

DeepSleep中は消費電力を節約できます。
import machine

指定期間(msec)DeepSleepした後に自動復帰
machine.deepsleep(3000) 任意の秒数(msec)を指定

指定のボタンを押したときにDeepSleepから復帰
rtc = machine.RTC()
rtc.wake_on_ext0(39, 0) 復帰に使うGPIO番号とレベル(0=LowActive / 1=HighActive)を指定
machine.deepsleep()
  • ※ 復帰に使えるGPIOの番号 0, 2, 4, 12-15, 25-27, 32-39
  • ※ LowActiveの場合は指定のGPIO(ひとつだけ)での復帰しか出来ません。

次のメソッドでDeepSleepからの復帰を確認できます。
machine.wake_reason()
machine.wake_description()
  • ※ DeepSleepからの復帰後はメモリーの状態が保持されていません(一部の特殊なメモリーを除く)そのため、MicroPythonではリセットとほぼ同じ動作になります。
  • ※ 指定期間での自動復帰以外を指定した場合はmodmachine.cにあるwake_stubが復帰時に実行されます。
  • ※ M5StickCではDeepSleepの前にi2c.writeto_mem(0x34, 0x12, b'\x41')を実行することでLDO(TFT)への電源供給を停止することができます。DeepSleep中でも5Vと3.3Vは出力されたままになります。(省電力機能がないハットなどでは、DeepSleep中でも電力が消費されます)、パワーマネジメントIC(AXP192)にシャットダウンを指示することで全ての電力供給を停止することが出来ます。この場合、電源ボタンを押す以外の復帰方法はありません。(復帰後にCPUがリセットされます)

動作クロックを変更する (MicroPython[loboris])Index

動作クロックには2MHz, 80Mhz, 160MHz, 240MHzを指定できます。
import machine

machine.freq(240) 任意の動作クロックを指定、省略した場合は現在のクロックを返します。
  • ※ DeepSleepと違いクロック変更後でもそのままプログラムが動作します。ただし通信系の機能を使っている場合など影響が起きる可能性があります。

Bluetoothを使う (MicroPython[loborisリビルド版]+btstack) (2019/08〜)Index

Bluetoothに関する情報は少ないのでMicroPythonに実装するのは苦労しました。モジュールさえ作ってしまえばあとの扱いは簡単です。 いまのところbtstackとの組み合わせがとても安定してます。btstackは登場からかなり経っていることもあり情報もそこそこあってソースコードも読みやすく、サンプルコードも充実しています。でもAPI構成(BLE ANCS Client API)が独自なのでMicroPythonのモジュールにするのはちょっと面倒です。 公式MicroPython(ESP32)がBluetooth(BLE)に対応しました。クラシックには対応してないようです。だんだんbtstackを使う必要性が薄れてくるかもしれません。
  • ※ Callbackルーチン内でのメモリ確保はエラーの要因になります。globalの使用を推奨します。
  • ※ run_loop_execute()を使うとPythonに制御が戻らないため、run_noloop_execute(timeout_ms)を追加

sixaxis (DUALSHOCK3)

DUALSHOCK3のデータを直接取得することが出来ます。
  • ※ DUALSHOCK3をPlayStation以外で使うためには事前の準備が必要です。
    Windowsの場合は、株式会社ベストテクノロジーさんのSIXAXISの設定が詳しいです。
    上記リンクから取得できる sixpair を使ってホスト側(M5xxxxx)のMACアドレスを DUALSHOCK3に書き込みます。 ホスト側のMACアドレスは下記の sixaxis.read_mac() で取得できます。
    USB 入力デバイスで認識されているときはDUALSHOCK3として認識されていません、うまく接続出来ないときはDUALSHOCK3をリセットします。

spp[Server] (Serial Port Profile)

仮想シリアルポートとして動作します。PC側の設定は着信(デバイスが接続を開始する)

spp[Client] (Serial Port Profile)

仮想シリアルポートとして動作します。PC側の設定は発信(コンピュータが接続を開始する)

hid (Wii Remote/Other)

WiiリモコンなどのHIDタイプのゲームコントローラからデータを直接取得することが出来ます。

hid[Slave] (Keyboard/Mouse)

HIDのスレーブ動作をします。キーボード、マウスとして機能します。

hciパケットをAndroidでキャプチャして解析

マイクを使う(M5StickC/M5Atom Echo) (MicroPython[loborisリビルド版]) (2019/06/26)Index

MicroPythonからMicophone SPM1423にアクセスする。
from machine import I2S

samples = bytearray(2*8192)
mic = I2S(I2S.NUM0, ws=Pin(0), sdin=Pin(34), mode=I2S.MASTER_RX_PDM,
    dataformat=I2S.B16, channelformat=I2S.RIGHT_LEFT,
    samplerate=10000, dmacount=2, dmalen=128) 任意のサンプルレート
    mic.set_clk(samplerate=10000,
dataformat=I2S.B16,channel=I2S.MONO)

numread = audio.readinto(samples,
    timeout=I2S.portMAX_DELAY) 録音実行
  • ※ I2Sのチャンネルは2チャンネルありますが、現在チャンネル0しか使えません。I2Sのチャンネル0はDACクラスでも一部(write)を除き使用している為、これらの機能は今のところ同時には使えません。

PMICを使う(M5StickC) (MicroPython[loborisリビルド版]) (2019/07/18)Index

MicroPythonからパワーマネジメントIC AXP192にアクセスする。
import axp192

i2c = machine.I2C(sda=21, scl=22)
pm=axp192.AXP192(i2c)

RTCを使う(M5StickC) (MicroPython[loborisリビルド版]) (2019/07/18)Index

MicroPythonからリアルタイムクロックBM8563にアクセスする。
import bm8563

i2c = machine.I2C(sda=21, scl=22)
rtc=bm8563.BM8563(i2c)

rtc.GetBm8563Time() (年, 月, 日, 時, 分, 秒, 週)が戻ります。
rtc.GetTime() (時, 分, 秒)が戻ります。
rtc.SetTime(Hours, Minutes, Seconds) 時間を設定します。
rtc.GetData() (年, 月, 日, 週)が戻ります。
rtc.SetData(Year, Month, Date, WeekDay) 日付を設定します。

撮影データを取得する(M5Camera) (MicroPython[loborisリビルド版]) (2019/01/23)Index

M5CameraにmicroPythonを載せて
MicroPythonから直接Camera(OV2640)にアクセス出来るようにしました。
import camera

camera.init([,reset] [,xclk] [,siod] [,sioc] [,d7] [,d6] [,d5] [,d4] [,d3] [,d2] [,d1] [,d0]
    [,vsync] [,href] [,pclk] [,freq] [,timer] [,channel] [,pixformat]
    [,framesize] [,quality] [,fb_count]) イニシャライズ

camera.sensor_set([,pixformat] [,framesize] [,contrast] [,brightness] [,saturation]
    [,gainceiling] [,quality] [,colorbar] [,whitebal] [,gain_ctrl] [,exposure_ctrl]
    [,hmirror] [,vflip] [,aec2] [,awb_gain] [,agc_gain] [,aec_value] [,special_effect]
    [,wb_mode] [,ae_level] [,dcw] [,bpc] [,wpc] [,raw_gma] [,lenc])

fb=camera.get_fb() フレームバッファ構造体のポインタを返す。
img=camera.buffer(fb) imgに取得したイメージデータが格納される
width=camera.width(fb) イメージ幅
height=camera.height(fb) イメージ高さ
camera.return_fb(fb) 取得イメージ解放(データの処理後は必ず解放)
#camera.reset()
camera.deinit()
公開準備中…

readintoでデータ格納位置をオフセット指定する (MicroPython[loborisリビルド版])Index

分割入力が出来るようにオフセットのオプションを追加しています。
sock.readinto(バッファ, 入力バイト数(省略可), オフセット(省略可))
例はソケット受信になります。jpegなどを分割転送できます。受信したデータはバッファから直接表示することが出来ます。

FTPサーバーに接続する (MicroPython[loborisリビルド版]) (2019/07/24)Index

自力でFTPサーバーに繋げるようにしました。スクリーンキーボードは加速値で動かしています。REPLを使わずに高速ファイル転送ができるので便利。

DualShock/2を使う(M5Stack) (MicroPython[loborisリビルド版]) (2018/06/24)Index

DualShock/2はSPIインターフェースで通信できます。
spi = SPI(
  spihost=SPI.VSPI,
  #mode = SPI.MASTER
  baudrate = 250000, polarity = 1,
  phase = 0, # Cable=1 / Remote=0
  bits = 8, firstbit = SPI.LSB,
  duplex = True,
  sck = Pin(18, Pin.OUT), mosi = Pin(23, Pin.OUT), miso = Pin(19, Pin.IN),
  cs = Pin(26, Pin.OUT))
DualShock/2の資料はこちらが詳しくとても分かりやすいです。
プレイステーション2専用ローリングスイッチ技術資料

ワイヤレスタイプのPS2コントローラーをM5Stackプロトモジュールに取り付ける場合の配線図。
プレイステーションのコネクタは除去しています。表面実装のクリスタルに交換しています。交換はハンダ付けの難易度が高いです。

ディスプレイに表示する(M5Stick[初代]) (MicroPython[loborisリビルド版]) (2019/01/27)Index

MicroPythonからOLED SH1107にアクセスする。(framebufを使っています)
import sh1107

oled = sh1107.SH1107_SPI(64, 128, spi, dc=Pin(27), res=Pin(33), cs=Pin(14), seg_remap=1)
# seg_remap=1 上下反転
oled.line(0, 0, 64, 128, 1) 端から端まで線を引く
oled.text('Micropython', 0, 0, 1, 1) '表示文字',X座標,Y座標,1=白,1=右90°回転
oled.scroll(-8, 0)
oled.show() 画面リフレッシュ

oled.bitmap('i2is.bmp') 'ビットマップファイル名' 128x64ドット 単色
oled.show() 画面リフレッシュ
  • ※ テストは電子レンジの中でやっています。初代M5Stickの工事設計認証(通称:技適)取得は予定にないとのことです。認証済みのESP32に載せ替えなければ電波暗室以外では使えない状況です。

エラー定数Index

ESP_ERR_NO_MEM0x101
ESP_ERR_INVALID_ARG0x102
ESP_ERR_INVALID_STATE0x103
ESP_ERR_INVALID_SIZE0x104
ESP_ERR_NOT_FOUND0x105
ESP_ERR_NOT_SUPPORTED0x106
ESP_ERR_TIMEOUT0x107
ESP_ERR_INVALID_RESPONSE0x108
ESP_ERR_INVALID_CRC0x109

Other

M5Stack UnitLCDのプログラム書き換え (2021/11)Index

UnitLCDはESP32を搭載しているのでMicroPythonを書き込むことができます。
  • ・ ESP32ダウンローダキットを使って書き込み (開始しなければGPIO0とGNDを接続)
  • ・ 書き込み終了後ESP32ダウンローダキットをUSBから抜いて再接続 (GPIO0をHighに保つ)
  • ・ ESP32ダウンローダキット経由でREPLにアクセス
  • ・ UART端子をカスタム設定してリビルド (RxD=22,TxD=21)
  • ・ Grove端子にUSBシリアル変換アダプタを接続、REPLにアクセス
  • ※ アンテナはありませんがBluetoothの使用が可能です。DUALSHOCK3との接続では10mを超えても接続できました。Grove経由の5V給電では電力不足でBluetoothのイニシャライズでエラーが発生。

M5Stack Makeyユニットのプログラム書き換え (2019/07)Index

MakeyユニットはArduino Unoと同じATmega328Pを搭載しているのでarduinoのスケッチを書き込むことができます。少々てこずったので手順をメモしておきます。
  • ・ ArduinoISPを準備 (ARDUINO NANO 3.0を使いました。arduino 1.0.6でないと上手く出来なかった)
  • ・ 書き込みたいスケッチを作成 (arduino 1.8.9を使用)
  • ・ バイナリ出力
  • ・ 出力されたファイル xxxxx.ino.with_bootloader.eightanaloginputs.hexarduino-1.0.6/hardware/arduino/bootloaders/内のatmega/ATmegaBOOT_168_atmega328.hexに上書きコピーする。(元のファイルはリネームして保存)
  • ・ ArduinoISPとMakeyユニットを接続する
  • ・ ブートローダーを書き込むを実行 (書き換えたプログラムが書き込まれる)

M5Stack(M5GO)の初期不良(発売初期の問題、今は品質が安定しているようです。)

とっても素敵で魅力的なM5Stackですが製造時の不具合が多数報告されています。
とくにM5GOの初期生産分での不具合の報告が多いようです。 私が購入したM5GOも不具合品でした。先に購入したM5Stack Facesのハンダのクオリティと比較してもM5GOは雑に感じました。 不具合品は直接製造メーカーに連絡すれば交換してくれるとの事です。 スイッチサイエンスさんで購入した人はスイッチサイエンスさんで交換対応して貰えます。

主な不具合(※印は実際に遭遇)
  • ・ 電源スイッチが基板から剥がれるもしくは破損(多数報告)※
  • ・ ピンソケットの接触不良で各モジュールに信号が導通しない※
  • ・ 本体側のボゴピンの受け側のハンダ不足で接触不良※
  • ・ メイン基板の部品が取れる※
  • ・ ESP32のシールドがハンダ不足で外れる※
  • ・ ケース裏の足ゴム用の両面テープが溶ける※
  • ・ M5GOのLEDの一部が光らない(NeoPixel[SK6812MINI]が熱損している)※
  • ・ MPU9250が反応しない
  • ・ 電源スイッチはボタン裏に0.5mm厚のゴムシートを貼ると対策できます。
  • ・ ピンソケットの接触不良は交換で対策できます。

M5Stack(PSRAMなし)にSRAMを追加してみました。Index

結果は失敗…

純粋なSRAMの23A512が使えたら消費電力的に嬉しいと思ったのですが残念です。
esp-psaram32と23A512のコマンド仕様が異なるのは分かっていたのですが、下位互換にしてるのでは…と思った甘い予測が外れたみたいです。

実績のあるLyontek LY68S3200とかのチップ単体購入のハードルは高そうなのでPSRAMあり版のM5Stackの技適審査を待つしかなさそうです。

※ テストは電子レンジの中でやりましたw
※ 余談ですが下の写真にジャギ様が居ますw

初期のM5Stack(Fire)のロットIndex

次のロットが確認されています。
リリースIMU特徴
初期ロットMPU9250PSRAMが認識しない
MPU9250バッテリー残量が取得できない
MPU9250
2019/8〜SH200QKxxxxxxxx / SH200Qのシール
2019/8〜MPU6886Kxxxxxxxxのシール
2019/8〜MPU6886Kxxxxxxxxのシール / IPS液晶


各種改造は個人の責任のもとに行って下さい。改造により発生した事故,故障などに対し Attic or Garret では一切の責任を持ちません。また各種改造を施した製品は,各種保険及び保証を受ける権利を失う可能性があります。
Attic or Garret 中の各記事,写真及び改造内容を著者に無断で転載あるいは商業目的で利用することを禁じます。

Copyright © 1996-2021 Itoi.All Rights Reserved.