Home Made Garbage

fauxmoESP で スマートホームデバイス自作

お父ちゃん  2019.9.10 
ホーム
電子工作
Raspberry Pi
IOT
WEB

ずいぶん長いことAmazon Echoを愛用させていただき、esp8266-alexa-wemo-emulator ライブラリで自作のAlexa連携デバイスも使用してきました。

ご覧のようにテレビリビング照明電気スタンドを声でコントロールして家族みんなで便利に使ってきておりました。

しかし急に機能しなくなったのです。。。alexa-wemo-emulatorライブラリはもう何年も更新されておらず、使用できないとの噂もチラホラ入ってきており遂に来たか。。という感じでございました。

もうすでにAmazon Echoによるテレビや電気のコントロールは生活に浸透しており、無いと成り立たない状況です。

そこで以下の記事を参考にさせていただき、fauxmoESPというライブラリへの移行を実施いたしました。

 

 

fauxmoESPライブラリ

今回採用するfauxmoESPはalexa-wemo-emulatorライブラリと同様にWiFi搭載マイコンのESP8266やESP32を疑似的にAlexa対応ホームデバイスにしてくれるライブラリです。本当にありがたいライブラリでございます。感謝

Arduino用ライブラリは以下よりダウンロードできます。
 https://bitbucket.org/xoseperez/fauxmoesp/src/master/

ダウンロードしたzipファイルを所定のArduinoライブラリフォルダに展開します。
2019/9/10現在の最新のライブラリバージョンは3.1.0でした。

今回はESP8266を使用しますので以下のライブラリも追加します。
 https://github.com/me-no-dev/ESPAsyncTCP

壁スイッチ ON/OFF

まずはリビングの照明をON/OFFするスイッチをfauxmoESPに変更します。

構成

Amazon EchoでデバイスをON/OFFしてサーボモータを動かして壁スイッチを押します。安物のESP8266ボードを使用しています。

部品

Arduinoコード

サンプルコード fauxmoESP_Basic.ino を参考にコード作成しました。

ESP8266のArduino用パッケージはESP8266 Community ver. 2.5.2を使用しています。安物ESP8266ボードの設定は以下のとおりです。

 

デバイス名を”リビング”としAmazon Echoで「リビングつけて」、「リビング消して」と発話してonSetState()コールバックでstateとして状態変化を検出します。

onSetState()コールバックではGPIOピンのHigh/Low設定などの簡単なことしかできないので、ここではstateの変化を変数flagで検出してloop()内でサーボを動かしています。

ちなみに「リビングを30にて」などと数字と共に発話するとonSetState()コールバックのvalueで受信されます。

発話の数字:0~100 [%] → Value:8bit値 0~255 に変換されます。
照明やLEDの調光に使えそうですね。

Alexaアプリ設定

スマホのAlexaアプリで”リビング”デバイスをホームデバイスとして追加します。

  • アプリの”デバイス”をクリック
  • ⊕をクリック
  • “デバイス追加”をクリック
  • “その他”をクリック
  • “デバイスを検出”をクリック

しばらく待つと

 
“リビング”がホームデバイスとして検出されます。

 

動作

よし!なおった!

 

おわりに

テレビと電気スタンドも同様にfauxmoESPライブラリに移行しました。

Amazon Echo と ESP8266 で スマートホーム ―テレビ制御―

Amazon Echo と ESP8266 で スマートホーム ―電気スタンド制御―

 

無事にAmazon Echoによる家電制御生活に戻れてよかったです 🙂 

テレビ制御コード (2019/10/29 追記)

リクエストありましたのでテレビ制御コードも記載いたします。赤外線コードは我が家のテレビの場合ですので適宜 赤外線解析して差し替えてください。

 

TV電源ON/OFF、音量大小、各チャンネル、入力切替、地デジ、BSなどをコントロールできるようにしました。

esp8266-alexa-wemo-emulator の時と同様に音量大小、各チャンネル、入力切替、地デジ、BSの制御にはAlexaアプリの定型アクションを使用しております。

Related Posts

「fauxmoESP で スマートホームデバイス自作」への14件のフィードバック

  1. すみませんメールアドレス忘れたのでもう一度書きます。
    fauxmoESPライブラリを用いた、テレビ制御のコードを教えていただくことは可能でしょうか

    1. コメントありがとうございます。

      テレビ制御用コード追記しておきました。
      ご確認ください。

      1. 素早い対応大変ありがとうございます。助かりました。
        参考にさせていただきます!!

  2. 私もスマートデバイスを作りたく試してみましたがwifiには接続できるのですが、デバイス検索できません原因としては何が考えられますか??

  3. TVはalexaから送信することができました。ありがとうございます。
    現在LEDシーリングライトも上記のコードにIDLEDとして追加し、付けたり消したりしようとしているのですが、プロトコルがUNKNOWNのため、同じようにできません。irsend.sendRawで送信するように設定したのですがうまくできません。よろしければ方法をご教授いただけませんでしょうか?よろしくお願いいたします。

  4. すみません。少しお聞きしたいことがあります。よろしいでしょうか?私は、fauxmoを用いて、自宅の赤外線で扱える機器全てを登録したIOT化に成功しました。ただ、alexaから機器をつけようとすると、機器の制御は出来るものの、”デバイスを検出できませんでした”とalexaが言います。このような現象はそちらでは起きていますでしょうか?

    1. コメントありがとうございます。
      この記事の “Alexaアプリ設定”節に記載している
      デバイスの検出作業は実行できてますでしょうか?

  5. こんばんは
    我が家のIoT化に大変参考にさせていただきました。
    恐縮ですが、2点教えていただけますでしょうか?
    1)USBから通電後、一回目の実行時だけサーボの角度が90度になってしまいます。2度目以降は指定した角度です。なお、USBを差し直す度、同様の動作をします。

    2)コード内に2つのIDを定義できないでしょうか?ESP一つで、オンとオフのサーボを2つ付けるイメージです。

    Arduinoの経験が浅く、ズレた質問でしたらすみません。ご教示の程、お願い致します。。

    1. コメントありがとうございます!

      >1)USBから通電後、一回目の実行時だけサーボの角度が90度になってしまいます。
      私の場合 起動後に90度になってほしいので
      初期角度を
      int servoIni = 90;
      としています。ここを変えるとよいかと思います。

      >2)コード内に2つのIDを定義できないでしょうか?
      ここではON( livingOn() 関数)とOFF(livingOff() 関数)で同じサーボを使っていますが
      違うサーボを指定しても問題なく動くと思います。

  6. ご返信ありがとうございます。
    1)起動後に90度になる件
    すでに0度で初期化しておりますが、ダメなようです。。サーボの問題でしょうか・・

    2)コード内に2つのIDを定義
    ご指摘ありがとうございます。隣のPINを指定したら、無事に動きました。

    1. >すでに0度で初期化しておりますが、ダメなようです。。サーボの問題でしょうか・・

      それでは setup() 内で
      myservo.attach(D8);
      delay(1000);
      myservo.write(servoIni);

      を追加でいかがでしょうか?
      ご確認よろしくお願い致します。

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください