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

422234 发表于 2017-10-21 01:54

基于alexa voice的智能语言控制系统

本帖最后由 422234 于 2017-11-22 16:55 编辑

硬件准备:1.raspberry pi 3B2.8GB以上的TF卡3.USB麦克风4.音响5.电源、数据线、网线等Amazon ALEXA语音服务首先需要注册Amazon developer账号然后创建产品

填写设备名称,ID之类的
新建配置文件,那些name之类的填自己想的就行了

然后设置网络,在Allowed origins和Allowed return URLs分别输入https://localhost:3000和https://localhost:3000/authresponse这样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个更换为自己的更换完成后按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即可
选完后会自动转跳到浏览器界面登录你的亚马逊账号

登录成功就好了第三个终端:
cd Desktop/alexa-avs-sample-app/samples/wakeWordAgent/src/./wakeWordAgent -e sensory

这样就可以对着麦克风说alexa唤醒了!!!ESP8266端:
首先要准备ESP8266模块,然后在arduino IDE里添加ESP8266板卡(具体参考这里,注意!必须是v2.4.0的那个版本才可以编译过去)接线图:然后添加库:ESPAsyncTCPESPAsyncUDPFauxMoESP library添加库后复制以下代码:#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(" 连接中..... %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(" STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
   Serial.println();
}http://v.youku.com/v_show/id_XMzEyMjAwNDM1Ng

纪念衬衫GET!!!!!

myra07 发表于 2017-10-26 17:54

哈哈哈,被骗进来了

syl312 发表于 2017-10-31 14:12

1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。
页: [1]
查看完整版本: 基于alexa voice的智能语言控制系统