m5stackで遊ぼう

#m5stackが楽しそう
m5stackが楽しそうだったのでarduino勉強がてら色々調べて遊んでみようと思って調べたことを並べています。
自分用の備忘録。

- 遊んだもの



    - `Arudino`を使って作ってみた
        - [(UART) teratermでループバックテスト](https://qiita.com/zasshyu6/items/ce6afd3efe71a60ac15c)
        - [(タイマ割込み) ストップウォッチを作る](https://qiita.com/zasshyu6/items/c0bd9bb592192b3c80e7)
        - [(タイマ割込み) パルスカウンターを作ってみる](https://qiita.com/zasshyu6/items/d4a1d719e59c713b2eeb)
    - `ESP-IDF`で調べたり試したりしてみた
        - [m5stackはPlatformIOでESP-IDFは使えなかった](https://qiita.com/zasshyu6/items/127dbb3c3da1d17fa663)



とりあえず今までやったことを並べています。
それぞれ別記事で詳細とソースを公開しています.

他に、以下のことをやってみたいなぁと思っています。

 -  ロジックアナライザ
 -  サーボモーター制御


##開発環境
まず、開発環境については以下で進めています。

- windows 10 Home 64bit 
- Visual Studio Code 1.37.1_(2019/09/08更新)
- PlatformIO
    - PlatformIOはESP-IDEとarduinoでプロジェクト作成可能

`m5stack`に乗っている`ESP32`はマルチコアなので、LCD表示用とUARTとかI/o処理でマルチスレッドやってみたい。
~~arduinoはマルチコアに対応していないようなので気が向いたらESP-IDF使ってみよう・・・~~
Arduino core for the ESP32はマルチコアに対応しているらしい!!!
以下の記事を参考にしました。
>Arduino – ESP32 のマルチタスク ( Dual Core ) を試す
https://www.mgo-tec.com/blog-entry-arduino-esp32-multi-task-dual-core-01.html

PLatFormIOの入れ方は以下の記事を参考にしました。わかりやすかったです。
>M5Stackの開発環境を整える - PlatformIO IDE編
https://qiita.com/lutecia16v/items/1c560bdd7eac7ebeaff7

~~自分の趣味用のPCはうまくいったのですが、会社のPCに入れようとしたらうまくいかなかったです。
オートコンプリート欲しかったからVScodeで作りたかったなぁ~~

**2019.09.16追記)**
単純にネットワークをブロッキングされてたから必要なパッケージをダウンロードできなかっただけでした。
ネットワークの知識不足を痛感しました・・・

ちなみに、開発中の新バージョン`Arduino IDE 1.9`だとオートコンプリート機能が付くらしいですが、まだ公式は`Arduino IDE 1.8.9`でした。オートコンプリートについては以下の記事で知りました。
>Arduino収めとArduino 1.9の新機能について
http://tekitoh-memdhoi.info/views/779

また、タイマ割込みをテストしていて、`arudino`だとタイマ割込みの周期が`1usec`以下ができないことが判明しました。
タイマ割込み周期を早くしたいので、`ESP-IDF`の方も挑戦してみることにしましたが、`ESP-IDF`は使えませんでした。
[`ESP-IDF`については、コチラで調べたことを並べています、](https://qiita.com/zasshyu6/items/127dbb3c3da1d17fa663)

##m5stackについて
>m5stack basic
https://docs.m5stack.com/#/en/core/basic

>回路図
https://github.com/m5stack/M5-Schematic/blob/master/Core/Basic/M5-Core-Schematic(20171206).pdf

買ったのはこれ。amazonさんで4200円で買えた。
回路図読んで色々調べたことを列挙します。

- 搭載CPU:ESP32-D0WDQ6
    - 80Mhz ～240Mhzまでの動作周波数。
    - 540 kByte RAM
    - 440 kByte ROM
    - wifi & BLE module付



- 標準でCPUと接続されてるもの
    - LCD
        - GPIO14,18,23,27,32,33を使っている。SPI接続の`ILI9341`。GPIO18,23はM5-Busに出ている。
    - スピーカー
        - GPIO25をDACとして使っている様子。`NS4148`っていうAMPでスピーカに入れる電圧を制御しているっぽい。
    - TF Card (回路図にはmicroSD-SPIってはっきり書いてるけど・・・)
        - GPIO4,18,19,23を使っている。SPI接続。GPIO18,23はM5-Busに出ている
    - ボタン
        - ボタンは4つ付いている。ボタンA,B,CはLCD面についててそれぞれGPIO39,38,37につながっている。
        - 電源ボタンはENピンと`IP5306`というICにつながっている。
    - その他
        - SPI外部フラッシュがついてる
        - `CP2104`でUSB-UART変換をしている。
        - 電源周りには`IP5306`ってICで制御してる感じ

調べてみると、M5-Busに出てるpinが結構Core部分にも使われている様子です。
この辺はピン設定を気を付けないと動かないことが多そうですね。

余談ですが、ESP32ってUSB-UART変換にFTDIじゃなくて`CP2104`を使ってることが多い気がします。
なんとなく買ったESP8266のボードもあるんですがそれも`CP2104`だった気がします。
個人的にはFTDIのほうが使う機会多かったので、少し珍しい気がしました。
流行りなのか、値段なのか、相性なのか・・・

##不明点とか調べたこととか

###動作クロックについて
`ESP-IDF`だと動作クロック変更できる関数があるらしいです。
`Arduino`もクロック設定できるライブラリがあるそうですが、`PlatformIO`で対応してるかわからず・・・
動作クロックはタイマ割込みとかの設定にかかわってくるから知りたいけどよくわからなかったです。
ただ、動作クロックを変更するとシリアルのbpsとかずれるようなので良く調べてから試してみようと思います。
(baud rateとか内部クロックに依存するから当たり前っちゃ当たり前)

**2019.09.16追記)**
`FreeRTOS`を使っているので、`FreeRTOS`のコンフィグをいじれば動作クロックを変更できることがわかりました。
ですが、`PlatformIO`でプロジェクトを作ると`FreeRTOS`と`Arudino core`がオブジェクトファイルで生成されてしまう為、
元ファイルをいじるには別ファイルでいじったやつを作成して、プロジェクト生成の時に変更して・・・
と手間がかかるので基本的にいじるのは無しの方向で行きます。

###CPUのブートについて
SPI-Bootができるようです。
でもDataSheet読んでもどうやってブートしてるのかよくわからなかった・・・
マイコンのブートって難しいですね・・・

###初期からはいってるフォントについて
フォントはSDカードでフォント入れて表示!!ってのが調べるとわんさか出てきます。
違うんだ！初期からはいってるフォントはないか調べたいんだ！って調べたら以下が出てきました。
気になる人は読んでみてください。この記事のおかげで自分は諦めがつきました。
>M5Stackとフォント　[ESP32]
https://hamayan.blog.so-net.ne.jp/2019-03-08

**2019.09.16追記)**
Arduino IDE のサンプルプログラムの中に各種フォントと文字大きさの変更プログラムがありました。
`M5stack`のライブラリー内のサンプルプログラムにある`All_Free_Fonts_Demo`で確認できます。
種類としては5種類くらいデフォルトでフォントが入っているようですね。

#今後について
またわからなくなったり気になることができたらここに追記していこうと思います。
各テストについてはその都度更新していこうと思います。
やる気が続いていたら・・・