前に設定を頼まれたWiFiクランプ式電力計なんだけどアプリだと使いづらいということでESP32を使ってデータをクラウドに蓄積できないかという検討をしてみることに。tuyaのクラウドでAPI使おうとすると有料だし…
tinytuyaがESP32で動くと良かったんだけど、暗号化系のライブラリの問題で厳しいようで、ESP8266からtinytuyaみたいにローカルでデータを取得できるようにしている人がいたのでESP32で試してみた。
使用させてもらったのはEspTuya。ほかにCryptoとArduinoJsonが必要だけど全部IDEからインストールできた。
このスケッチ、ところどころ不完全なのでそのままではビルドできなかった。
195行目のところで、"while (WiFi.status() != WL_CONNECTED"ってなってるところは次の行に.............ってなってるレベルで不完全なのでこの部分は
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); }
のように通常よくあるサンプルみたいに修正。
そんでもって201行目のloctimestamp = epochTime ....; ってところも中途半端なのでNTPから時間を取得するように修正。
const long gmtOffset_sec = 9 * 3600; const int daylightOffset_sec = 0; const char* ntpServer = "ntp.nict.jp"; configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); loctimestamp = time(NULL);
48行目の#include <ESP8266WiFi.h>はESP32用に#include <WiFi.h>に変更。そうするとFunctions.inoの272行目の
while ( _client.connected() && _client.availableForWrite() < len ) delay(10);
ってところで使われてるavailableForWrite()がESP32だと未実装なのでこの行をまるっと
while ( !_client.connected() ) delay(10);
のように変更。
あとはデバイスに合わせてEspTuya.inoのsDev disj1のところにLocal KeyをAscciからHEXに変換したものを入力するのとIPを修正。ほかのsDevの行はコメントアウト(loopの中のTest device2と3もコメントアウト)
とりあえずこれでWiFiのSSIDとパスワードをPJ-1103Aと同じにしてESP32に書き込んでみたらうまく動いた。getStatus()だとtinytuyaでDPSをプリントするのと同じ感じでプリントされるのであとはDPSとデータの対比表をつかってデータを抽出すればいけそう。
ESP32ならLCDつけて常時モニタリングしてもいいし、ついでにAmbientにアップロードもできたりして便利そう。PJ-1103AとLCD付きのESP32を組み合わせればデマンドとかを確認できるスマートメーターみたいなのを作れそう。
とりあえずデータをパースできるようにちょっと研究中。
0 件のコメント:
コメントを投稿