後からこのブログを書いていますが、自作Alexaデバイスの一作目です。アレクサにエンジンを動かしてもらうやり方は、「アレクサ、お風呂湧かして」と同じです。むしろこちらが一作目なので、簡単です。なので、別の視点でまとめます。
Alexaデバイス化したArduinoマイコンのESP8266をAlexaアプリで音声制御します。そして、ESP8266がエンジンスターターを動かします。
なぜESP8266なのか

Alexa で ESP8266 を操作する方法【Alexa×Arduino 検討】
IFTTT などの外部サービスと連携させる
fauxmoESP ライブラリ等のエミュレータを使う
Alexa Smart Home Skill と AWS IoT を組み合わせる
この中で「fauxmoESP ライブラリ等のエミュレータを使う」方法が、外部のIOTサービスを使わないで済むので簡単に構築できます。要するにエミュレータライブラリを使って、そのライブラリが定義している固有の製品に化ける訳です。
fauxmoESPの紹介にはPhilips Hue lightをエミュレートしていると書いてあります。私が利用しているEspalexaも同じくPhilips Hue APIをエミュレートしています。そして、両ライブラリーともESP8266とEPS32に適用します。
ESP32はWifi/Bluetoothの両方に対応ですが、ESP8266はWifiのみです。ESP32は多機能高性能ゆえに他のArduino系のマイコンとちょっと違った使い勝手になります。また、普通のブレッドボードではpinが刺せません。私はWifiが使える体格が小さいマイコンとしてESP8266を選んでいます。
ESP8266 上下両側にピンが刺せる ESP32 片側の1列しかピンが刺せない |
エンジンスターター
私の車のエンジンスターターは安価で分解が可能でした。左が外観写真、右が内部基板です。黄色のボタンを押すとエンジンが動きます。メカニカルなタスクスイッチ式なので改造に手が出せます。アンサーバックはありません。
ICはPT2264と刻印されています。中華製のエンコーダICでデータシートがありました。
引用元:Fixed Code Remote Controller (PT2262, PT2264) (YCF102 Series)
簡素な作りですので、ボタンスイッチの役割をESP8266で代行すれば、Alexa対応エンジンスターターができそうです。
回路
リモコンスイッチのON/OFFをフォトカプラで代行させます。Alexaデバイス(ESP8266)の出力をフォトカプラの一次側に入力し2次側をスイッチングします。
下記の回路はリモコンスイッチの代用にトグルスイッチにしています。スイッチ端子は図示の抵抗値を持っていました。アンテナの接続はイメージです。
タクトスイッチの2次側電圧はスイッチOFFのとき0V、ONのとき2.8V(?)が出ています。
「アレクサ、エンジンをONにして」と命令したら、D8からHigh(3.3V)が出力され、フォトカプラの一次側がONします。すると同時に2次側が導通し、実際の回路ではスターター信号が発信され、スターター基板の確認用LEDも点灯します。
上記の情報によるとPT2264のOperation Voltage:9-12V DCでしたが、ESP8266の5Vpin電圧で車のエンジンがかかりましたので、特に昇圧はしませんでした。
エミュレータライブラリについて
AlexaデバイスをエミュレートするライブラリはEspalexaを使っています。先にも書きましたが、よく使われているfauxmoESPと同じようにPhilips Hueをエミュレートします。
Espalexaの使い方
GitHubからダウンロードしてArduino IDEにインストールします。
GitHubのEspalexaページに説明がありますが、自分の覚えのためにあらためて載せておきます。
基本的な構文
最初にWifiとEspalexaライブラリをインクルードします。この2つのライブラリは必ず必要です。
callback functionはデバイスごとにひとつづつ必要です。名称は任意です。
続いて、パラメータを3つ定義します。ひとつ目はデバイス名(任意の名称:Light 1)、二つ目はAlexaから呼ばれるcallback function(これは先に定義しています。デバイスの状態が変わるたびに呼び出されます。)、3つ目はデバイスのタイプを定義します。無くても良いみたいです。3つ目のパラメータの詳細はサンプルプログラムに説明があります。
loop関数の中でループさせます。
最後にcallback functionの中でやりたいことを書きます。
より複雑な(詳細な)構文
例えば、「アレクサ、エアコンを25度にして」などと、温度を指定することができます。
callback functionを次のように書き、
セットアップは、第3のパラメーターを"EspalexaDeviceType::dimmable"にします。
そして、callback functionの設定で、"d"に数値を入れた音声指定を作ることができます。
これは、現在の状態を見ることにも使えます。d->getValue()とするならば、取得できる値は0-255でそれぞれ下記表の意味になります。すなわち、取得できる値によって、その時点での電源のON/OFFを読み取ることができます。
No | 値 | 状態 |
---|---|---|
1. | 0 | OFF |
2. | 1 - 254 | Dimmed |
3. | 255 | ON |
Alexaデバイスのスケッチ
サンプルスケッチの”EspalexaFullyFeatured.ino”を元にして、不要と思われるところを削っています。十分に削り切れていません。
d->getValue()でON/OFFの状態を取得し、それに応じた処理をしています。手持ちのスターターはエンジンが動いているときに再度スイッチが押されると、エンジン停止の命令になります。それを有効にしたい場面もあるだろうし、困る場面もあるだろうし....。どちらかに決めるしかありません。