質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

アレクサからの複数サーボモータの制御について

oriemon
oriemon

総合スコア4

Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

0リアクション

0クリップ

2097閲覧

投稿2019/09/25 15:50

前提・実現したいこと

Amazon Echoで複数のワードごとに、対応するサーボモータを制御したいと考えています。
現在1つのサーボモータを下記のように制御しています。
Initial:90°→"ライトON"→サーボ125°
Initial:90°→"ライトOFF"→サーボ55°
ライティングソフトはArduino、ESP8266を使用、ライブラリはfauxmoESPより引用。

該当のソースコード:C++

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#include <Servo.h>

Servo myservo;

int servoIni = 90;
int servoState = 0;
int flag = 0;

#define WIFI_SSID "SSID"
#define WIFI_PASS "Password"

fauxmoESP fauxmo;

// -----------------------------------------------------------------------------

#define SERIAL_BAUDRATE 115200

#define ID "ライト"

// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------

void wifiSetup() {
// Set WIFI module to STA mode
WiFi.mode(WIFI_STA);

// Connect Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASS); // Wait while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(100); } Serial.println(); // Connected! Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());

}

void setup() {
// Init serial port and clean garbage
Serial.begin(SERIAL_BAUDRATE);
Serial.println();
Serial.println();

// Wifi wifiSetup(); // By default, fauxmoESP creates it's own webserver on the defined port // The TCP port must be 80 for gen3 devices (default is 1901) // This has to be done before the call to enable() fauxmo.createServer(true); // not needed, this is the default value fauxmo.setPort(80); // This is required for gen3 devices // You have to call enable(true) once you have a WiFi connection // You can enable or disable the library at any moment // Disabling it will prevent the devices from being discovered and switched fauxmo.enable(true); // Add virtual devices fauxmo.addDevice(ID); fauxmo.onSetState([](unsigned char device_id, const char * device_name, bool state, unsigned char value) { Serial.printf("[MAIN] Device #%d (%s) state: %s value: %d\n", device_id, device_name, state ? "ON" : "OFF", value); // Checking for device_id is simpler if you are certain about the order they are loaded and it does not change. // Otherwise comparing the device_name is safer. if (strcmp(device_name, ID)==0) { if(state){ flag = 1; }else{ flag = 2; } } });

}

void loop() {
// fauxmoESP uses an async TCP server but a sync UDP server
// Therefore, we have to manually poll for UDP packets
fauxmo.handle();

if(flag == 1){ lightOn(); flag = 0; }else if(flag == 2){ lightOff(); flag = 0; }

}

void lightOn() {
myservo.attach(D8);
delay(500);
myservo.write(55);
delay(500);
myservo.write(servoIni);
delay(500);
myservo.detach();
Serial.print("Switch turn on ...");
}

void lightOff() {
myservo.attach(D8);
delay(500);
myservo.write(125);
delay(500);
myservo.write(servoIni);
delay(500);
myservo.detach();
Serial.print("Switch turn off ...");
}

発生している問題

Alexaへの指定ワードを追加し(例:リビング、キッチンなど)、
対応するサーボモータの動作に関連付けできたらと考えています。
1台のESP8266もしくはESP32でAlexaより数通りの信号を受信、複数のサーボモータを制御、
という意味です。

試したこと

IDを複数作成し、対応するピンを指定したのですが、
スクリプト自体がRedefineによりエラー、もしくはコンパイルできても適正に信号が送られず、
サーボモータが動作しません。

ご教示のほど、何卒宜しくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2019/09/25 23:56

エラーが出るなら、エラーメッセージを、そのままの形で提示しましょう また、コードが見づらいので、質問を編集し、<code>ボタンで出てくる’’’の枠の中にコードを貼り付けてください
oriemon

2019/10/02 08:00

ご指摘ありがとうございます、以後気を付けます。 都度様々なエラーが出ていたので端折ってしまいましたが、下記の通り自己解決(未解決)に至りました。 RedefineについてはVoid setupの重複を解消することで解決致しました。 しかし調べてみると、現在のAlexaの仕様で指定できるTCPポートは80のみであり、 ESP1台で複数のサーボを家電ごとに操作することはできないようです。 リレーなどを咬ませれば可能なようですが、今回はESP8266単体での対応を考えておりましたので、 一旦解決とさせていただきます。 ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Alexa

Alexa(アレクサ)は、米アマゾンが開発したクラウドベースのAIアシスタント。Amazon EchoやEcho dotに搭載され、話かけると音楽を再生したり、天気予報やスケジュールなど様々な情報を提供します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。