Open6
M5Stackでセンサログ取る準備
とりあえず既製品では上手く行ったので今度は自作。
今回はESP32公式のライブラリESP-IDFだけ使って、センサはUARTなりI2Cを直接操作する方向で。つまりM5 StackのArduinoライブラリは採用しない。
ESP-IDFはドキュメントがそれなりに充実している。
ライブラリはかなり充実していて、必要そうなものはBluetooth-PANを除いてだいたいある:
- core dump: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/core_dump.html
- http server: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/esp_http_server.html
- mDNS: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/mdns.html
- lwIP(BSD Socket): https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/lwip.html
- Wi-Fi: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html
- ESP-NETIF(OSのEthernetドライバレイヤ): https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_netif.html
Bluetooth PANは無いので、代わりにBTStack https://github.com/bluekitchen/btstack かな。。BTStackは商用利用は別途ライセンスが必要なものの、非商用であればソースコード含め自由に利用できる。
ツールチェーンの準備
前Qiitaに書いてたのでそのままで ...とは行かず、一応治った問題と新規に発生した問題を追記しておいた。
[INFO ] (elapsed: 369:22.04)
369分って6時間も掛かったのか。。まぁたぶんビルドにHDDを使ったのがよくなかったな。。
Python 依存関係のインストール
export IDF_PATH=`pwd`
pip install -r requirements.txt
いつのまにか requirements.txt
に IDF_PATH
環境変数の参照が入った ので手設定する必要があった。
IDF_MAINTAINER
を見るようになった
環境変数 Toolchain:
/cygdrive/f/espwork/crosstool-NG/builds/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc.exe,
crosstool-ng version esp-2021r2 doesn't match supported version esp-2021r1
Please try to run 'idf.py fullclean' to solve it quickly.
Check Getting Started documentation if the error continues.
You can override this error and proceed with build by defining the
IDF_MAINTAINER environment variable.
やめてくれ〜
導入は今年に入ってからっぽい。
とりあえずBTstackを入れてビルド通した
ええと残件は。。
- ESP-IDFのlwIPと繋ぎ込む
- ペアリングとかのハンドラを書く -- 物理ボタン押したらペアリングするとかそういう奴
- 接続が切れたら再接続するとか細かい処理を用意する
- httpサーバを起動してAndroid側からデータ読む
かなり遠いな。。
無駄なコードが大量に入っているので既に機械語部分だけで400KiBとかある。。ESP32はいわゆるExecute In Placeが可能で機械語部分についてはキャッシュをいくらか取れば十分なので大した問題にはならないけど、消費電力を考えると無駄コードは避けたい。
ボタン取れるところまで組んだ
とりあえず全部のコードをビルドしてボタンに反応するところまで組み立てた。あとはまぁソフトウェアの領域なんで。。