Arduino一覧

室温センサー作り変え

micropythonでやってた室温センサー。連続動作4時間ぐらいでハングって動かなくなるので、1時間ごとにESP.restart()するようにしてたが、なんか腑に落ちないので。ESP32のArduinoで作り直した。httpまわりはmbedより楽だな。室内光センサとしてCDSもつけてDBにアップした。この室内光データを他のデバイスからも参照して、就寝中は表示デバイスを消したりするのに使います。


ESP32 OTA

家に帰ってからOTAを試しました。実機は昨夜ジップロックに入れてベランダに貼り付けてしまったので、もう一つのESP32にて。i2cデバイスがADT7410とLCDの状態で。
いざ、コンパイル。ってあっけないほど簡単にwifiでプログラムのアップロード完了。でも、シリアルはあくまでシリアルに出力されるだけ。Serial.print()のデバッグ文も無線の向こうのマイコン側で出力される。
ってわけで、いまいち使い勝手がわるいかな。


ベランダセンサーのESP32化

arduino互換機とXBeeでやってたベランダのセンサー。去年のマンションの外壁再塗装と入院でいまは部屋の中。子機の雨センサーはベランダに復帰させたのでこれだけが使える状態。
XBeeも低消費電力でスタックも軽いのだけど、違うこともやってみようと作り変え。

wifiで勝手知ったるjsonをrestで。iotらしいmqtt化はそのうち。右手がまだハンダごてをあつかえない為、ハード組み立てはブレッドボードで。センサーはi2cに統一。

昨日の朝はESP8266でやっていたのだが、昼にESP32-DEVCでも行けるんじゃないかと変更。こっちのほうがリソースに余裕あるい青歯にすることも出来る。その後ベランダで雨除けのケーシングする際にもう少し小さい方がいいなとブレッドボードを変更。ひさびさにFritzingをいじったがCAD系で左手でオブジェクトをクリックするのがきつくて、つい違うものクリックしちゃうよ(笑)。

最初のesp8266版の抜け殻


ESP32化してみた


ブレッドボードを小さいものに変更

LCDはデバッグ確認用なので、ソフトウエアからも取り外せるようにdipswで対応。i2c的には出力オンリーなので取り外してソフトはほったらかしでも問題はなさそうだけど。

とりあえず、
 ・センサーから情報読み取り
 ・読み取った値のweb表示
 ・読み取った値のjson化
 は出来たので。ベランダに設置して部屋の中のraspberry piから情報取得やグラフ系iot向けサービスと連携させていく。でもなぁpachubeの事もあるのでwebサービスはいつ潰れてもいいように自前の代替の仕組みを用意しとかないと。


ESPR irでgoogle home連携

ESPR irは画像の左側のモジュール。ひとつのモジュールで赤外線受信機と赤外線LEDの双方が載ってるのでゲットしました。USB-UART変換は別に要るけどいっぱい持っている。
で、寝室の照明のリモコンをirRecvDumpでデータ化。どうやらNECフォーマットっぽい。
全灯 NEC: 176807F
調光 NEC: 17640BF
豆球 NEC: 176C03F
消灯 NEC: 17600FF
プログラムを変えて、赤外線照射のテスト。まずローカルで、ESPR上のWebサーバでsubmitボタン3つで、全灯・豆球・消灯を実装して寝室の照明の操作に成功。ある程度赤外線LEDの向きに気をつかう必要あり。ファイアウォールを変更してIFTTTからのwebhooksを受けられるように改造して、google assistantをthisに設定。
これでやっと寝室の明かりを音声で操作できるようになりましたさ。ESP8266はいっぱいあるので、赤外線LEDと組み合わせて手作りモジュールも作りたい。はんだ付けやらコードの皮むきとかの両手での作業を治具用意して片手でも出来るようにしよう。

で、ツレが「30分後に消して」とかの機能をリクエストしてきた。リモコン自体にも30分後/60分後の消灯ボタンがあるので、これを決め打ちで動かすのは出来る。だがn分後とかm時間後の任意のdelayをどう実現できるか?考えたい。IFTTT自体にはthisとthatの間にdelayを置く機能は今現在はない。案1は時間を$パラメータとしてもらってESP8266の中でwaitする。案2はこのWebサイトでwebhooksを受けてwaitしてからESPへwebhooksを引き継ぐ。ただ、waitしてる間に新たに点灯コマンドが入った時に消灯をキャンセルするとか考える必要あり。あ、夜中トイレにいくのに「5分だけあかりをつけて」ってのも便利だなぁとか。


スマートスピーカテスト

寝室の照明をコントロールする手始め。
Google home miniをつかって音声コマンドをテストした。IFTTTを使用。Google home miniに「メールして」とお願いすると、自分のメールアドレスに「メールしたよ」という本文のメールが届くだけ。thatの部分をwebhookに変えて、自宅内のマイコンのWebサーバを引っ張らせて照明の赤外線リモコンと同じ発光をすれば良い。マイコンを外にさらすのもアレだけど、OSが無い分raspberry piとかをさらすよりは良いだろう。IFTTTでなくて直接宅内でスマートスピーカからRESTできるといいんだが、「Actions on Google」の「Actions SDK」 の方も試してみたい。宅内ローカル環境としてサーバ兼赤外線発光機を立てるならpiもありだな。pi zero wも1枚だけあるし。


BP35A1と格闘中

 工事のあった週の週末にはBルートのIDとパスワードが届いたので、スマートメータからの読出しのテストをしている。

 最初にPCでpythonのサンプルを試したらサクッととれた。居間からやっててメータボックスの中のスマートメータに対しても通信は問題ないみたい。

 続いて、ESP8266単体でのテスト。コードはここのをベースにSoftwareSerialはesp用のを入れて、さらに参照サイトの様にBP35A1との通信は9600bpsまで落としてみたが、受信欠落してしまう。
ESP8266でできると小さいし、無線LANで直RESTでデータ送信もできるので良いのだが。BP35A1とはソフトウエアシリアルではなくハードシリアルでつなげばいけそうではあるが。

 うって変わって、mbed1768でのテストに変更。ソースはESP8266の時にいただいてきたのをベースにmbedに合うように修正。mbedですらも、標準Serialだと受信欠落する。デバッグ用にPCともつないでいるからか。バッファリングしないとだめだぁとMODSERIALに変えてみた。したら、欠落することなくスマートメータとコネクトまではできるようになった。しかしそこから進まない。
 どうやら、ECHONET Liteの電文に0x00があるのがバッファリングするMODSERIALだとダメ臭い。MODSERIALはpc側だけにして、BP35A1とはRawSerialにしてみたら、電文がputcできるようになって、無事にワットが受信できるようにはなった。しかし、何度かループさせてると、受信データにゴミがはいることがあり止まる。

 だいぶ元のコードがやってる事がわかってきたので、シリアルのライブラリが便利なArduino系のESP8266単体に戻してハードシリアルでテストしたいと思う。これでダメだったら、Arduino Due出してくるかね。