工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Alexaでテレビを操作:Arduino & ESP8266で実現する音声制御

必要な部品と用品

Arduino UNO ×1 IR送信ダイオードと組み合わせてTVコマンドを送信
NodeMCU ESP8266 ブレイクアウトボード ×1 Wi-Fiモジュール。Amazon Alexaアプリで「WEMO」デバイスとして認識。各デバイスごとにパルスをArduinoへ送信
IR送信モジュール ×1 100Ω抵抗と直列接続してTVへIRコマンド送信

必要な工具

使用するアプリとオンラインサービス

プロジェクト概要

Alexaでテレビを操作!

概要: Alexaに話しかけるだけでテレビを操作できるようにします。リモコンでできる操作なら何でもAlexaで実行可能です。リモコンのIR信号を記録し、音声コマンドで同じ信号を再送信する仕組みです。以下の手順で実装するか、YouTube動画を参照してください。

Step 1: 必要なライブラリのダウンロード

以下のライブラリをArduino IDEのlibrariesフォルダに追加:

Step 2: NodeMCU(Wi-Fiモジュール)のプログラミング

ESP8266-Alexa.inoを開き、NodeMCUにアップロード(ボードマネージャでESP8266ボード情報を追加済みであること)。変更が必要なのは:

Alexaでテレビを操作:Arduino & ESP8266で実現する音声制御
デバイス名のカスタマイズ箇所

デバイス名はこのスケッチで、送信するIR信号はIR-Alexa-Send.inoでカスタマイズします。

Step 3: テレビリモコンのIR信号を読み取り

IR_REMOTE_read.inoをArduinoにアップロードし、リモコンのボタンを押して受信したIR信号(16進数コード)を記録します。詳細はこのチュートリアルを参照。

Step 4: ArduinoでIR信号を送信(Alexa連携)

IR-Alexa-Send.inoを開き、Arduino Unoにアップロード(ボードをUnoに切り替え)。

両モジュールに電源を供給し、配線で接続。IR送信機はArduinoのピン3に接続。詳細は添付の回路図を参照。

Alexaでテレビを操作:Arduino & ESP8266で実現する音声制御
最終的な配線図

Step 5: Alexaでテスト

  1. Amazon Alexaアプリ(モバイル/PC)を開く
  2. 「スマートホーム」→「デバイスを追加」で、ESP8266-Alexa.inoで設定したデバイス名を検出
Alexaでテレビを操作:Arduino & ESP8266で実現する音声制御
検出されたデバイス一覧

検出後、以下のコマンド構造でテスト:

コード

ESP8266-Alexa.ino (C/C++) - NodeMCU用

NodeMCUに書き込み、WEMOデバイスをエミュレート

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

// Wi-Fi認証情報
#define WIFI_SSID "your_ssid"
#define WIFI_PASS "your_password"
#define SERIAL_BAUDRATE 115200

fauxmoESP fauxmo;

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

// リレーピン定義(実際はArduinoへの信号出力ピン)
#define RELAY_PIN1 13
#define RELAY_PIN2 2
#define RELAY_PIN3 14
#define RELAY_PIN4 15

void setup() {
  pinMode(RELAY_PIN1, OUTPUT); digitalWrite(RELAY_PIN1, LOW);
  pinMode(RELAY_PIN2, OUTPUT); digitalWrite(RELAY_PIN2, LOW);
  pinMode(RELAY_PIN3, OUTPUT); digitalWrite(RELAY_PIN3, LOW);
  pinMode(RELAY_PIN4, OUTPUT); digitalWrite(RELAY_PIN4, LOW);

  Serial.begin(SERIAL_BAUDRATE);
  Serial.println("FauxMo demo sketch");
  Serial.println("After connection, ask Alexa to 'turn pixels on/off' or 'turn relay on/off'");

  wifiSetup();

  // Alexaデバイス名登録
  fauxmo.addDevice("TV");
  fauxmo.addDevice("GregsNetflix");
  fauxmo.addDevice("Sleep");
  fauxmo.addDevice("Office");
  fauxmo.onMessage(callback);
}

void callback(uint8_t device_id, const char * device_name, bool state) {
  Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
  
  if (strcmp(device_name, "TV") == 0) {
    digitalWrite(RELAY_PIN1, state ? HIGH : HIGH); // 両方HIGHは元コードの仕様
  }
  if (strcmp(device_name, "GregsNetflix") == 0) {
    digitalWrite(RELAY_PIN2, state ? HIGH : LOW);
  }
  if (strcmp(device_name, "Sleep") == 0) {
    digitalWrite(RELAY_PIN3, state ? HIGH : LOW);
  }
  if (strcmp(device_name, "Office") == 0) {
    digitalWrite(RELAY_PIN4, state ? HIGH : LOW);
  }
}

void loop() {
  fauxmo.handle();
  delay(500);
  // パルス出力後はLOWに戻す
  digitalWrite(RELAY_PIN1, LOW);
  digitalWrite(RELAY_PIN2, LOW);
  digitalWrite(RELAY_PIN3, LOW);
  digitalWrite(RELAY_PIN4, LOW);
}

IR-Alexa-Send.ino (C/C++) - Arduino UNO用

NodeMCUからの信号を受け、対応するIRコマンドを送信

#include <IRremote.h>
IRsend irsend;

#define a 4  // TV
#define b 5  // GregsNetflix
#define c 6  // Sleep
#define d 7  // Office

void setup() {
  Serial.begin(9600);
  pinMode(a, INPUT);
  pinMode(b, INPUT);
  pinMode(c, INPUT);
  pinMode(d, INPUT);
}

void loop() {
  if (digitalRead(a) == HIGH) {
    irsend.sendNEC(0x57E3E817, 32); // Power
    Serial.println("TV");
    delay(500);
  }
  if (digitalRead(b) == HIGH) {
    // The Office 選択シーケンス
    irsend.sendNEC(0x57E354AB, 32); // Enter
    delay(2000);
    irsend.sendNEC(0x57E39867, 32); // Up
    delay(1000);
    irsend.sendNEC(0x57E39867, 32); // Up
    delay(1000);
    irsend.sendNEC(0x57E39867, 32); // Up
    delay(1000);
    irsend.sendNEC(0x57E3B44B, 32); // Right
    delay(1000);
    irsend.sendNEC(0x57E354AB, 32); // Enter
    delay(2000);
    irsend.sendNEC(0x57E354AB, 32); // Enter
    Serial.println("The Office");
    delay(500);
  }
  if (digitalRead(c) == HIGH) {
    // Sleep Timer 設定シーケンス
    irsend.sendNEC(0x57E38679, 32); // Options
    delay(1500);
    for(int i=0;i<4;i++) {
      irsend.sendNEC(0x57E3CC33, 32); // Down
      delay(700);
    }
    irsend.sendNEC(0x57E3B44B, 32); // Right
    delay(700);
    irsend.sendNEC(0x57E3B44B, 32); // Right
    delay(900);
    irsend.sendNEC(0x57E38679, 32); // Options
    Serial.println("Sleep Timer");
    delay(500);
  }
  if (digitalRead(d) == HIGH) {
    irsend.sendNEC(0x57E34AB5, 32); // Netflix
    Serial.println("Greg's Netflix");
    delay(500);
  }
}

IR_REMOTE_read.ino (C/C++) - リモコン信号解析用

// 2017.06.22
#include <IRremote.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 9, 2);
int receiverpin = 10;
IRrecv irrecv(receiverpin);
decode_results results;

void setup() {
  lcd.begin(16, 2);
  pinMode(receiverpin, INPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
    lcd.clear();
    lcd.print(results.value, HEX);
    delay(150);
  }
}

回路図

Alexaでテレビを操作:Arduino & ESP8266で実現する音声制御
ArduinoとNodeMCU、IR送信機の接続図

製造プロセス

  1. 産業用タッチスクリーン:修理か交換か?専門家の判断ガイド
  2. 経口避妊薬:歴史、メリット、リスク、製造
  3. Alexaでシーリングファンを音声制御:ステップバイステップガイド
  4. Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
  5. プロガイド:工作機械で金属穴あけ——エキスパートのヒント
  6. 車の修理をマスター:信頼性と節約のためのDIYヒント
  7. 産業制御システムの保護:実証済み戦略とベストプラクティス
  8. プロセス制御システムを診断・修正する8つの実証済みステップ
  9. PLCnextでWake-on-LANを使用してPCをリモート起動
  10. 産業制御システムをワイヤレスネットワークへ移行する
  11. なぜ熱硬化性複合材が現代製造の理想的選択なのか