打造DIY版Echo:樹莓派+ Alexa 語音服務

原文 https://aws.amazon.com/cn/blogs/china/raspberry-alexa/

關於本文
本文詳細闡述瞭如何在Java客戶端和Node.js服務器上使用和測試Alexa語音服務。

本實例需要用Node.Js來獲取Login的授權碼。

本指導提供詳細的操作指南對於在取得示例授權碼、依賴性和在運行Pi的過程中相應的硬件部署。對於Windows, Mac,或者通用的Linux指令,可以看這裏的嚮導

開始
所需硬件
1. Raspberry Pi 2 (Model B) –在亞馬遜上購買升級:當然,Raspberry 3也是可以的,請點擊這裏查看詳細操作。Pi的用戶-請點擊這裏來獲取幫助。
2. 微型的-USB 電源線 供樹莓派來使用(包括在樹莓Pi中)
3. 微型的 SD 卡– 需要預裝NOOBS – Raspberry Pi 8GB Preloaded (NOOBS) Micro SD Card
4. 網線
5. USB 2.0 小型麥克風 – Raspberry Pi 沒有自帶麥克風,需要外接來與Alexa進行交互-在亞馬遜上購買
6. 外部揚聲器3.5mm音頻插座/立體聲耳機插孔-在亞馬遜上購買
7. 一個 USB 鼠標和鍵盤,以及一個支持HDMI的外部顯示器 – 如果由於某種原因無法通過SSH協議進入到你的樹莓派時,我們也推薦你使用USB鍵盤、鼠標和一個便於使用的HDMI顯示器。稍後可以查看關於“SSH”協議的內容。
8. 無線WiFi適配器(可選)在亞馬遜上購買
所需技能
1. 基礎編程知識
2. 熟悉腳本

0 – 設置樹莓派

1. 將裝好NOOBS的SD卡插入樹莓派

2. 插入USB2.0的迷你麥克風和無線wifi適配器(可選)
3. 插入USB的鍵盤和鼠標.
4. 連接顯示器

1 – 啓動樹莓派

1. 連接電源                                                                                                                                                                                               2. 你的樹莓派會啓動,並顯示可以安裝的操作系統列表                                                                                                                 3. 選擇Raspbian 並點擊 Install

4. Raspbian將會啓動安裝流程. 注意:這個過程可能會持續一段時間。                                                                                       5. 按照完畢後,配置菜單 (raspi-config) 將會啓動. 這裏你可以設置一些基本參數:例如啓用攝像頭 ,然後選擇Finish

6. 啓動後,登錄到你的樹莓派,默認用戶名是pi,密碼是raspberry

更多信息: raspberrypi.org

2 – 安裝應用和依賴包

注意: 你需要安裝Terminal來安裝使用Alexa Voice Services所需的組件. Terminal 是默認安裝的,你可以從桌面上進入Terminal。可以點擊這裏瞭解更多關於Terminal的信息。

2.1 – 在樹莓派上打開 SSH

SSH允許從另一臺計算機遠程訪問的樹莓派的命令行(只要它們都在同一網絡上)。這樣您不需要將您的樹莓派連接到外部顯示器 。
SSH默認情況下在樹莓派是啓用的 。如果你在工作的時候遇到一些有關SSH的問題,確保它已經被安裝。在使用raspi-config 組件時,確保SSH已經安裝好。
在Terminal中輸入以下內容:

sudo raspi-config

然後導航到SSH,單擊回車選擇安裝SSH服務器

2.2 – 使用SSH 登錄到Raspberry Pi
現在,請SSH到您的樹莓派。這樣做之前必須確保你已經知道你的樹莓派的IP地址。
鍵入以下命令到終端:
hostname -I
> 192.168.1.10 //this is an example Raspberry Pi’s IP – it would be different for you

如果你是在Windows PC上,按照這的說明SSH Using windows

現在,你知道你的樹莓派的IP地址,就可以使用SSH遠程連接到它 。要做到這一點,打開電腦上的終端程序 並鍵入以下內容:

pi@<YOUR Raspberry Pi IP ADDRESS>

它會提示你輸入密碼。注:爲用戶PI默認密碼爲raspberry
現在你可以遠程連接到您的樹莓派,並可以且通過SSH遠程連接你安裝所有的工具。

2.3 – 安裝VNC服務器

VNC是一個允許遠程控制樹莓派界面的圖片化的桌面分享系統。這會讓操作變得很方便由於擺脫了外部的顯示器。

sudo apt-get install tightvncserver

打開VNL服務器

請鍵入:tightvncserver來打開VNC服務器

你將會被要求設置一個密碼。當你需要遠程連接到樹莓派時,請執行該操作。

在啓動時運行VNC服務器

如果你想確保在你重啓樹莓派之後,VNC服務器會自動啓動,請鍵入以下腳本:

cd /home/pi

cd .config

注意:確保“.”在文件夾前面。這使文件夾成爲一個隱藏的文件夾。

mkdir autostart

cd autostart

通過鍵入以下命令,創建一個新的配置:

nano tightvnc.desktop

編輯文件中的以下文本:

[Desktop Entry]

Type=Application

Name=TightVNC

Exec=vncserver :1

StartupNotify=false

按住ctrl-X後在鍵入Y來保存更改。

這樣的話,下一次你重啓VNC服務器時將會自動刷新。

通過VNC服務器連接到樹莓派

Mac系統: 請參閱 https://www.raspberrypi.org/documentation/remote-access/vnc/mac.md
Windows系統: https://www.raspberrypi.org/documentation/remote-access/vnc/windows.md
Linux系統: https://www.raspberrypi.org/documentation/remote-access/vnc/linux.md
(如果你喜歡的話)你現在可以不需要連接到顯示器,鼠標鍵盤.隨着SSH和VNC的安裝, 外部顯示器是可選擇的。通過樹莓派來感受自由吧。

2.4 – 安裝VLC
通過輸入下面命令獲取VLC媒體播放器:
sudo apt-get install vlc-nox vlc-data
注意:如果你正在運行樹莓派或者已經安裝了VLC,你需要執行以下的命令來移除這倆個相沖突的庫文件。
sudo apt-get remove –purge vlc-plugin-notify

sudo rm /usr/lib/vlc/plugins/codec/libsdl_image_plugin.so

無法獲取錯誤:在你安裝VLC時,遇到無法獲取的錯誤時,嘗試輸入以下代碼

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vlc-nox vlc-data

注意:運行”sudo apt-get upgrade”腳本時可能會花費一段時間,請耐心等待
源: https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=67399

確保VLC安裝成功

whereis vlc
這條命令會告訴你VLC的安裝位置.

大多數的項目會存在/usr/bin中

一般會顯示下面的結果
vlc: /usr/bin/vlc /usr/lib/vlc /usr/share/vlc /usr/share/man/man1/vlc.1.gz

設置VLC的環境變量

敲入以下命令:

export LD_LIBRARY_PATH=/usr/lib/vlc
export VLC_PLUGIN_PATH=/usr/lib/vlc/plugins

查看環境變量是否生效

echo $LD_LIBRARY_PATH
> /usr/lib/vlc

echo $VLC_PLUGIN_PATH
> /usr/lib/vlc/plugins

2.5 – 下載並安裝 Node.js
確認Node.JS 還沒有被安裝

node -v
> command not found
然後輸入:

sudo apt-get update
sudo apt-get upgrade
設置apt-get  repo的源:

curl -sL https://deb.nodesource.com/setup | sudo bash –
安裝Node:

sudo apt-get install nodejs

2.6 – 安裝JDK環境
你需要安裝 Java Development Kit (JDK) version 8 或者更高.

步驟1: 從Oracle的網站下載 JDK 8.

下載 Linux ARM 32 Soft Float ABI (文件名jdk-8u77-linux-arm32-vfp-hflt.tar.gz)

注意:雖然蘋果和一些智能手機有用64位的ARMv8,但是到現在爲止沒有樹莓的64-位ARM的處理器在pis系統上可用

步驟 2: 解壓內容 解壓縮並安裝到 /opt 目錄下:

sudo tar zxvf jdk-8u77-linux-arm32-vfp-hflt.tar.gz -C /opt

設置默認Java環境到jdk1.8

sudo update-alternatives –install /usr/bin/javac javac /opt/jdk1.8.0_77/bin/javac 1

sudo update-alternatives –install /usr/bin/java java /opt/jdk1.8.0_77/bin/java 1

sudo update-alternatives –config javac
sudo update-alternatives –config java
注意:如果被要求選擇一個可替換,請鍵入你剛剛安裝的相對應的jdk 版本號-例如-jdk1.8.0_77

通過下面的命令確認版本:

java -version
javac -version

2.7 – 安裝Maven
步驟 1: 下載 Maven

從以下鏈接下載apache-maven-3.3.9-bin.tar.gz文件

https://maven.apache.org/download.cgi

步驟 2:解壓內容  解壓壓縮包的內容到 /opt 目錄中

sudo tar zxvf apache-maven-3.3.9-bin.tar.gz -C /opt

步驟 3:告訴你的命令解析器在哪裏找到maven  由於將在系統配置文件中設置這些,因此這對所有用戶可用

創建一個新的文件 /etc/profile.d/maven.sh, 然後在裏面輸入以下內容:

export M2_HOME=/opt/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
保存這個文件。退出並退回到樹莓派中然後內容腳本就會生效,可以輸入以下代碼來進行測試:

mvn -version

3 – 開始使用Alexa的語音服務

3.1 – 註冊一個免費的亞馬遜開發者帳戶

獲取免費亞馬遜開發者賬戶

3.2 – 下載對樹莓派示例應用程序代碼和依賴

下載示例應用程序從Github repo上下載zip文件。如果要下載這個包,您必須同意Alexa的語音服務協議

3.3 – 複製並解壓你的樹莓派.zip文件

1.直接下載你的樹莓派的zip文件,複製,然後解壓您的樹莓派的zip文件。                                                                                   2.請在您的樹莓派記下它的位置。進一步的說明將把這個位置<REFERENCE_IMPLEMENTATION>

3.4 – 註冊產品並創建一個安全配置文件

1.登錄亞馬遜開發者門戶網站 – developer.amazon.com                                                                                                                   2.單擊應用和服務選項卡 – > Alexa的 – > Alexa的語音服務 – >入門

3.在註冊產品類型菜單中,選擇Device。

4.填寫並保存以下值:

設備類型信息

1.設備型號ID:my_device

2.顯示名稱:My Device

3.單擊下一步

安全配置文件

1.單擊安全配置文件下拉菜單中選擇“創建一個新的配置文件

2.常規選項卡

o安全配置文件名稱:Alexa的語音服務示例應用程序安全配置文件

o安全配置文件說明:Alexa的語音服務示例應用程序安全配置文件說明

o單擊下一步

客戶端ID和客戶端密鑰會爲你生成。

1.現在點擊網絡設置選項卡

o確保您剛纔創建的下拉菜單中選擇安全配置文件,然​​後單擊“編輯”按鈕。

o允許的來源:點擊“添加另一個”,然後輸入https://本地主機IP:3000 。

o允許返回網址:點擊“添加另一個”,然後輸入https://本地主機: 3000 / authresponse

o單擊下一步

設備詳細信息

1.圖像:以下測試圖像保存到電腦上,然後上傳:

2.分類:其它                                                                                                                                                                                             3.說明:Alexa的語音服務的示例應用程序測試                                                                                                                      4.你對商業化的預期時間是多久?:長4個多月/ TBD您的預計時間表                                                                                        5.有多少設備,你打​​算商業化?:0                                                                                                                                                        6.單擊下一步

亞馬遜音樂

1.啓用亞馬遜音樂?:否(您可以選擇選擇是,如果你想與亞馬遜的音樂實驗中填寫必填字段。但是,亞馬遜音樂不要求 使用Alexa的語音服務。)                                                                                                                                                                       2.單擊提交按鈕

您現在可以生成自簽名的證書。

4 – 生成自簽名證書

步驟1: 安裝 SSL

sudo apt-get install openssl

驗證安裝

whereis openssl
> openssl: /usr/bin/openssl /usr/share/man/man1/openssl.lssl.gz
修改目錄到 <REFERENCE_IMPLEMENTATION>/samples/javaclient.

cd <REFERENCE_IMPLEMENTATION>/samples/javaclient – //your sample apps location

步驟2: 修改SSL配置文件: ssl.cnf, 將所有YOUR_開頭的變量值替換爲真實值.

Note that countryName must be two characters. If it is not two characters, certificate creation will fail. Here’s what the ssl.cnf file would look like, replacing country, state, locality with your respective info.

請您注意國家名必須是倆個字符。如果不是倆個字符,證書可能會創建失敗。單擊這裏你將會看到ssl.cnf是什麼樣子的,替換你相對應的國家、洲、地區的信息

步驟3: 將下面文件設置爲可執行的屬性:

chmod +x generate.sh

步驟4: 運行腳本,生成證書:

./generate.sh

步驟 5: 過程中你會被提示輸入一些信息:

1.提示輸入product ID, 請輸入my_device
2.提示輸入 serial number, 請輸入123456
3.提示輸入password, 請輸入你希望的密碼 ,例如: talktome (也可以留空)

步驟6: 編輯Node.js server 的配置文件

文件的位置在:

<REFERENCE_IMPLEMENTATION>/samples/companionService/config.js.
進行下列變更:

  • 設置sslKey to                                                                                                                 <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.key
  • 設置sslCert to                                                                                                              <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/node.crt
  • 設置sslCaCert to                                                                                                 <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt

注意: 不要使用 ~ 來代表根目錄. 必須使用絕對路徑.

因此, 不使用~/documents/samples, 而用/home/pi/documents/samples.

步驟7:編輯JAVA客戶端的配置文件

這個配置文件在以下位置:

<REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json.

做出以下配置:

  • 設置companionApp.sslKeyStore 到                                                          <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/server/jetty.pkcs12
  • 設置companionApp.sslKeyStorePassphrase 到                                                                                                                      上述第五步中證書生成代碼中的密碼
  • 設置companionService.sslClientKeyStore 到                                                              <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/client/client.pkcs12
  • 設置companionService.sslClientKeyStorePassphrase到                                                                                                       上述第五步中證書生成代碼中的密碼
  • 設置companionService.sslCaCert to到                                                       <REFERENCE_IMPLEMENTATION>/samples/javaclient/certs/ca/ca.crt

5 – 安裝依賴包
更改目錄到 <REFERENCE_IMPLEMENTATION>/samples/companionService

cd <REFERENCE_IMPLEMENTATION>/samples/companionService
輸入下列命令來安裝依賴包:

npm instal

6 -安裝安全配置文件

1.打開web瀏覽器,並訪問以下網址 https://developer.amazon.com/lwa/sp/overview.html

2.在接近頁面頂部的位置,在下拉菜單中選擇你剛纔創建的安全配置然後單擊確認

3.進入一個隱私政策地址欄,該地址欄以http:// 或者 https://開頭。在此例子中,你可以進入一個模擬仿真的地址欄例如http://example.com
4.[或者]你也可以上傳一個圖片。這個圖片將被顯示在使用者的同意登陸亞馬遜網站的頁面上。
5.單擊保存。

6.然後打開Alexa Voice Service示例應用程序安全配置文件,單擊顯示客戶ID和客戶隱私。這項操作會展示出客戶的ID和客戶的隱私。保存這些值。你將會看到這些圖片。

7 – 更新配置文件

通過VNC登陸樹莓派

步驟1:更新config.js。導航到以下的文件然後在一個文本編輯器中打開該文件。

<REFERENCE_IMPLEMENTATION>/samples/companionService/config.js

在該文件中編輯以下幾個值 –

  • 客戶ID: 把你在前幾個步驟裏複製的客戶ID以字符串的形式粘貼在客戶ID中。
  • 客戶祕密: 把你在前幾個步驟裏複製的客戶機密以字符串的形式粘貼在客戶機密中。
  • 產品: 產品的對象包含一個你在開發者門戶創建的與產品類別ID一致的密鑰和一個屬於一系列特定的產品標誌符的數值。如果你是根據以上的指導操作的,產品序列ID是my device。那個獨特的產品序列號可能是任何數字類型的字符串,比如說123456。以JSON產品爲例:products:{“my_device”: [“123456”]}

保存文件。

步驟2:更新config.json。 導航到以下的文件然後在一個文本編輯器中打開該文件。

<REFERENCE_IMPLEMENTATION>/samples/javaclient/config.json
在文件中編輯以下值:

  • 產品ID : 以字符串的形式輸入my_device
  • dsn: 輸入一個數字型的字符串,這個字符串是你在服務器端的config.js頁面中用來描述產品對象裏的產品標誌符數值。例如:123456。
  • provisioning方法: 輸入companionService。

保存文件。

步驟 3: 準備pom.xml文件

到下面的文件同時在文本編輯器中打開該文件。

<REFERENCE_IMPLEMENTATION>/samples/javaclient/pom.xml
增加以下的代碼在pom.xml文件中< 依賴性 >部分:

<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
<scope>compile</scope>
</dependency>

8 – 運行服務器

通過VNC登陸樹莓派

在你的windows終端或者命令提示符中打出以下代碼:

cd <REFERENCE_IMPLEMENTATION>/samples/companionService
npm start

你已經成功開啓這個服務器,並且運行在端口3000上。

9 – 開啓客戶端

打開一個新的Window終端或者選項卡(在Raspbian中 輸入SHIFT+CTRL+TAB)

cd <REFERENCE_IMPLEMENTATION>/samples/javaclient

搭建應用平臺

在你搭建app平臺之前,確認項目是正確的同時所有必要的信息都是有效的。你可以通過執行以下的代碼來確認:

mvn validate

通過執行以下代碼下載依賴性文件並且搭建應用平臺:

mvn install

當安裝已經完成時,你在終端上可以看到“成功創建”的信息。

執行客戶端的應用:

現在可以輸入以下的腳本執行客戶端的應用:

mvn exec:exec

10 -從亞馬遜登陸頁面中獲得權限

1.當你執行客戶端時,window桌面可能會彈出一個類似於以下文本的訊息:

“通過訪問以下網址註冊你的設備,然後請跟隨指令操作:https://localhost:3000/provision/d340f629bd685deeff28a917一旦完成了請單擊OK”

從彈出的窗口中複製URL地址然後粘貼到web瀏覽器。示例:以下爲用來複制和粘貼的URL地址

https://localhost:3000/provision/d340f629bd685deeff28a917

注意:由於使用的是自簽名證書,你將看到一個關於不安全網頁的警告。這是一個意外。在測試的時候可以忽略這個警告,該網頁是安全的。

2.將會跳轉到亞馬遜的登陸頁面。輸入你的亞馬遜證書。

3.將跳轉到開發者權限頁面,確認許可你的設備可以通過剛纔設置的安全配置文件。

單擊Okay

4.你現在將會再次跳轉到一個以https://localhost:3000/authresponse開始的後面跟着查詢字符串的URL地址欄。這個網頁的主體部分將說明設備已經準備好

5.回到Java 應用然後單擊OK按鈕。這個客戶端現在已經可以接受Alexa請求。

6.單擊開始音頻按鈕然後在開始講話之前等待音頻提示。在你聽到音頻提示前會花費一到二秒

當你完成語音時,單擊停止音頻的按鈕。

現在開始與Alexa 交談

詢問天氣:單擊開始音頻的按鈕。

你:今天西雅圖的天氣怎麼樣? 單擊停止音頻按鈕。

Alexa:現在西雅圖的氣溫報告。

你可以詢問Alexa一些有意思的問題

在單擊了“開始音頻”之後,一旦你聽見了音頻提示,下面是一些問題你可以嘗試去和Alexa交流

• 要求歌曲回播: 播放Bruce Springsteen
• 常識知識:太陽的質量是多少克?
• 極客:機器人的三定律是什麼?
• 娛樂: 你可以跳rap麼?
• 設置定時期: 設置一個倆分鐘的定時期
• 設置鬧鐘: 設置一個早上 7:30 的鬧鐘

更多的關於音樂回放的功能  “前一首”,“播放/暫停”,和“下一首”按鈕在Java客戶端交互界面上被用來展示音樂按鈕事件。你可以使用音樂按鈕而不是與Alexa講話來改變播放列表的順序。比如說,你可以按“播放/暫停”按鈕來暫停和重複開始一首在音軌上的音樂。

爲了更好的展示“播放/暫停”按鈕,你可以說出以下命令: 在iHeartRadio上播放DC101,然後按“播放/暫停”按鈕。如果按鈕按下,這首音樂會終止。再次按下“播放/停止”按鈕重新開始這首音樂。

11 – 常見問題解答

我有一個與AVS一起工作的樹莓派,但是我不能從Alexa中聽到音頻迴應

檢查看一下是否你正在看通過終端的響應和是否在你的Alexa 應用上看到了響應卡。如果是的,你可能需要強制音頻通過local 3.5mm插孔,而不是HDMI輸出(這可能發生即使你沒有一個HDMI顯示器插入)。

爲了促使音頻通過local 3.5mm插孔,打開終端,然後輸入以下代碼:

sudo raspi-config

可以查看一下鏈接Raspberry Pi Audio Configuration

如何尋找樹莓派的IP地址?

hostname -I

無法獲取錯誤

在你安裝VLC時,如果遇到了一些無法獲取的錯誤,試圖輸入以下代碼

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vlc-nox vlc-data

在npm上有一些問題

如果你在安裝結點後遇到一些“npm 無法找到”的問題(樹莓的老版本結點), 嘗試一些以下操作:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install npm

如果我不能爲派找到網絡接口怎麼辦?

可以查看以下URL瞭解如何在派上建立筆記本電腦的wifi和網絡接口的連接https://www.hackster.io/Anwaarullah/sharing-wifi-with-raspberry-pi-using-a-lan-cable-ae1f44

ssl.cnf文件是什麼樣的?

單擊這裏將會看到ssl.cnf文件是什麼樣子的,並且根據你自己的國家、洲、地區來相應的替換

 “無法連接到配套服務”的錯誤

這可能是因爲以下三種情況的其中一種

1.不良證書– 這可能是下面情況的一個結果

  • 不良的ssl cnf文件(可以查看一下常見問題是什麼樣的)
  • 不正確的java版本
  • 在config.json文件中可能有錯誤的密碼

2.不正確的產品ID -確保以下值是一致的-

  • 設備型號的信息-在亞馬遜開發人員門戶信息上的設備型號ID
  • 在SSL證書產生的產品ID號(當被generate.sh觸發時)
  • 在 config.json上的產品ID
  • 在產品上的“密碼”和在config.js頁面上 “密碼”:[“值”]

3.不正確的DSN- 確保這些值是一致的

  • 在config.json頁面上的dsn
  • 在產品上的“值”和在config.js頁面上 “密碼”:[“值”]

4.配套服務沒有運行

發佈了250 篇原創文章 · 獲贊 49 · 訪問量 225萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章