Arduino 開発環境の M5StickCで HomeKitアクセサリーを作る！

# はじめに
Appleから初スマートスピーカーのHomePodが発売されていますが、GooleHome、Alexaに比べて、周辺機器がほとんど無いです。
iOS関連の勉強会などで、HomeKitアクセサリーの作り方を広める活動していますが、他のスマートスピーカーに比べて、難しい印象を受けます。
または、Apple公式のHomeKitADKがラズパイで動作しますが、各種センサーの繋ぎ込みの説明がありません。
難易度を下げるために、Arduino開発環境にすることで、Linux/Windows/macOSのマルチプラットホームでHomeKitアクセサリーを作ることができます。
センサーの繋ぎ込みも、Arduinoの豊富なライブラリーを使うことができます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Arduino 開発環境のM5StickCでHomeKitアクセサリーを作りました！<br>温度計とリレー制御です。<a href="https://twitter.com/hashtag/M5Stack?src=hash&amp;ref_src=twsrc%5Etfw">#M5Stack</a> <a href="https://twitter.com/hashtag/M5StickC?src=hash&amp;ref_src=twsrc%5Etfw">#M5StickC</a> <a href="https://twitter.com/hashtag/Arduino?src=hash&amp;ref_src=twsrc%5Etfw">#Arduino</a> <a href="https://t.co/av6KycA3xV">pic.twitter.com/av6KycA3xV</a></p>&mdash; Sam Akada@技術書典8 Day1あ08 (@sam_akada) <a href="https://twitter.com/sam_akada/status/1233631975556014080?ref_src=twsrc%5Etfw">February 29, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 事前準備
- Arduino 1.8.12
- M5StickC Arduino Library 0.1.1

https://github.com/m5stack/m5-docs/tree/master/docs/ja/quick_start/m5stick

<img width="977" alt="setup.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452335/deaa5785-c379-61f5-a405-d47e36622488.png">
<img width="912" alt="lib.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452335/8ec269ac-71d3-285a-3eb9-75c2e3df68cd.png">

# HomeKit Accessory Protocol (HAP) for Arduino Library をインストール
【macOSの場合】
$ brew install unrar ->unrarコマンドをインストール済みの場合は不要
$ cd ~/Documents/Arduino/libraries/
$ git clone https://github.com/SamAkada/ESPHap.git
$ unrar x ESPHap/wolfssl/wolfSSL.rar

# ディレクトリ構成
Arduino/libraries/wolfSSLのディレクトリができていることを確認してください。
wolfSSL.rarの別のツールで展開した場合は、Arduino/libraries/直下にフォルダーごと、コピーしてください。
<img width="339" alt="ssl.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452335/2bea4f89-2042-a1d5-041c-d91ab4db660c.png">

# サンプルプログラム
サンプルプログラムの先頭のWiFi設定を変更してください。
iPhoneなどのiOS端末が同一ネットワーク上でないと、HomeKitアクセサリーが認識しません。

const char* ssid     = "myssid";
const char* password = "mypassword";

Relay_Hap.ino: リレー制御プログラム
*Relay UNITが無くても、Lチカします。

ENV_HAP.ino: 温度計と湿度計プログラム
![IMG_9890.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452335/819ed6c6-bd84-80de-8c46-df5276ad9a5c.jpeg)

*他のセンサーについても、随時、紹介できたらと思います。

# HomeKitアクセサリーのセットアップコード
### 111-11-111

## トラブルシューティング

### Homeアクセサリーを見えなくなった
iOSのホームアプリから、該当のHomeアクセサリーを削除して、esptool.pyツールにて、M5StickCのフラッシュメモリを全消去してから、再度、プログラムの書き込みとペアリングを行ってください。

$ esptool.py --port /dev/cu.usbserial-xxxxxxxx erase_flash

esptool.py v2.8
Serial port /dev/cu.usbserial-xxxxxxx
Connecting....
Detecting chip type... ESP32
Chip is ESP32-PICO-D4 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 7.9s
Hard resetting via RTS pin...


たなかまさゆき さんのESP32でesptool.pyの使い方が参考になります。
https://lang-ship.com/blog/work/esp32-esptool-py/

### WiFi接続しない
Arduino IDEのシリアルモニタでログを確認してください。
LFのみ、115200bps

# 最後に
オンリーワンなHomeKitアクセサリーを作りましょう！

# 参考
[アップルのHomePodとHomeKit技術本](https://booth.pm/ja/items/1801723)
[ESPHap for M5StickC](https://github.com/SamAkada/ESPHap.git)
[macOS Catalina で M5StickCに書き込みできない](https://qiita.com/SamAkada/items/fa32d6072a832a10cd84)

# 謝辞
Many thanks to maximkulkin & Yurik72
https://github.com/Yurik72
https://github.com/maximkulkin