使用 Amazon Echo 物聯網智能音箱控制 RGB LED 燈條

本文是一篇關於如何從您的 Amazon Echo 控制 RBG LED 燈條的指南。您將能夠告訴 Echo 打開和關閉LED條,同時改變其亮度和顏色之間的漸變。 除了此,如果進一步自定義,還可以執行更多操作。

以下是這個教程的視頻 DEMO:

步驟一:材料準備

  • Amazon Echo
  • Raspberry Pi B+ 及麵包板套件
  • RGB LED燈條
  • 三個MOSFET(最大閾值電壓3.3v)
  • 電源(12V DC?2A)
  • 電源插孔
  • 麵包板
  • 跳線(公對公)和(公對母)

你可能會發現上面的內容只會使用到一些,而不是購買上面的整個套件。但無論如何,這是一個很好的方式進入電子及 Raspberry Pi 的世界。

步驟2:用Raspberry Pi 設置 RGB LED 燈條

首先,我們將從 Raspberry Pi 開始設置RGB LED 燈條——這個需要在開始搭建之前完成。所以我們可以按照Popoklopsi的這個指南:dordnung.de/raspberrypi

指南里完全解釋了每一部分! 唯一的區別是,我的紅線從 RGB 條連接到我的 Raspberry Pi 的 GPIO上 的引腳 17,藍色連接到引腳 24,綠色連接到 27。一旦可以成功地在紅色,綠色,藍色或藍色之間切換,就可以使用命令「pigs p 17 255」來混合任何其他顏色。

接下來讓我們進入下一部分。

步驟3:搭建 Nginx

所以,我們現在可以從 Raspberry Pi 的命令行來改變燈條的顏色。但是,我們想做的是從 Amazon Echo 來改變顏色。

首先讓我們設置一個Web伺服器,讓 Amazon Echo與Pi進行通信。 按照此官方指南在您的Raspberry Pi上設置nginx:raspberrypi.org/documen

確保也安裝好了PHP!

您現在應該能夠將您的 Pi 的 IP 輸入到您的 URL,並且可以從您家中的任何計算機連接到該網站 。 網站將顯示 nginx 默認屏幕或默認的 PHP 頁面。

步驟4:配置靜態IP

我們需要確保這個IP保持不變,所以我們將使您的Raspberry Pi具有靜態IP。 這是一個簡單的指南:modmypi.com/blog/tutori

如果指南已經過時,那麼你可能需要自行搜索;如果您使用的是 WiFi,可能會略有不同。

好了,現在,您的 Raspberry Pi 正在託管一個具有靜態IP的Web伺服器,因此您始終知道託管的位置。

步驟5:讓 Raspberry Pi 和 Amazon Echo 一起工作

接下來,我們將在 python 中編寫一個腳本,來檢查 Raspberry Pi 上的文本文件的內容。我們將這個腳本稱之為 controller.py,對應的文本文件將稱之為 settings.txt。 controller.py 腳本將不斷循環地檢查settings.txt 文件的內容。根據 settings.txt 文件的內容,controller.py 腳本將會通過 Raspberry Pi 上安裝的 pigpio 庫 來控制 Raspberry Pi 上的 GPIO引腳(17,24,27)。這樣一來,LED 的變化將類似於我們使用 pigs p 命令控制。

settings.txt 文件將會有 5 個數字,前 3 個用於確定燈的亮度,從 0 到 255 的任何值。第四個數字將為 0 或1,用以指示淡入淡出效果是否活動,以便於在不同顏色之間漸變(0表示關閉,1表示打開)。最後一個數字將表示顏色 0-9,同時 controller.py 腳本將根據您分配的數字,將 GPIO 引腳更改為顯示來自 LED 條的某種顏色。

controller.py腳本將不斷循環地檢查 settings.txt 文件的值。它從文件中獲取5個數字,並解析它們以正確讀取信息。然後使用pigpio庫——根據文件中的數字運行pig p命令,以修改 LED 的顏色。

最後一件事是,為了讓 controller.py 腳本獲取 settings.txt 文件的內容,它必須向 php 文件發送一個請求。我們將把這個文件稱為 getColors.php ,這個文件將簡單地為我們抓住settings.txt的內容。

github.com/adza45/echo/

您需要將這些文件,下載到 Web 伺服器上與 Nginx 相同的位置。通過會放在:

cd /var/www/htmln

步驟6:用 Pi 完成 RGB LED 條

當前的配置使淡綠色的燈變為全亮度,同時關閉淡入淡出效果。因為 settings.txt 文件中的前三個數字是255,這是最大亮度;第四個數字是淡入淡出,它為零,所以淡入淡出設置是關閉的;最後一個數字是1,在controller.py 代碼中可以看到,如果該數字為1,則將引腳27設置為高電平為綠色。

一旦文件 settings.txt 在該目錄中,我們可以測試這部分應用程序。通過鍵入以下命令運行controller.py python腳本:

python controller.pyn

如果 settings.txt 文件的當前內容是 25501,則指示燈應變為綠色。打開第二個終端並導航到settings.txt文件:

cd /var/www/htmln

打開settings.txt文件:

sudo nano settings.txtn

修改文件中的數字,並確保在修改後保存並退出,這樣 LED 燈條時相應地更改顏色。記住第一個數字是強度,第四個是你是否要漸變,最後一個是相應顏色的數字。

現在,我們可以根據 settings.txt 文件的內容改變 LED 的顏色。但是我們還沒有碰到 Amazon Echo,不過我們快接觸它了。

So,我們需要 Amazon Echo 能夠與 Pi 所在的 Web 伺服器進行通信,以便修改 settings.txt 文件的內容,可以改變 LED 條顏色。我們可以通過我們的 Web 伺服器實現這一點。

首先,我們需要在目錄 /var/www/html 中更改index.php文件的內容。我們需要這個文件,能允許來自外部來源的獲取請求,以修改 settings.txt 的內容。index.php 文件位於與之前相同的代碼庫中,因此請確保您下載該文件,並使用該文件覆蓋您的index.php。

步驟7:設置您的 Amazon Echo

在我們的Web伺服器上,託管的 Index.php 可以讓某人寫入內容到 settings.txt 文件。你可以看到這個文件有變色、強度和淡入淡出, 這些值寫入 settings.txt 文件。但是我們如何將變數設置為相等的東西?由於我們在Web伺服器上託管此代碼,因此我們可以通過查詢字元串設置值。然後,代碼從我們編寫的查詢字元串中獲取值。例如,我們可以鍵入:

http://192.168.1.43/index.php?intensity=255&fade="0"&color="0"&get=1n

在我們的瀏覽器中,伺服器將根據上面輸入的內容設置亮度、淡入淡出和顏色變數。這時需要確保 Raspberry Pi 上仍運行controller.py腳本,然後在您家中的任何計算機上,鍵入上面的行到任何瀏覽器。需要確保您為 Raspberry Pi 設置的靜態IP,替換到上述 URL 中的 IP。這時燈應該發生變化!然而實際上他們可能不會,因為沒有足夠的許可權寫入 settings.txt 文件。為了允許我們這樣做,需要到 Pi上的 /var/www/html 目錄,然後鍵入以下命令:

sudo chmod 757 settings.txtn

而這是超級不安全的,因為任何人都可以編輯文件。不過,由於我們只是測試一個燈開關,他們不能做太多危險的操作。只是不要用它(Raspberry Pi)來存儲非常重要的東西。你可以研究其他方式來保證它的安全。但現在的方式是最快的,可以讓初學者輕鬆上手。

好的,現在返回並重新運行你的controller.py腳本。現在輸入您的瀏覽器的請求,你的燈應該相應改變。如果不能確保 settings.txt 文件,能從請求中更改文本內容。請檢查並查看您的controller.py是否停止運行,以及是否顯示錯誤。

對於上一部分,可以看相應的 Youtube 的內容 youtube.com/watch?

雖然與我的代碼不同,但是他提供了將文本文件、循環 python腳本、Web伺服器相結合的知識,以用於修改文本文件的內容,並最終改變顏色。

好的,現在是使用 Amazon Echo的時候了。Amazon Echo 允許您創建 skills,如您可以購買比薩餅或二十個問題遊戲的 skill。我們將創造自己的 skill,來改變燈光的顏色。如果你從來沒有創造過 Amazon Echo 的 skill,你可以閱讀如下的資料:

developer.amazon.com/pu

我們為Echo編寫的代碼,需要向我們的Web伺服器發送一個獲取請求,以修改指示燈。這是我過去使用的代碼:

github.com/adza45/echo/

步驟8:Amazon Echo Code 如何工作

基本上,這段代碼與您的網路瀏覽器一樣,也可以開/關開燈,其顏色和淡入淡出效果。在exports.js中,我有不同的功能,用於根據你所說作出響應。 所以,如果你說「Alexam, turn on the light」,它會運行點亮燈的指令,即在 exports.js 文件中運行 LightsOn。代碼如下:

function LightsOn(intent, session, callback) {nvar cardTitle = intent.name;nvar repromptText = "";nvar sessionAttributes = {};nvar shouldEndSession = true;nvar speechOutput = "";nvar tools = require(./tools);nn tools.ChangeColorRequest("255", "pass", "pass", function(result) {n speechOutput = "The lights are now on.";n repromptText = "The lights are now on.";n callback(sessionAttributes,n buildSpeechletResponse(cardTitle, speechOutput, repromptText, shouldEndSession));n });n}n

點亮燈的過程中,將使用 tools.js 文件來向 Raspberry Pi 上託管的 index.php Web 伺服器發送請求。 我傳遞值為 255 的燈光強度,並為顏色和漸變賦值為「pass」,以便只引起 settings.txt 文件中的亮度變化。 所以,當你在下次打開燈時關掉它,就和之前的一樣。 其他功能的工作方式也是相似的,當更改顏色時,我鍵入pass的強度和漸變,然後傳遞一個數字為最後一個選項,將 settings.txt 文件中的最後一個數字更改為正確的顏色。

在tools.js中,需要確保將主機名更改為您的 ISP 給您的IP。 只需輸入谷歌「我的IP是什麼」,這個結果就是你想要的內容。

我使用 test.js 文件來測試:能從我的電腦更改 settings.txt 文件的值。 我在 notepad ++ 中輸入了這個代碼,並添加了一個插件,以讓我能運行 node.js 代碼。以下是允許 notepad++ 運行 node.js 代碼的方法:

blog.aguskurniawan.net/

要使此代碼與 Amazon Echo 一起工作,您需要從此站點(Amazon Management Console)創建一個lambda函數:

us-west-2.console.aws.amazon.com

保在 amazon 管理控制台中,在設置中將「handler」更改為「exports.js」,因為我們調用主文件 exports。

當您將此代碼上傳到亞馬遜管理控制台時,您必須製作一個 zip 文件,因為我們正在上傳多個文件。 所以將exports.js 和 tools.js 文件壓縮在一起,並將其壓縮文件夾導出。 然後將該壓縮文件,上傳到amazon管理控制台中的 lambda 函數。

步驟9:在 Amazon Developer Service 配置 Amazon Echo

為了使用 Amazon Echo 中的 Skill, 我們需要訪問:

developer.amazon.com/

點擊 Alexa 標籤 -> 點擊Alexa Skills Kit。 在這裡,您將設置您的 Alexa Skill 如何更改燈條。您也將鏈接到剛才做的Lambda函數,以便讓程序知道要運行哪一個代碼:

在交互模式下,當您創建 skill 時,您將需要一個 intent schema。如下:

{n "intents": [n {n "intent": "ChangeColor",n "slots": [n {n "name": "Color",n "type": "COLOR"n }n ]n },n {n "intent": "ChangeIntensity",n "slots": [n {n "name": "Intensity",n "type": "AMAZON.NUMBER"n }n ]n },n {n "intent": "LightsOn"n },n {n "intent": "LightsOff"n },n {n "intent": "DimLights"n },n {n "intent": "BrightenLights"n },n {n "intent": "MaxIntensity"n },n {n "intent": "MinIntensity"n },n {n "intent": "FadeOn"n },n {n "intent": "FadeOff"n },n {n "intent": "Exit"n }n ]n}n

以下是我的說話樣本:

ChangeColor change color to {Color}nChangeColor change to {Color}nChangeColor turn lights to {Color}nLightsOn turn lights onnLightsOff turn lights offnLightsOn lights onnLightsOff lights offnExit exitnExit quitnExit quit godnExit goodbye godnExit goodbyenChangeIntensity change intensity to {Intensity}nChangeIntensity change brightness to {Intensity}nChangeIntensity change intensity {Intensity}nChangeIntensity change brightness {Intensity}nDimLights dim the lightsnBrightenLights brighten the lightsnDimLights intensity downnBrightenLights intensity upnDimLights brightness downnBrightenLights brightness upnMaxIntensity turn to maximum intensitynMaxIntensity turn to maximum brightnessnMaxIntensity maximum intensitynMaxIntensity maximum brightnessnMinIntensity turn to minimum intensitynMinIntensity turn to minimum brightnessnMinIntensity minimum intensitynMinIntensity minimum brightnessnFadeOn turn fade onnFadeOn fade onnFadeOff turn fade offnFadeOff fade offn

另外對於交互模式(interaction modal)中的自定義插槽類型(custom slot types),我創建了我自己的「COLOR」,其中的值如下所示:

REDnBLUEnPURPLEnGREENnYELLOWnAQUAnWHITEnBLACKnORANGEnCYANn

步驟 10:連接你的 Raspberry Pi 與 Amazon Echo

好的,所有的一切似乎都很好,但我們需要做最後一件事。

由於您的 Amazon Echo 代碼託管在雲端,如果您尚未設置埠轉發,則無法在您的Web伺服器上訪問index.php。因此,我們在您的路由器中執行此操作,但是對於每個路由器都是不同的,希望您不必通過多個路由器,因為這可能會使事情變得複雜。無論如何,從瀏覽器到主路由器主頁,最有可能是192.168.1.1或192.168.200。並在搜索埠轉發選項卡並配置它。

並確保將 IP 地址,修改為 Raspberry Pi 配置的靜態IP。還要祈禱 ISP 不阻止訪問埠 80,這就並不是什麼大問題。只需要更改正在託管的 nginx 埠,並更改上面對應的埠。可以輕鬆地通過 Google 來解決這個問題。

好的,所以現在你可以,從 Amazon Developer Service 在 test 標籤下測試你的skill。如果一切都奏效,你應該可以通過調用 skill,來運行我上面提供的任何一個示例語句!在amazon開發者服務的技能信息選項卡中,我命名了調用名稱「lights」。所以我必須說的是「Alexa,ask lights to turn on.」或者「Alexa,ask lights to change to cyan」。很酷吧!

祝你好運!

原文鏈接:wandianshenme.com/play/


推薦閱讀:

【珍藏】一網打盡!機器人、人工智慧、物聯網產業全景圖
安全已經卧軌 誰來為物聯網設備保駕護航?
使用 Ardunio 玩轉 ESP8266
Blackhat兵器譜新添IOT安全武器
開欄來一發---智能家居(1)

TAG:物联网 | 智能音箱 | 树莓派RaspberryPi |