M5Stick-Cが起動しないと慌てる前に

# M5Stick-Cが起動しない、もしくは起動するがLCDに何も表示されない場合には？
社内での若手エンジニアさんへのハンズオン用にM5Stick-Cを5台ほど購入したのですがそのうち何台かはスケッチの書き込みはできるし、ファクトリーテストのスケッチで内蔵LEDの点灯などもできるがLCDスクリーンに何も表示されない現象が発生してしまいました。

自分が個人での勉強用に最初に買ったM5Stick-Cではそんな現象は発生ぜずに、長いこと普通に動作していたので、慌てん坊な自分は何も調べもせずに「初期不良じゃね？」と思ってしまい、早速M5Stack社に交換を依頼したところ、どうやらこの現象はFAQだったらしく、以下のような解決方法を提示して頂きました。

### まずはM5Stick-C付属のケーブルで動かしてみる
市販のUSB Type-Cケーブルを使っている場合、ケーブルの品質や規格によってはM5Stick-Cとの相性が悪いのか？ちゃんとM5Stick-Cがリセットされない事もある様なので、まずはM5Stick-Cを購入した時に付属していたケーブルを使ってみることです。
それに、どうやらUSB Type-Cのコネクタはインテリジェントすぎて、それが原因でM5Stick-Cに充分な電力が供給されない事もあるとかないとか…  (それが原因なのか？自分の経験ではPCではなくモバイルバッテリーから充電したら動いた事もありました)
そんなわけで、もしPCに接続して給電とスケッチの書き込みを同時に行なっているなら、USBケーブルを接続するポートを変えてみるとすんなりと動作する事もあるようです。

### 実は動いているんじゃないの？
普通なら購入したばかりのM5Stick-Cにはファクトリーテスト用のスケッチが書き込まれていて、M5Stick-CをUSBケーブルに繋げば電源が供給されてLCDスクリーンに内蔵センサーからの情報が表示されるはずですが、内蔵のバッテリーが放電してしまい電源管理用ICであるAXP192の保護回路が働いてしまうと何故か([AXP192のデータシート](https://github.com/m5stack/M5-Schematic/blob/master/Core/AXP192%20Datasheet%20v1.13_cn.pdf)は中国語の物しか存在せず詳細は読み取れず…)LCDへの電源の供給が正常に行われなくなるようです。

そんな訳で、内蔵バッテリーを充電せずに放置されていたM5Stick-CをUSBケーブルに繋いだ場合にはマイコンチップESP32などは動作しているけどLCDには何も表示されないという現象が**かなり頻繁に**起きるようなのです。

#### ESP32が動いているか調べてみる
Arduino IDEやUSBシルアルのデバイスドライバーがインストール済みのPCにM5Stick-Cを繋ぐとWindows PCの場合には「コンピューターの管理(ローカル)」->「デバイスマネージャー」->「通信ポート（COMとLPT)」に「COM3」などの名前で(利用環境で異なる)M5Stick-CがCOMポートそして現れるはずです。
自分の環境でM5Stick-CがCOMのそれかがわからないなら、「通信ポート（COMとLPT)」を開いたまま「通信ポート（COMとLPT)」M5Stick-CをUSBケーブルに繋いだり外したりするとスクリーンショットのように該当のCOMポートが現れたり消えたりするはずです。

<img width="302" alt="スクリーンショット 2019-11-27 15.06.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/37ca3448-dc2c-0b92-f23c-4fa858ec2e40.png"><img width="353" alt="スクリーンショット 2019-11-27 15.06.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/358b99cc-1902-f4c9-64e0-13ff3b7b3f4f.png">

PCでM5Stick-CがCOMポートとして識別されているならM5Stick-CのCPU ESP32は動作しているはずですからArduino IDEからのスケッチの書き込みが可能なはずです。

#### 念のため、Arduino IDEからボード(M5Stick-C)の情報を読み取ってみる
Arduino IDEのメニューから「ツール」->「ボード情報を取得」を選べばCOMポートに接続されたボード(M5Stick-C)の情報を読み取ることができます。
これで何らかの情報が表示されるならM5Stick-Cは動作していると考えていいでしょう。

<img width="461" alt="スクリーンショット 2019-11-26 18.27.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/740e5fe3-7a57-8d4c-2cfb-384757a77686.png">
<img width="404" alt="スクリーンショット 2019-11-26 18.26.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/2a2256f6-6bda-2990-3453-1acbc74753e8.png">


### まずはスケッチをファクトリーテストのスケッチに書き換えてみる
M5Stick-Cが起動しなかったりLCDに何も表示されない場合には、書き込まれたスケッチの不具合で処理が中断していたりする可能性もあるので、まずはスケッチを初期に書き込まれていたファクトリーテストのスケッチに書き換えてみることをお勧めします。

ファクトリーテストのスケッチはArduino IDEの「ファイル」->「スケッチ例」->「M5StickC」->「Basic」->「FactoryTest」で見つけることができます。
<img width="463" alt="スクリーンショット 2019-11-27 11.15.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/2d54ee90-de70-071c-3afb-b0b702547762.png">
<img width="431" alt="スクリーンショット 2019-11-27 11.15.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/31d6496a-2cb0-07da-584b-c24f0d33440f.png">

ファクトリーテストのスケッチの書き込みと実行が完了していればM5Stick-Cの電源を投入してM5Stick-C本体LCD側面のスイッチを押すと内蔵の赤色LEDが点灯するはずです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/6429ac88-5d74-5a9a-385b-94b8080fc693.jpeg" width="40%">　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/eb7ff1a9-45ec-4b46-685e-f78373bbba69.jpeg" width="40%">

### 充分に内蔵バッテリーを充電する
充電せずに長時間放置されていたM5Stick-Cの電源をオンにできない場合はM5Stick-CをUSB電源に繋ぎ30分以上充電してから起動してみます。
※この際、USBケーブルをPCに繋いで充電を試みた場合、PCとM5Stick-Cの間でのネゴシエーションが上手くゆかず充電されないこともあるので、できればUSB充電器などに接続した方が良さそうです。

### 内蔵のバッテリーを放電させながらUSBから給電する
それでもまだ電源をオンにできない場合は、ジャンパワイヤーを使用して**BAT**を**GND**に短絡し、USBを電源に接続してみてください。**BAT**を**GND**に短絡したまま30分間充電した後に電源を投入し、正常にM5Stick-Cが起動したならば短絡を外します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/488ddd42-72e6-e970-8796-356804f36242.jpeg" width="40%">　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/1c803584-cc1d-0f35-c8d4-b3d0cf940681.jpeg" width="40%">

### ファームウエアを書き込み直してみる
それでも上手く動作しない場合にはM5Stack社のWebサイトから[ファームウェアの書き込みツール](https://docs.m5stack.com/#/en/related_documents/M5Burner)をダウンロードして最新のファームウエアを書き込んでみます。
※この際に書き込むファームウェアは**UIFlow-v1.3.1-Beta**ではなく**UIFlow-v1.2.3**をツール左側のメニューから選んで書き込むようにという指示でした。

自分の場合は1番目の「30分以上充電してから起動してみる」は丸々24時間以上充電状態で放置してから電源を投入しても回復しなかったので、2番目の「ワイヤーを使用して**BAT**を**GND**に短絡して充電する」を試したところ、無事にM5Stick-Cは起動してLCD画面に情報が表示されました。

### 電源管理用のICをリセットする
その後いろいろと調べたところ、このように電源が投入できなかったり、電源ははオンになってもLCDに何も表示されなかったりするのはM5Stick-Cに内蔵されている電源管理用のICチップAXP192の保護回路が働いて正常に充電や給電ができなくなるらしく、これはこのWebサイトで紹介されているような[電源管理用ICチップをリセットするためのアダプター](https://macsbug.wordpress.com/2019/07/09/m5stickc-start-adapter/)をM5Stick-Cに繋ぐか、単純に1KΩの抵抗でHAT接続用の8ピンヘッダーソケットの**G0**と**3V3**を接続した状態でUSBコネクタから給電を行えば電源管理用のICチップの保護回路がリセットされるようです。

(そういえば、自分が所有している某ソニーのAndroidタブレットも電源管理回路周りの設計に難があるらしく、一度電源オンの動作中に完全放電させてしまうと2度と充電できなくなってしまい、完全にモノリスと化してしまった…)