基于alexa voice的智能语言控制系统-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6613|回复: 2

[项目] 基于alexa voice的智能语言控制系统

[复制链接]
发表于 2017-10-21 01:54 | 显示全部楼层 |阅读模式
本帖最后由 422234 于 2017-11-22 16:55 编辑

硬件准备:

1.raspberry pi 3B

2.8GB以上的TF卡

3.USB麦克风

4.音响

5.电源、数据线、网线等

Amazon ALEXA语音服务

首先需要注册Amazon developer账号然后创建产品


Snipaste_2017-10-22_13-54-49.png

Snipaste_2017-10-22_14-05-43.png


填写设备名称,ID之类的


Snipaste_2017-10-22_14-23-00.png

新建配置文件,那些name之类的填自己想的就行了


Snipaste_2017-10-22_14-32-14.png


然后设置网络,在Allowed origins和Allowed return URLs分别输入https://localhost:3000和https://localhost:3000/authresponse

Snipaste_2017-10-22_14-35-10.png

这样alexa语音服务就配置好了

树莓派端:

下载raspbian系统然后烧录进TF卡中配置好wifi(注意!!!树莓派的系统必须是jessie版本的!!!一定要注意)

连接好wifi就可以开始搭建alexa了,首先更新一下:


sudo apt-get update && apt-get upgrade -ycd Desktopgit clone https://github/com/alexa/alexa-avs-sample-app.git

等待下载完成后:


cd Desktop/alexa-avs-sample-app/sudo nano automated_install.sh

然后将下面这3个更换为自己的

Snipaste_2017-10-27_19-13-13.png

更换完成后按Ctrl+o保存Ctrl+x退出然后:


  . automated_install.sh

安装环境,运行后会有选项,都选y,另外两个一个选US,另一个选3.5mm jack即可,由于源在国外,所以安装环境会比较慢,但不推荐换源,很可能出问题。


安装完成后需要将树莓派插上屏幕,然后打开3个终端:


第一个终端:

cd Desktop/alexa-avs-sample-app/samples/companionService/npm start

出现listening on port 3000就好了


第二个终端:

cd Desktop/alexa-avs-sample-app/samples/javaclient/mvn exec:exec

这时会弹出来个窗口选ok即可

Snipaste_2017-10-29_15-40-50.png


选完后会自动转跳到浏览器界面登录你的亚马逊账号


Snipaste_2017-10-29_15-43-36.png


登录成功就好了

第三个终端:


cd Desktop/alexa-avs-sample-app/samples/wakeWordAgent/src/./wakeWordAgent -e sensory

这样就可以对着麦克风说alexa唤醒了!!!

ESP8266端:

首先要准备ESP8266模块,然后在arduino IDE里添加ESP8266板卡(具体参考这里,注意!必须是v2.4.0的那个版本才可以编译过去)

接线图:

alexa.png

然后添加库:

ESPAsyncTCP

ESPAsyncUDP

FauxMoESP library

添加库后复制以下代码:

[kenrobot_code]#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"

/* Network credentials */
#define WIFI_SSID "你的wifi"
#define WIFI_PASS "密码"   

#define SERIAL_BAUDRATE 115200

/* Belkin WeMo emulation */
fauxmoESP fauxmo;

/* Set Relay Pins */
#define RELAY_1 D5
#define RELAY_2 D6
#define RELAY_3 D7
#define RELAY_4 D8

void setup()
{
   Serial.begin(SERIAL_BAUDRATE);
   //setup and wifi connection
   wifiSetup();

   //Set relay pins to outputs
   pinMode(RELAY_1, OUTPUT);
   pinMode(RELAY_2, OUTPUT);
   pinMode(RELAY_3, OUTPUT);
   pinMode(RELAY_4, OUTPUT);

   digitalWrite(RELAY_1, HIGH);   
   delay(500);
   digitalWrite(RELAY_2, HIGH);  
   delay(500);
   digitalWrite(RELAY_3, HIGH);  
   delay(500);
   digitalWrite(RELAY_4, HIGH);   
   delay(500);
   
   fauxmo.addDevice("Light One");
   fauxmo.addDevice("Light Two");
   fauxmo.addDevice("Outlet One");
   fauxmo.addDevice("Outlet Two");
   fauxmo.addDevice("Bed Room");
   fauxmo.addDevice("Living Room");
   fauxmo.onMessage(callback);
}

void loop()
{
  fauxmo.handle();
}

/* ---------------------------------------------------------------------------
Device Callback
----------------------------------------------------------------------------*/
void callback(uint8_t device_id, const char * device_name, bool state)
{
  Serial.print("Device "); Serial.print(device_name);
  Serial.print(" state: ");
  if (state)
  {
    Serial.println("ON");
  }
  else
  {
    Serial.println("OFF");
  }
  
  //Switching action on detection of device name
  
  if ( (strcmp(device_name, "Light One") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_1, HIGH);
    }
    else
    {
      digitalWrite(RELAY_1, LOW);
    }
  }

  if ( (strcmp(device_name, "Light Two") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_3, HIGH);
    }
    else
    {
      digitalWrite(RELAY_3, LOW);
    }
  }
  
  if ( (strcmp(device_name, "Outlet One") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_2, HIGH);
    }
    else
    {
      digitalWrite(RELAY_2, LOW);
    }
  }
  
  if ( (strcmp(device_name, "Outlet Two") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_4, HIGH);
    }
    else
    {
      digitalWrite(RELAY_4, LOW);
    }
  }
  
  if ( (strcmp(device_name, "Bed Room") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_3, HIGH);
      digitalWrite(RELAY_4, HIGH);
    }
    else
    {
      digitalWrite(RELAY_3, LOW);
      digitalWrite(RELAY_4, LOW);
    }
  }
  
  if ( (strcmp(device_name, "Living Room") == 0) )
  {
    if (!state)
    {
      digitalWrite(RELAY_1, HIGH);
      digitalWrite(RELAY_2, HIGH);
    }
    else
    {
      digitalWrite(RELAY_1, LOW);
      digitalWrite(RELAY_2, LOW);
    }
  }


}
   
/* -----------------------------------------------------------------------------
Wifi Setup
-----------------------------------------------------------------------------*/
void wifiSetup()
{
   // Set WIFI module to STA mode
   WiFi.mode(WIFI_STA);

   // Connect
   Serial.println ();
   Serial.printf("[WIFI] 连接中..... %s ", WIFI_SSID);
   Serial.println();
   WiFi.begin(WIFI_SSID, WIFI_PASS);

   // Wait
   while (WiFi.status() != WL_CONNECTED)
   {
      Serial.print(".");
      delay(100);
   }
   Serial.print(" ==> 连接成功!" );
   Serial.println();

   // Connected!
   Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
   Serial.println();
}[/kenrobot_code]



纪念衬衫GET!!!!!
IMG_0695.JPG
发表于 2017-10-26 17:54 | 显示全部楼层
哈哈哈,被骗进来了
发表于 2017-10-31 14:12 | 显示全部楼层
1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 00:59 , Processed in 0.082215 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表