Make一覧

ベランダセンサーの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サービスはいつ潰れてもいいように自前の代替の仕組みを用意しとかないと。


音声による赤外線リモコンで明りの制御

結局、pi zero wとRPZ-IR-Sensor phatで作成。ESP-IRの赤外線LEDは指向性が強くて使いづらいのでやめた(特定の機器の赤外線受光部近くで使うには良いが)。スマートスピーカとの連携はIFTTTを使用してwebhooksで受信。外部公開するので、webサーバまわりはなるべく不要な機能を消して、SSL(オレオレ証明)と認証は実装した。このphatはBME280(気圧、湿度、温度センサー)、TLS2561(照度センサー)も載ってるのでこれらも利用する予定。

で、居間の自分の机の上で疎通テストをしてたら天井が「ピッ」と鳴る。寝室のシーリングライトのリモコンコマンドなのだが(笑)。どうやら居間のシーリングライトの1つが寝室と同じリモコン対応機だった模様。結婚前のツレが持ってた物でリモコンもなくなってるから気づかなかった。寝室と同じコードでいける。

というわけでpi zero wをもう1セット購入した。居間は半分テスト用半分実用程度。

音声コマンドはショートカット化して、「寝室 つけて|消して|豆球」でOK。場所の特定はどこのHomeに言ったかで判断できるといいんだが。スマートホーム機能でなくIFTTT連携でやってるんじゃ難しいか。
Google AIY Voice Kitもゲットしたので、Google系のスピーカが3つです。Amazon系は招待状が全然来ないからdot1台だけ。どうなってるんだ?>招待状。


片手ではんだ付け

raspberry pi zero wのhatにピンヘッダをつけるべく、片麻痺になってから初めてのはんだ付けをした。

基板はテーブルに置いたままで、左手にはんだごて、右手にハンダの体勢。で、やってみると右手のハンダをうまく当てられない。仕方なしにコテ先にハンダをのせてからはんだ付けしたい部分にあてる。本来は、コテ先で付ける部分を熱して、そこにハンダを点けて溶かすんだが。で、ハンダがのったコテ先が震える震える。短く持って、前腕をテーブルの端に当てて安定させる。いやー難しい。数カ所ハンダブリッジが出来てしまったが、溶かし直してなんとか修正。40ピン全部はやってられないので、信号が必要なピンと両端の4ピン、4ピンをはんだ付けして完了。

はてさて動作確認は一発でOKでした。左手の精度と支持力をあげれば、結構はんだ付けできそう。2.54mmピッチ以上に限るけどね。


google home mini を壁に貼り付けた。。。が、はがれた

『「Google Home Mini」の壁掛けホルダーを試して分かったこと』というキーワードを見かけた。記事では3Dプリンタで作成したホルダーを使っていた。うちにもデルタな3DプリンタがあるのでSTLファイル手に入れれば作れるではあろう。だが1年以上動かしてないのでどう動くかわからんのと、変な動きをした時に片手で止められるかという心配もあって動作確認できていない。このプリンタで印刷したこのプリンタ用のスプールホルダーが折れちゃってるのもマイナス要因。予備も作ってあったけど片手で取り付けにくい取り付け方法なのです。

ってことで、なんの工夫もなく壁に両面テープで貼ってみた。この壁がマンションの外壁になる壁のため鋲のたぐいは刺さらない。なんかいい感じになった。机の上においてるとモノが触れたりして音量が変わったりしていたがそれを防げる。寝室のgoogle home miniも壁付けしたくなった。でも、寝室の設置したい壁は石膏ボードになるなぁ。google home miniの底部って引っ掛けられるような穴とか凹みが無いんだよなぁ。3Mのコマンドタブでささえられるかしらん。

で、数時間後。両面テープのgoogle home mini側がはがれた。めんどくさい材質だな。やっぱホルダー的なモノを介さないとだめか?とりあえずは、網と壁で挟んでる。


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分だけあかりをつけて」ってのも便利だなぁとか。


スマートプラグ

旅行前に発注しておいたスマートプラグが届きましたので設定。スマートプラグとはなんぞやと言うと無線LANでオンオフの制御が出来るACプラグ。
こんなの。

これでライトのオンオフを制御します。

まず設定。androidの「Smart Life – Smart Living」のソフトでSmart Lifeのサービスにアカウント作成して、無線Lanのパスワードを設定し、自宅のネットに接続可能に。無線Lanは2G限定なのでandroid側で5Gだとつながらん。あとプラグの名前も適当に変えとく。プラグには机のZライトと水槽のライトを配線。androidのgoogle homeアプリで場所とニックネームを設定。これでgoogle homeからは音声で制御可能。場所を「机」「水槽」、ニックネームを両方「ライト」にしたので「ねぇGoogle。机のライト点けて」とかで点く。androidの無線lanは1回設定しちゃえば5Gに戻してもOK。
水槽のライトのほうは日の出とともに点灯するようにIFTTTでアプレット作成。thisをWeather UndergroundでsunriseにしてthatをSmart Lifeで水槽のライトのオンにした。消灯は日の入りだと早すぎるから日の入りの2時間後とかしたいんだが1アカウントでlocationをUTC+7で緯度が東京と同じとこに変えたり出来るか検討中。それまではthisにdate&time使って19:30決め打ち。

このプラグ、停電からの復電時の動作を試してみたら、停電前の状態に復帰するみたい。オンならオンに、オフならオフに。「復電時は常にオフ」の設定も出来ると良かったかな。


google assistantのフレーズ認識

google homeがIFTTTでうまく認識してくれない件。ぐぐってみるとandroidのgoogle assistantアプリで認識を確かめている例があった。

自分「LEDつけて」→認識「LEDつけて」(元々動作してた)
自分「LEDけして」→認識 「LED消して」

うわ、音から漢字まで認識しとるかね。で、IFTTTのフレーズの設定を「LED けして」から「LED 消して」に変更してみたら今までの苦労がウソみたいに認識するようになった。当然LEDも音声で消灯までできる。
google home現時点でのtipsだな。常に改良されてるだろうからいつまで使えるtipsかはわからない。


IFTTTでESP32 (実験編)

IFTTTでgoogle home miniをトリガーにしてESP32につないだLEDをつけたり消したり。つけるのは動くが、消すのが音声コマンドの時点で受け取ってもらえない。また、「ライト」とか「照明」などの言葉はホームデバイスの予約語になってるみたいで自作フレーズには使えないのかな。もう少し調べよう。


google home notifier

試してみましたよ。Linux mint 17.3 mateだとnodejsでエラーが。Ubuntu 17.10をVirtualBoxで仕立てたけどなんかエラーでるねぇ。ってかUbuntu、 FcitxじゃなくiBusデフォになってたりする?
結局、どこのご家庭でも常備されてるRaspbery Piで成功しました。ただ文言を話すだけなら ATmegaのAquesTalk pico LSIでも出来るからなぁ。


スマートスピーカテスト

寝室の照明をコントロールする手始め。
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枚だけあるし。