資料介紹
描述
當向 Alexa 發(fā)出語音命令時,在 Raspberry Pi 上運行命令/腳本。
我希望能夠通過向我家里的 Alexa Dots 發(fā)出語音命令來在我的 Raspberry Pi 上運行命令。此外,我想通過 Alexa 安排任務,而不是必須將計劃任務單獨添加到我家里的幾個 Pis。
為此,我們需要設置:
- 同時登錄 AWS 和 Amazon 開發(fā)者站點以確認您可以訪問 AWS 和 Amazon 開發(fā)者站點
- AWS IAM:創(chuàng)建 RPi 腳本將用于登錄 AWS 的用戶和組
- AWS SQS(消息隊列)。
- AWS LAMBDA 函數(shù)
- 亞馬遜 Alexa 技能
Alexa 技能指向 Lambda 函數(shù),根據(jù)發(fā)出的語音命令取決于將什么消息添加到 SQS 隊列,在 Rapsberry Pi 上運行腳本來檢查 SQS 隊列并根據(jù)消息啟動作業(yè)或腳本樹莓派。
AWS 和亞馬遜開發(fā)賬戶
如果您還沒有 AWS 帳戶,則需要設置一個,沒有理由認為該項目不屬于 AWS“免費套餐”,該套餐允許每月向 Lambda 發(fā)出 100 萬次免費請求,向 Lambda 發(fā)出 100 萬次免費請求。 SQS 服務。為了超越免費套餐,您需要每 3 秒發(fā)出超過 1 個請求(基于每月 30 天),設置后我將腳本設置為每 15 秒運行一次,但當然如果我有 10 個 RPi 在做那么需要考慮的一個請求。
AWS - 創(chuàng)建用戶和組
登錄 AWS 并轉到 IAM 管理控制臺并添加用戶:
https://console.aws.amazon.com/iam/home?#/users
![pYYBAGOSnc-AHZytAABIfL9Xris835.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSnc-AHZytAABIfL9Xris835.png)
![pYYBAGOSndSAX_ogAADCI_SN6aQ828.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSndSAX_ogAADCI_SN6aQ828.png)
由于權限是在組級別設置的,因此我們需要為該用戶創(chuàng)建一個新組,如果我們將來創(chuàng)建更多用戶,他們也可以使用同一組。該用戶將從 Raspberry Pi 登錄,因此需要能夠查看和更新?? AWS SQS 中的隊列。
![poYBAGOSndeAL8f9AABqSi_2a1Y700.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSndeAL8f9AABqSi_2a1Y700.png)
為此,我們可以使用亞馬遜預定義策略(預設權限),搜索“sqs”并選擇策略“AWSLambdaSQSQueueExecutionRole”,然后單擊“創(chuàng)建組”(這將允許用戶讀取和寫入 SQS 隊列) .
![pYYBAGOSnduAfHtlAAE8V3xliMs913.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSnduAfHtlAAE8V3xliMs913.png)
這會將您帶回“將用戶添加到組”屏幕,并且將選擇新組以將新用戶添加到其中,單擊“下一步:標簽”按鈕繼續(xù)。
![pYYBAGOSnd6ASMs4AAEFHCbYF7k662.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSnd6ASMs4AAEFHCbYF7k662.png)
在“添加標簽”屏幕上,只需單擊“下一步:審閱”按鈕繼續(xù)。
在下一個屏幕上,查看新用戶的詳細信息并單擊“創(chuàng)建用戶”
在接下來的屏幕上,確保您“下載.csv”,因為這將是您獲取此用戶憑據(jù)的唯一機會。
![pYYBAGOSneSAWSlWAACqlpCa3XI156.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSneSAWSlWAACqlpCa3XI156.png)
CSV 中的憑據(jù)將添加到 RPi 上的腳本中,以便它可以登錄以訪問 SQS 隊列。
注意:自 2019 年 6 月起,為了讓 Alexa 技能運行 Lambda 函數(shù),Lamda 代碼必須托管在以下區(qū)域之一:
- 亞太地區(qū)(東京)
- 歐盟(愛爾蘭)
- 美國東部(弗吉尼亞北部)
- 美國西部(俄勒岡)
https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html
由于我住在英格蘭 (UK),我將在愛爾蘭地區(qū)通過 SQS 隊列和 Lambda 函數(shù)托管。
![poYBAGOSneiALwaMAAAJ8oP6dw0845.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSneiALwaMAAAJ8oP6dw0845.png)
創(chuàng)建 AWS SQS 隊列
找到 SQS 頁面并創(chuàng)建一個新的簡單隊列服務:
![poYBAGOSneuAA5_GAAAuTTjRR0c152.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSneuAA5_GAAAuTTjRR0c152.png)
輸入新名稱并使用“快速創(chuàng)建隊列”選項創(chuàng)建“標準隊列”:
![pYYBAGOSne2AW-hiAABnk6S4tBY813.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSne2AW-hiAABnk6S4tBY813.png)
單擊新隊列并記下我們稍后需要的 ARN 和 URL:
![poYBAGOSne-ANc30AACCMWrs2lE136.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSne-ANc30AACCMWrs2lE136.png)
創(chuàng)建 Lambda 函數(shù)
在 AWS 中,在“服務”中搜索“Lambda”并創(chuàng)建一個新函數(shù):
![pYYBAGOSnfSAZibLAAHt6ibgZbU545.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSnfSAZibLAAHt6ibgZbU545.png)
選擇“從頭開始創(chuàng)作”,添加名稱并將“運行時”更改為“Python 2.7”。對于執(zhí)行角色,選擇“從 AWS 策略模板創(chuàng)建新角色”,選擇“Amazon SQS 輪詢器權限”策略,為角色命名并創(chuàng)建函數(shù)。
對于功能的配置,當您在“設計器”面板中單擊某些內(nèi)容時,配置設置將顯示在屏幕的下半部分。
從左側添加“Alexa Skills Kit”觸發(fā)器,需要配置才能保存此功能。滾動到底部,因為我們還沒有 Alexa 技能 ID(我們還沒有創(chuàng)建技能)我們暫時“禁用”它,稍后再回來。
![poYBAGOSnfmAT-hjAAEdM_qoBq8449.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSnfmAT-hjAAEdM_qoBq8449.png)
選擇 Lambda 函數(shù)圖標(對我來說是“RPi-LED-Function”),在底部我們需要提供自定義 Python 代碼,此代碼將向 Alexa 技能提供反饋并更新 SQS 隊列。
我在下面的代碼中添加了一些關于需要更改的注釋。
import boto3
# Below you need to add in your access key, access secret, rgion and sqs queue url
access_key = "This can be found in the downloaded .csv file"
access_secret = "This can be found in the downloaded .csv file"
region ="eu-west-1"
queue_url = "This can be found when looking at the SQS queue, https://..."
# you should not need to change the following unless you know what your doing.
def build_speechlet_response(title, output, reprompt_text, should_end_session):
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'Simple',
'title': "SessionSpeechlet - " + title,
'content': "SessionSpeechlet - " + output
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': reprompt_text
}
},
'shouldEndSession': should_end_session
}
def build_response(session_attributes, speechlet_response):
return {
'version': '1.0',
'sessionAttributes': session_attributes,
'response': speechlet_response
}
def post_message(client, message_body, url):
response = client.send_message(QueueUrl = url, MessageBody= message_body)
def lambda_handler(event, context):
client = boto3.client('sqs', aws_access_key_id = access_key, aws_secret_access_key = access_secret, region_name = region)
intent_name = event['request']['intent']['name']
# The following needs to be customised
# The intent names shown below are linked with intents created in the custom Alexa Skill.
# The 'post_message' relates to the SQS queue
# The 'message' line is the message/response that Alexa will speak back to you
if intent_name == "LightsOn":
post_message(client, 'on', queue_url)
message = "Lounge Lights will now turn on"
elif intent_name == "LightsOff":
post_message(client, 'off', queue_url)
message = "Lounge Lights will now turn off"
elif intent_name == "LightsRed":
post_message(client, 'red', queue_url)
message = "Lounge Lights will change to red"
elif intent_name == "LightsGreen":
post_message(client, 'green', queue_url)
message = "Lounge Lights will now change to green"
elif intent_name == "LightsBlue":
post_message(client, 'blue', queue_url)
message = "Lounge Lights will now change to blue"
elif intent_name == "LightsTest":
post_message(client, 'test', queue_url)
message = "Lounge Lights will now run a test sequence"
else:
message = "Sorry but I do not understand that request"
speechlet = build_speechlet_response("Mirror Status", message, "", "true")
return build_response({}, speechlet)
0
創(chuàng)建自定義 Alexa 技能
在這里登錄并創(chuàng)建一項新技能,選擇“自定義”技能和“從頭開始:”
https://developer.amazon.com/en-US/alexa/alexa-skills-kit
這里需要配置如下:
![pYYBAGOSnfyAMP2EAAEhtNAyTP8863.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSnfyAMP2EAAEhtNAyTP8863.png)
Invocation Name - 這是將用于觸發(fā)技能的名稱,我稱我的為“l(fā)ounge lights”。
意圖、示例和槽- 對于這個示例,我保持簡單并為每個操作創(chuàng)建了一個“意圖”,如下所示,您還應該注意到這些意圖反映了我在 Lambda 中添加的代碼。
![poYBAGOSngCAIjNxAABH2BgFIJA975.png](https://file.elecfans.com/web2/M00/81/9D/poYBAGOSngCAIjNxAABH2BgFIJA975.png)
這是我的一個意圖的例子,你當然可以根據(jù)你的要求添加任何你想要的:
![pYYBAGOSngKAeioOAABTpt5PL-I065.png](https://file.elecfans.com/web2/M00/82/26/pYYBAGOSngKAeioOAABTpt5PL-I065.png)
所以,為了讓這句話起作用,我會說“Alexa,讓 Lounge Lights 關掉。”
構建模型- 完成上述操作后,保存并構建模型。
端點- 添加一個端點,這是我們已經(jīng)創(chuàng)建的 Lambda 函數(shù)的 ARN。如果您在保存此端點時遇到任何錯誤,請確保已檢查以下內(nèi)容:
- Lambda 代碼位于:亞太地區(qū)(東京)、歐洲(愛爾蘭)、美國東部(弗吉尼亞北部)或美國西部(俄勒岡)
- “Alexa Skills Kit”觸發(fā)器已添加到 Lamdba 函數(shù)中
測試 Alexa 技能
在 Alexa 技能界面中,單擊“測試”選項卡,您可以在此處進行測試以確認 1) 您的意圖是正確的,以及 2) lambda 函數(shù)已正確配置。測試完成后,您可以繼續(xù)配置 Raspberry Pi 以從 SQS 隊列中讀取數(shù)據(jù)。
配置樹莓派(linux設備)
根據(jù)您的最終目標取決于您需要在 RPi 上做什么,我的第一個測試是打開/關閉我的 Magic Mirror 顯示器,并且能夠重新啟動 RPi。
第二個是與這個項目 writeup 內(nèi)聯(lián)的,是能夠打開 ws2811/ws2812 LED 燈帶連接到我的 RPi。
需要運行以下代碼,這將登錄到 AWS 并查看 SQS 隊列中的條目,并根據(jù)存儲的消息取決于運行的本地 Python 腳本。要運行 LED,您需要將腳本作為“sudo”運行。
import boto3
import os
import time
access_key = "Access key from the csv file"
access_secret = "Access seret from the csv file"
region = "the region where the SQS queue is - found in the queue url"
queue_url = "SQS Queue URL, https://sqs....."
def pop_message(client, url):
response = client.receive_message(QueueUrl = url, MaxNumberOfMessages = 10)
#last message posted becomes messages
message = response['Messages'][0]['Body']
receipt = response['Messages'][0]['ReceiptHandle']
client.delete_message(QueueUrl = url, ReceiptHandle = receipt)
return message
client = boto3.client('sqs', aws_access_key_id = access_key, aws_secret_access_key = access_secret, region_name = nameOfTheRegion
waittime = 20
client.set_queue_attributes(QueueUrl = queue_url, Attributes = {'ReceiveMessageWaitTimeSeconds': str(waittime)})
time_start = time.time()
while (time.time() - time_start < 30):
print("Checking...")
try:
message = pop_message(client, queue_url)
print(message)
if message == "on":
os.system("python /home/pi/LEDScripts/LED_on.py")
elif message == "off":
os.system("python /home/pi/LEDScripts/LED_off.py")
elif message == "blue":
os.system("python /home/pi/LEDScripts/LED_blue.py")
elif message == "red":
os.system("python /home/pi/LEDScripts/LED_red.py")
elif message == "green":
os.system("python /home/pi/LEDScripts/LED_green.py")
elif message == "test":
os.system("python /home/pi/LEDScripts/LED_test.py")
except:
pass
您會在上面看到使用了包“boto3”(AWS SDK),您可以通過運行以下命令來安裝它:
python -m pip install boto3
這是運行的 Python 腳本之一的示例:
from neopixel import *
# LED strip configuration:
LED_COUNT = 12 # Number of LED pixels.
LED_PIN = 19 # GPIO pin connected to the pixels (18 uses PWM!).
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 30 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal
LED_CHANNEL = 1 # set to '1' for GPIOs 13, 19, 41, 45 or 53
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL)
strip.begin()
for i in range(strip.numPixels()):
strip.setPixelColor(i, Color(0, 255, 0))
strip.show()
為 LED 燈條設置 Pi
如果在可以運行不同的庫之前你還沒有運行它們,但是我選擇使用這個:https ://github.com/jgarff/rpi_ws281x.git
您需要運行以下命令:
sudo apt-get install build-essential python-dev git scons swig
git clone https://github.com/jgarff/rpi_ws281x.git
然后從 GitHub 下載包中的“python”目錄:
sudo python setup.py build
sudo python setup.py install
- 使用Raspberry Pi和Arduino實現(xiàn)Web控制的LED動畫
- 將Arduino和Raspberry Pi硬件設備與Minecraft游戲連接
- 可確定大氣顆粒物的Raspberry Pi設備
- 基于諾基亞5110的Raspberry Pi帽子 0次下載
- 在Raspberry Pi上通過網(wǎng)絡控制LED
- 在您的Raspberry Pi設備上使用BOLT云服務
- 使用您的Raspberry Pi控制多達65280個繼電器
- 使用Discord Bot和Raspberry Pi進行照明控制
- 可視頻直播的Raspberry Pi網(wǎng)絡控制機器人 14次下載
- 《愛上Raspberry Pi》中譯版-電子書籍.pdf 0次下載
- Instant Raspberry Pi Gaming 6次下載
- 如何配置 Raspberry Pi 3 和 BeagleBoards 的無線連接 5次下載
- Raspberry_Pi詳解 16次下載
- raspberry_pi各版本差別 0次下載
- Getting Started with Raspberry Pi 0次下載
- 基于Raspberry Pi 5的蜂窩物聯(lián)網(wǎng)項目 1312次閱讀
- 使用Raspberry Pi Pico W和MicroPython開發(fā)物聯(lián)網(wǎng)應用 2180次閱讀
- 用于測試項目的4個最佳樹莓派Raspberry Pi模擬器 6823次閱讀
- 樹莓派之路:Arduino和Raspberry-Pi 1992次閱讀
- 基于樹莓派產(chǎn)品 Raspberry Pi微控制器板的優(yōu)缺點 2984次閱讀
- 如何從Raspberry Pi Pico的模數(shù)轉換器捕獲數(shù)據(jù)計算? 2772次閱讀
- 基于Raspberry Pi Pico開發(fā)先進的家庭自動化系統(tǒng) 3003次閱讀
- 基于FONA通過UART與Raspberry Pi進行通訊的方案介紹 2257次閱讀
- 基于在Raspberry Pi Zero W的基礎上實現(xiàn)設計微型機器人 2250次閱讀
- 微雪電子ZeroW| Raspberry Pi ZeroW主板簡介 2618次閱讀
- 微雪電子Raspberry Pi 3 Model主板簡介 3141次閱讀
- digilentchipKIT Pi主板介紹 1348次閱讀
- 利用Raspberry Pi構建存儲和虛擬化時間序列數(shù)據(jù) 952次閱讀
- 一文了解Raspberry Pi 4各項性能跑分 3w次閱讀
- 視覺享受!用Raspberry Pi實現(xiàn)圣誕樹燈光秀 8344次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論