シーリングファンに対してAlexaコントロールを有効にする
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
| |||
| ||||
|
このプロジェクトについて
ここでは、Amazon Alexaを統合して速度制御を行うことで、通常のシーリングファンをスマートなものにした方法について詳しく説明します。アマゾンアレクサスキルセットを使用して速度変更を開始し、 ngrok ローカルに収容されたRPiサーバーにリクエストをルーティングするトンネリングサービス。これにより、Arduinounoに関連するリレーをオンにするように指示されます。
<図>
ローカルのRaspberryPiサーバーをセットアップする
サーバーを利用するには、次のサービスが必要です。
- Python PIP:Pythonパッケージをインストールするには、Python2.7または3pipを使用している場合、デフォルトでインストールされるため、この手順を回避できます
sudo apt-get install python-pip
- Flask:FlaskはPython用のサーバーパッケージであり、Pythonサーバーを簡単に実装するのに役立ちます。
pipインストールフラスコ
- フラスコアスク:アレクサフレンドリープログラムを簡単に作成するために使用されるフラスコ拡張。
pipインストールフラスコ-質問
- pyserial:Python用のシリアル通信モジュール
sudo apt-get install pyserial
- libpython2.7-dev
sudo apt-get intall libpython2.7-dev
サーバーを実行するように設定するために、必要なすべてのモジュールがインストールされます。同じもののPythonスクリプトを入力する必要があります
<コード> fromフラスコインポートFlaskfromflask_askインポートAsk、statementimport requestsimport jsonimport serial ser =serial.Serial( "/ dev / ttyAMA0"、9600)app =Flask(__ name __)ask =Ask(app、 '/')@ [email protected]( "FanOn")def on():ser.write(b'1 ')return statement( "天井ファンがオンになりました。")@ ask.intent( "FanOff")defoff() :ser.write(b'0 ')return statement( "天井ファンがオフになりました。")@ ask.intent( "FanLevelUp")def up():ser.write(b' + ')return statement( "天井ファンスピードアップ。 ")@ ask.intent(" FanLevelDown ")def down():ser.write(b '-')return statement(" Ceiling Fan speed down。 ")if __name__ ==" __main __ ":app.run (debug =True)
このPythonスクリプトを実行し、このスクリプトをRPiの自動開始リストに登録します。
3。 Ngrokをダウンロード
Ngrokは、デバイスをオンラインにするための安全なトンネリングプラットフォームです。このプラットフォームを使用すると、非常に簡単な方法でWebアプリケーションまたは任意のアプリケーションをオンラインにすることができます。ダウンロードするには、公式サイトにアクセスしてARM用にダウンロードしてください。
https://ngrok.com/
それを解凍し、それを抽出するディレクトリに移動します。コマンドを使用して実行します
./ ngrok http 5000
Alexaスキル
アマゾン開発者ページに移動し、開発者アカウントにサインアップします
https://developer.amazon.com/
サインイン後に開発者コンソールに入り、「Alexaスキルキット」を選択して入力します
<図>次に、[新しいスキルを追加]を選択します
<図>スキルの名前を入力し、呼び出し名を入力します。呼び出し名が必要な条件を満たすことを確認してください
<図>保存して次のステップに進みます
ここに、スキルを呼び出すためのインテントと発話の例、つまり各インテントを開始する単語の組み合わせを入力します。
意図は次のとおりです
{"intents":[{"intent": "FanOn"}、{"intent": "FanOff"}、{"intent": "FanLevelUp"}、{"intent": "FanLevelDown" }]}
サンプル発話
FanOnはファンを言うonFanOnはonFanOffを言う
<図> <図>
保存して次の段階に進みます。ここでは、意図が呼び出されたときにデータを送信する予定の場所を入力する必要があります。
ngrok を使用しているため 、 HTTPS、を選択します ngrokserveで生成された安全なリンクを入力して保存し、次のステップに進みます
SSL証明書の2番目のオプションを選択し、続行します
セットアップが機能しているかどうかを確認します。 ngrokサーバーが機能していて、Pythonスクリプトも実行されていることを確認してください。そうでない場合は、機能しません。
サーバーがリクエストを取得して更新していることがわかります。
Arduinoコード
添付のスケッチをarduinoにアップロードし、回路図で説明されているようにラズベリーパイに接続します。
int Fan [] ={13,12,11,10,9,8}; int n =0; void reset(); void set(char); void setup(){//セットアップコードをここに配置して1回実行します:for(int i =0; i <6; i ++){pinMode(Fan [i]、出力); } Serial.begin(9600); } void loop(){char x; if(Serial.available()){x =Serial.read(); reset(); set(x);}} void reset(){for(int i =0; i <6; i ++){digitalWrite(Fan [i]、LOW); }} void set(char x){switch(x){case '1':n =1;壊す;ケース '+':n ++;壊す;ケース '-':n--;壊す;ケース「0」:n =0;壊す; } digitalWrite(Fan [n]、HIGH);}
ハードウェア
回路図に示すようにハードウェアを接続します
<図>
幸せな作り。他のアプライアンスの音声を同様の方法でアクティブにします:)
コード
- arduinoスケッチ
- Pythonサーバーコード
arduinoスケッチ Arduino
このコードをarduinoにアップロードし、ラズベリーパイサーバーに接続しますint Fan [] ={13,12,11,10,9,8}; int n =0; void reset(); void set(char); void setup(){//セットアップコードをここに配置して1回実行します:for(int i =0; i <6; i ++){pinMode(Fan [i]、出力); } Serial.begin(9600); } void loop(){char x; if(Serial.available()){x =Serial.read(); reset(); set(x);}} void reset(){for(int i =0; i <6; i ++){digitalWrite(Fan [i]、LOW); }} void set(char x){switch(x){case '1':n =1;壊す;ケース '+':n ++;壊す;ケース '-':n--;壊す;ケース「0」:n =0;壊す; } digitalWrite(Fan [n]、HIGH);}
Pythonサーバーコード Python
ngrokがセットアップされた後、spythonでこのコードを解除して、フラスコからデータを受信するように設定します。 )ask =Ask(app、 '/')@ ask.launch @ ask.intent( "FanOn")def on():ser.write(b'1 ')return statement( "天井ファンがオンになりました。")@ ask.intent( "FanOff")def off():ser.write(b'0 ')return statement( "天井ファンがオフになりました。")@ ask.intent( "FanLevelUp")def up():ser.write (b '+')return statement( "Ceiling Fan speed up。")@ ask.intent( "FanLevelDown")def down():ser.write(b '-')return statement( "Ceiling Fan speeddown。" )if __name__ =="__main __":app.run(debug =True) 回路図
これは、デバイスを相互に接続する方法です 製造プロセス