M5Stack Grayで赤外線受信をリハビリプログラミングしてた話...

久しぶりにM5Stackを使ってみた時の話を書いてみました。Qiitaは初心者なので温かい目でお願いしますm(_ _)m
また、以下のものは動作を保証するものではなく、ファームやIDEなどの設定などは割愛している部分が多いです。
#概要
* 準備
* M5GOを使ったアプローチ
 * ファーム入れる
 * UIFlowでプログラミング
* Arduinoを使ったアプローチ
 * ファームを入れる
 * Arduino IDEでプログラミング
 * 
##準備
まず、手元にあったM5Stackは少し前に買って遊んでいたものの、しばらく放置プレイ状態になっていたものを、久しぶりに使おうと引っ張り出してきたところから始まります。しかし、単品しか手元になかったため、`Switch Science`にて[M5Stack用赤外線送受信ユニット](https://www.switch-science.com/catalog/5699/)(¥728*送料込)をポチりました。
ただ、自分が持ってる`M5Stack Gray`では、`Groveポート`が **Aタイプ** のI2C通信専用で、今回のような赤外線(IR)などの部品には非対応だということが判明し、**物理的**につなげたのが以下の画像。非常にわかりにくくなっていますが、`IN`と書かれたピンを`36番ポート`に、`OUT`を`26番ポート`にそれぞれつなげました。どのポートに繋げればいいかは、GroveポートBタイプのピン番号の仕様を参考にしました。
![_IMG1936.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/bce731e6-4f7a-0b88-3ef6-70fa7816dc4b.jpeg)

##M5StackをM5Goでアプローチ
###ファームを入れる
ただ、いざ繋げてみて"Hello World"を書き込もうとしても全くダメだった上に、どのファームを書いたかも忘れてしまったので、ググってみたところ`M5Burner`を使えばうまくできるようだったので、`UIFlow`(画像内一番左のもの)を入れてみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/d3d98696-90db-7f6e-edac-04a5c3193ab4.png" width="">
###UIFlowでプログラミング
次に、UIFlowでプログラミングをブロック状のを組み立ててやっていきます。
この過程での話ですが、`ブロック→Python`は普通に切り替えができるんですが、プログラミングした後で`Python→ブロック`がダメらしく、切り替えようものならブロックで組み立てしていた時点までリセットされるという、少々めんどくさい仕様になってました。
![スクリーンショット 2021-07-01 16.54.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/5cf15e14-855a-af64-33f3-cfa1f48a3367.png)
左中程に`Units`と書かれたところがありますが、`Units`から赤外線データの読み込みはあまり相性が良くないのか、アナログ・デジタル読み込みで以下のように試してみました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/64cb1087-e524-c12c-fca1-2a863619b556.png" width="600">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/943bcb39-476e-023b-670b-ff40b67b08b2.jpeg" width="600">
こちらでは、デジタル読み込みを試してみた様子です。この時に`36番ピン`に繋がっていたものを、一時的に`2番ピン`に差し替えています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/5421efba-ace2-2397-b561-6cd173dbfb16.png" width="600">
以下はシリアルモニタの状況
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/9ef10180-294d-9efb-ab73-5e424932bda9.png" width="88%">

しかし、それでも出力値が、自分の思うような結果を得ることはできませんでした。
そこで、さらに調べたところ、赤外線データは`Arduino`で`IRremoteESP8266`を使うことで、どうやらメーカー毎に細かいデータを得ることができるらしいことがわかったため、UIFlowを使ったプログラミングはここで切り上げとなりました。(ただのカカシですな...)

##ArduinoIDEでアプローチ
###ファームを入れる
こっちのファームは以前入れたことがありましたが、すっかり忘れていたので慌てて調べる羽目になりました。少なくともファームは更新されてなさげだったので以前DLしたものを使いました。
```$ esptool.py --chip esp32 --port "M5Stackつなげたポート" write_flash --flash_mode dio -z 0x1000 "各自のディレクトリ/m5stack-20180516-v0.4.0.bin"
```
この後にも、ArduinoIDEでM5Stackを使えるようにする作業が必要になったりするんですが、以前に使った時の物がすでにあったためここでは割愛しますが、ようやくArduinoIDEで書き出せるようになりました。

###ArduinoIDEでプログラミング
今回は` IRremoteESP8266`の `IRrecvDumpV2`のスケッチ例をもとにM5Stackで使えるようにカスタマイズをします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/0e4175dc-b708-e2f3-9416-bfd487ab323e.png" width=88%>
以下は、書き換え後(左)と書き換え前(右)のものを比較したものです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/c81c0758-6e38-0522-fb9f-1d1f7b938c69.png" width="88%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/37868f20-81dc-8cc1-9c4f-8494d242b574.png" width="88%">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/00c33a2c-5b5d-df63-649c-1d1b64b46711.png" width="88%">
主に変えたところは、スケッチ例の初期ではArduino仕様で書かれている部分をM5Stackに合わせて書き換えています。また、一番最後の方では、シリアルモニタで出力されたデータを、一部M5Stackの画面に表示するためのものを追記してみました。画面があまり大きくないので、一つだけのデータを出すことにして、一行にデコードされた`Code`や`data`のデータが格納された`results.value`から取り出しました。

最終的に、M5Stackで実行したものが以下の通りです。結果の数値を一部隠していますが同一の値が出ています。(M5Stack画面)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/c07224f3-3a4d-ca8d-4323-75dee4bc1c32.jpeg" width=="70%">
(シリアルモニタの結果)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185343/14a9222c-dacd-e224-2e05-3b2458729bcd.jpeg" width="88%">

##
今回はこの辺にしますが、今後はもっと色々組んでいきたいと思います。
最後に、この素人のページにわざわざ立ち寄っていただきありがとうございました。

##参考文献
* https://mag.switch-science.com/2019/10/18/uiflowupdate/
* http://www.openspc2.org/reibun/M5/UI-Flow/1.3.2/
* http://ajimitei.blogspot.com/2019/09/m5stackm5stickgrove.html
* https://qiita.com/taka-murakami/items/a3c05115d5a5038ebb11
* https://lang-ship.com/blog/work/m5stack-ir-unit/
* https://wak-tech.com/archives/1627
* https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/index.html