🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Alexa

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

C#

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

Q&A

解決済

1回答

3075閲覧

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

oriemon

総合スコア4

Alexa

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

C#

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

0グッド

0クリップ

投稿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によりエラー、もしくはコンパイルできても適正に信号が送られず、
サーボモータが動作しません。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/09/25 23:56

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

2019/10/02 08:00

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

回答1

0

自己解決

現在のAlexaの仕様では、指定できるTCPポートは80のみ。
そのためESP8266単体で複数のサーボを家電ごとに操作することはできないようです。
また、以前使用していたWEMO-EMULATORはサーバを提供するBelkin international Ink.が
中国企業に買収された関係で、現在は使用できなくなっているようです。

スクリプトの書き換えでは対応不可のため、一旦解決とさせていただきます。
ありがとうございました。

投稿2019/10/02 08:04

oriemon

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問