資料介紹
描述
當(dāng)向 Alexa 發(fā)出語音命令時(shí),在 Raspberry Pi 上運(yùn)行命令/腳本。
我希望能夠通過向我家里的 Alexa Dots 發(fā)出語音命令來在我的 Raspberry Pi 上運(yùn)行命令。此外,我想通過 Alexa 安排任務(wù),而不是必須將計(jì)劃任務(wù)單獨(dú)添加到我家里的幾個(gè) Pis。
為此,我們需要設(shè)置:
- 同時(shí)登錄 AWS 和 Amazon 開發(fā)者站點(diǎn)以確認(rèn)您可以訪問 AWS 和 Amazon 開發(fā)者站點(diǎn)
- AWS IAM:創(chuàng)建 RPi 腳本將用于登錄 AWS 的用戶和組
- AWS SQS(消息隊(duì)列)。
- AWS LAMBDA 函數(shù)
- 亞馬遜 Alexa 技能
Alexa 技能指向 Lambda 函數(shù),根據(jù)發(fā)出的語音命令取決于將什么消息添加到 SQS 隊(duì)列,在 Rapsberry Pi 上運(yùn)行腳本來檢查 SQS 隊(duì)列并根據(jù)消息啟動(dòng)作業(yè)或腳本樹莓派。
AWS 和亞馬遜開發(fā)賬戶
如果您還沒有 AWS 帳戶,則需要設(shè)置一個(gè),沒有理由認(rèn)為該項(xiàng)目不屬于 AWS“免費(fèi)套餐”,該套餐允許每月向 Lambda 發(fā)出 100 萬次免費(fèi)請(qǐng)求,向 Lambda 發(fā)出 100 萬次免費(fèi)請(qǐng)求。 SQS 服務(wù)。為了超越免費(fèi)套餐,您需要每 3 秒發(fā)出超過 1 個(gè)請(qǐng)求(基于每月 30 天),設(shè)置后我將腳本設(shè)置為每 15 秒運(yùn)行一次,但當(dāng)然如果我有 10 個(gè) RPi 在做那么需要考慮的一個(gè)請(qǐng)求。
AWS - 創(chuàng)建用戶和組
登錄 AWS 并轉(zhuǎn)到 IAM 管理控制臺(tái)并添加用戶:
https://console.aws.amazon.com/iam/home?#/users


由于權(quán)限是在組級(jí)別設(shè)置的,因此我們需要為該用戶創(chuàng)建一個(gè)新組,如果我們將來創(chuàng)建更多用戶,他們也可以使用同一組。該用戶將從 Raspberry Pi 登錄,因此需要能夠查看和更新?? AWS SQS 中的隊(duì)列。

為此,我們可以使用亞馬遜預(yù)定義策略(預(yù)設(shè)權(quán)限),搜索“sqs”并選擇策略“AWSLambdaSQSQueueExecutionRole”,然后單擊“創(chuàng)建組”(這將允許用戶讀取和寫入 SQS 隊(duì)列) .

這會(huì)將您帶回“將用戶添加到組”屏幕,并且將選擇新組以將新用戶添加到其中,單擊“下一步:標(biāo)簽”按鈕繼續(xù)。

在“添加標(biāo)簽”屏幕上,只需單擊“下一步:審閱”按鈕繼續(xù)。
在下一個(gè)屏幕上,查看新用戶的詳細(xì)信息并單擊“創(chuàng)建用戶”
在接下來的屏幕上,確保您“下載.csv”,因?yàn)檫@將是您獲取此用戶憑據(jù)的唯一機(jī)會(huì)。

CSV 中的憑據(jù)將添加到 RPi 上的腳本中,以便它可以登錄以訪問 SQS 隊(duì)列。
注意:自 2019 年 6 月起,為了讓 Alexa 技能運(yùn)行 Lambda 函數(shù),Lamda 代碼必須托管在以下區(qū)域之一:
- 亞太地區(qū)(東京)
- 歐盟(愛爾蘭)
- 美國(guó)東部(弗吉尼亞北部)
- 美國(guó)西部(俄勒岡)
https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html
由于我住在英格蘭 (UK),我將在愛爾蘭地區(qū)通過 SQS 隊(duì)列和 Lambda 函數(shù)托管。

創(chuàng)建 AWS SQS 隊(duì)列
找到 SQS 頁面并創(chuàng)建一個(gè)新的簡(jiǎn)單隊(duì)列服務(wù):

輸入新名稱并使用“快速創(chuàng)建隊(duì)列”選項(xiàng)創(chuàng)建“標(biāo)準(zhǔn)隊(duì)列”:

單擊新隊(duì)列并記下我們稍后需要的 ARN 和 URL:

創(chuàng)建 Lambda 函數(shù)
在 AWS 中,在“服務(wù)”中搜索“Lambda”并創(chuàng)建一個(gè)新函數(shù):

選擇“從頭開始創(chuàng)作”,添加名稱并將“運(yùn)行時(shí)”更改為“Python 2.7”。對(duì)于執(zhí)行角色,選擇“從 AWS 策略模板創(chuàng)建新角色”,選擇“Amazon SQS 輪詢器權(quán)限”策略,為角色命名并創(chuàng)建函數(shù)。
對(duì)于功能的配置,當(dāng)您在“設(shè)計(jì)器”面板中單擊某些內(nèi)容時(shí),配置設(shè)置將顯示在屏幕的下半部分。
從左側(cè)添加“Alexa Skills Kit”觸發(fā)器,需要配置才能保存此功能。滾動(dòng)到底部,因?yàn)槲覀冞€沒有 Alexa 技能 ID(我們還沒有創(chuàng)建技能)我們暫時(shí)“禁用”它,稍后再回來。

選擇 Lambda 函數(shù)圖標(biāo)(對(duì)我來說是“RPi-LED-Function”),在底部我們需要提供自定義 Python 代碼,此代碼將向 Alexa 技能提供反饋并更新 SQS 隊(duì)列。
我在下面的代碼中添加了一些關(guān)于需要更改的注釋。
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)建一項(xiàng)新技能,選擇“自定義”技能和“從頭開始:”
https://developer.amazon.com/en-US/alexa/alexa-skills-kit
這里需要配置如下:

Invocation Name - 這是將用于觸發(fā)技能的名稱,我稱我的為“l(fā)ounge lights”。
意圖、示例和槽- 對(duì)于這個(gè)示例,我保持簡(jiǎn)單并為每個(gè)操作創(chuàng)建了一個(gè)“意圖”,如下所示,您還應(yīng)該注意到這些意圖反映了我在 Lambda 中添加的代碼。

這是我的一個(gè)意圖的例子,你當(dāng)然可以根據(jù)你的要求添加任何你想要的:

所以,為了讓這句話起作用,我會(huì)說“Alexa,讓 Lounge Lights 關(guān)掉。”
構(gòu)建模型- 完成上述操作后,保存并構(gòu)建模型。
端點(diǎn)- 添加一個(gè)端點(diǎn),這是我們已經(jīng)創(chuàng)建的 Lambda 函數(shù)的 ARN。如果您在保存此端點(diǎn)時(shí)遇到任何錯(cuò)誤,請(qǐng)確保已檢查以下內(nèi)容:
- Lambda 代碼位于:亞太地區(qū)(東京)、歐洲(愛爾蘭)、美國(guó)東部(弗吉尼亞北部)或美國(guó)西部(俄勒岡)
- “Alexa Skills Kit”觸發(fā)器已添加到 Lamdba 函數(shù)中
測(cè)試 Alexa 技能
在 Alexa 技能界面中,單擊“測(cè)試”選項(xiàng)卡,您可以在此處進(jìn)行測(cè)試以確認(rèn) 1) 您的意圖是正確的,以及 2) lambda 函數(shù)已正確配置。測(cè)試完成后,您可以繼續(xù)配置 Raspberry Pi 以從 SQS 隊(duì)列中讀取數(shù)據(jù)。
配置樹莓派(linux設(shè)備)
根據(jù)您的最終目標(biāo)取決于您需要在 RPi 上做什么,我的第一個(gè)測(cè)試是打開/關(guān)閉我的 Magic Mirror 顯示器,并且能夠重新啟動(dòng) RPi。
第二個(gè)是與這個(gè)項(xiàng)目 writeup 內(nèi)聯(lián)的,是能夠打開 ws2811/ws2812 LED 燈帶連接到我的 RPi。
需要運(yùn)行以下代碼,這將登錄到 AWS 并查看 SQS 隊(duì)列中的條目,并根據(jù)存儲(chǔ)的消息取決于運(yùn)行的本地 Python 腳本。要運(yùn)行 LED,您需要將腳本作為“sudo”運(yùn)行。
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
您會(huì)在上面看到使用了包“boto3”(AWS SDK),您可以通過運(yùn)行以下命令來安裝它:
python -m pip install boto3
這是運(yùn)行的 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 燈條設(shè)置 Pi
如果在可以運(yùn)行不同的庫(kù)之前你還沒有運(yùn)行它們,但是我選擇使用這個(gè):https ://github.com/jgarff/rpi_ws281x.git
您需要運(yùn)行以下命令:
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實(shí)現(xiàn)Web控制的LED動(dòng)畫
- 將Arduino和Raspberry Pi硬件設(shè)備與Minecraft游戲連接
- 可確定大氣顆粒物的Raspberry Pi設(shè)備
- 基于諾基亞5110的Raspberry Pi帽子 0次下載
- 在Raspberry Pi上通過網(wǎng)絡(luò)控制LED
- 在您的Raspberry Pi設(shè)備上使用BOLT云服務(wù)
- 使用您的Raspberry Pi控制多達(dá)65280個(gè)繼電器
- 使用Discord Bot和Raspberry Pi進(jìn)行照明控制
- 可視頻直播的Raspberry Pi網(wǎng)絡(luò)控制機(jī)器人 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)項(xiàng)目 1312次閱讀
- 使用Raspberry Pi Pico W和MicroPython開發(fā)物聯(lián)網(wǎng)應(yīng)用 2180次閱讀
- 用于測(cè)試項(xiàng)目的4個(gè)最佳樹莓派Raspberry Pi模擬器 6823次閱讀
- 樹莓派之路:Arduino和Raspberry-Pi 1992次閱讀
- 基于樹莓派產(chǎn)品 Raspberry Pi微控制器板的優(yōu)缺點(diǎn) 2984次閱讀
- 如何從Raspberry Pi Pico的模數(shù)轉(zhuǎn)換器捕獲數(shù)據(jù)計(jì)算? 2772次閱讀
- 基于Raspberry Pi Pico開發(fā)先進(jìn)的家庭自動(dòng)化系統(tǒng) 3003次閱讀
- 基于FONA通過UART與Raspberry Pi進(jìn)行通訊的方案介紹 2257次閱讀
- 基于在Raspberry Pi Zero W的基礎(chǔ)上實(shí)現(xiàn)設(shè)計(jì)微型機(jī)器人 2250次閱讀
- 微雪電子ZeroW| Raspberry Pi ZeroW主板簡(jiǎn)介 2618次閱讀
- 微雪電子Raspberry Pi 3 Model主板簡(jiǎn)介 3141次閱讀
- digilentchipKIT Pi主板介紹 1348次閱讀
- 利用Raspberry Pi構(gòu)建存儲(chǔ)和虛擬化時(shí)間序列數(shù)據(jù) 952次閱讀
- 一文了解Raspberry Pi 4各項(xiàng)性能跑分 3w次閱讀
- 視覺享受!用Raspberry Pi實(shí)現(xiàn)圣誕樹燈光秀 8344次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論