Automação residencial controlada por voz usando Amazon Alexa no Raspberry Pi
Você já pensou em um alto-falante que pode ser controlado por sua voz? E se pudéssemos controlar nossos eletrodomésticos dessa forma e torná-los mais inteligentes? Assistentes de voz estão se tornando mais populares conforme caminhamos em direção a uma era de sistemas baseados em IA e IoT. Você já ouviu falar sobre o Google Assistant, Apple Siri e Amazon Alexa. Todos esses são sistemas de IA baseados em voz, o que os torna diferentes uns dos outros são seus ecossistemas, e é aqui que o Amazon Alexa mais se destaca. Google, Apple e Amazon, todas essas empresas já lançaram seus alto-falantes inteligentes, mas a Amazon foi a primeira a apresentá-los. Amazon echo, Echo Dot Spot, etc. são os alto-falantes inteligentes que estão disponíveis no mercado.
A Amazon fornece a API para usar seu serviço de voz muito popular, Alexa. É open source e está disponível no Github. Além disso, você pode instalar ou integrar o Alexa em dispositivos personalizados como o Raspberry Pi e obter a funcionalidade completa do Amazon Echo nesse dispositivo.
Usando o serviço de voz Alexa, podemos tocar música, obter informações sobre o tempo, reservar ingressos e muito mais. Tudo que você precisa fazer é pedir. No tutorial anterior, controlamos o Raspberry Pi GPIO usando o Amazon Alexa. Neste tutorial, vamos ver como construir um sistema de automação residencial controlado por voz usando Amazon Alexa e Raspberry Pi. Veremos como podemos usar o Raspberry Pi para executar o Alexa Voice Service e controlar uma lâmpada.
Material requintado:
Requisitos de hardware:
Raspberry Pi 3 [recomendado] ou Raspberry Pi 2 modelo B [compatível] e cartão SD (8 GB ou mais)
Alto-falante externo com cabo AUX de 3,5 mm
Qualquer webcam ou microfone USB 2.0
Módulo de relé
Lâmpada LED / AC
Observação: a webcam possui um microfone embutido, portanto, usaremos isso no lugar do microfone USB 2.0.
Aplicativos de software e requisitos da Web:
Registre uma conta com Alexa Voice Services
Registre uma conta no PubNub
Registre uma conta com IFTTT
Também presumimos que o seu Raspberry pi já esteja configurado com um sistema operacional Raspbian e conectado à Internet. Com eles no lugar, vamos prosseguir com o tutorial. Se você for novo no Raspberry Pi, leia Primeiros passos com o Raspberry Pi primeiro.
Todo o tutorial é dividido principalmente em 5 partes, que são as seguintes:
Se você não tem monitor, então temos que configurar o Raspberry Pi com SSH e VNC, também verifique a conectividade do microfone USB.
Configure seu desenvolvedor Amazon e instale Alexa no Raspberry Pi
Configurando PubNub e IFTTT para Alexa Home Automation
Conexão de hardware
Código Python para Alexa Pi Home Automation
Então vamos começar!!
Parte 1: Configurando o Raspberry Pi com SSH e VNC
Primeiro, conectaremos o Raspberry Pi com SSH e VNC. Para seguir os tutoriais no site oficial do Raspberry Pi, os links são fornecidos abaixo.
Para SSH: link SSh
Para VNC: link VNC
Se você tiver o Monitor, pode sair desta etapa e ir diretamente para a etapa 2, que é Configurando o Alexa Voice Service (Avs). Antes disso, temos que verificar a conectividade do microfone.
Verificando o microfone da webcam com Raspberry Pi:
1. Abra o terminal Raspberry Pi e digite o comando arecord -l. Isso exibirá os dispositivos de hardware que estão conectados ao Raspberry Pi conforme mostrado abaixo:
O cartão 1 é o microfone da sua webcam que vamos usar. Se não for exibido, sua webcam pode estar com defeito.
2. Agora, verifique se o microfone está funcionando, executando o comando de gravação de áudio como:
arecord /home/pi/Desktop/test.wav -D sysdefault:CARD=1
3. Para reproduzir o áudio gravado, digite este comando:
omxplayer -p -o local /home/pi/Desktop/test.wav
Se você conectou o Raspberry Pi ao monitor usando um cabo HDMI, a saída de áudio padrão é feita pelo alto-falante do monitor (se houver alto-falante embutido nele). Portanto, para alterá-lo para 3,5 mm você deve digitar o seguinte comando:
sudo raspi-config and go to Advance option.
Selecione Áudio da lista -> selecione Força 3,5 mm -> selecione Ok e reinicie o Raspberry Pi.
Agora, você deve ouvir o som do conector de 3,5 mm.
NOTA: Se você quiser aumentar ou diminuir o volume da voz de entrada para o microfone, use o tipo alsamixer no terminal. Selecione a placa de som do terminal pressionando F6.
Pressione F4 para alterar o ganho de dB do microfone e configurá-lo como quiser.
Se você tiver um microfone USB 2.0, as etapas seguidas são as mesmas para verificar o microfone. Aqui nós usamos a webcam para microphone USB.
Parte 2: Configure sua conta de desenvolvedor Amazon e configure Alexa Voice Services no Raspberry Pi:
Já explicamos isso em detalhes em nosso tutorial anterior, onde construímos um alto-falante inteligente Amazon Echo. Aqui, estamos nos concentrando no controle de eletrodomésticos com Alexa, portanto, não vamos explicar todo o processo novamente, então leia o artigo anterior e prepare seu alto-falante com os serviços de voz Alexa instalados em seu Raspberry pi.
Para testar Alexa, basta acordá-la dizendo o nome dela! Confira o vídeo de demonstração fornecido no final do tutorial.
Você pode perguntar a ela sobre a temperatura da sua cidade para verificar se está funcionando ou não.
Parte 3: Configurando PubNub e IFTTT para Alexa Pi Home Automation:
Para construir um sistema de automação residencial usando Alexa Pi, precisamos da ajuda de PubNub python SDK e IFTTT. Vamos dar comandos ao IFTTT por meio do Alexa, e o PubNub dá sinal ao RPi para ligar / desligar a luz. Portanto, primeiro instalaremos o PubNub no Raspberry Pi.
Parte 3-1: Instalação do PubNub Python SDK:
PubNub fornece uma API de mensagens para publicar / assinar qualquer mensagem em sua rede global. Aqui estamos usando IFTTT e Alexa para publicar a mensagem no PubNub, para ligar / desligar o Relay. Esta mensagem é recebida por Raspberry Pi e Pi irá ligar ou desligar a luz de acordo. Siga as etapas abaixo para configurar o PubNub no Raspberry Pi:
1. Abra o terminal em seu RPi e execute o seguinte comando para instalar o SDK:
sudo pip install pubnub==3.9.0
Instale apenas a versão 3.9.0, outra versão não funcionará com o script python que iremos executar na última.
2. Agora, vá para PubNub e faça login com suas credenciais.
3. Obtenha as Chaves de Publicação e Assinatura que usaremos mais tarde.
Parte 3-2: Configurando o IFTTT para o Amazon Alexa Service:
O IFTTT é um serviço gratuito baseado na web que permite aos usuários criar cadeias de declarações condicionais simples, chamadas de “receitas”, que são acionadas com base em alterações em outros serviços da web, como Gmail, Facebook, Instagram e Pinterest. IFTTT é uma abreviatura de “If This Then That”.
Para este projeto, o IFTTT é usado para acionar os comandos de ligar / desligar a luz com base no comando de voz recebido pelo serviço Alexa em execução no RPi.
Siga estas etapas para fazer um miniaplicativo:
Passo 1: - Faça login no IFTTT com suas credenciais ou cadastre-se se você não tiver uma conta nele.
Etapa 2: - Em Meus miniaplicativos, clique em Novo miniaplicativo
Etapa 3: - Clique em + this
Passo 4: - Pesquise no Amazon Alexa e clique nele, entre com os detalhes da sua conta de desenvolvedor do Amazon.
Etapa 5: - Escolha o gatilho, diga uma frase específica
Passo 6: - Forneça “acender a luz” como a frase, clique em Criar acionador.
Etapa 7: - Clique em + isso
Etapa 8: - Pesquise por Webhooks, clique nele e selecione Fazer uma Solicitação da Web
Etapa 9: - Webhooks fornece a solicitação REST WEB, use as chaves de publicação e assinatura obtidas no PubNub e modifique a seguinte URL.
http://pubsub.pubnub.com//publish/pub_key/sub_key/0/alexaTrigger/0/{"requester":"Alexa","trigger":"light","status":1}
Etapa 10: - Cole o URL modificado na caixa de texto do URL.
Passo 11: - Defina o Método como GET, Conteúdo como aplicativo / json e clique em salvar.
Etapa 12: - Siga as mesmas etapas para criar o gatilho para “desligar a luz” e modificar o URL para o seguinte.
http://pubsub.pubnub.com//publish/pub_key/sub_key/0/alexaTrigger/0/{"requester":"Alexa","trigger":"light","status":0
Etapa 13: - Agora estamos prontos com todos os componentes da web para a demonstração.
Parte 4: Conexões de hardware e diagrama de circuito:
Para este projeto, precisamos de um Módulo de Relé e uma lâmpada CA ou qualquer outro componente CA ou você pode usar um LED simples para fins de teste. Abaixo está o diagrama de circuito e as conexões de hardware para controlar o AC Appliance com Amazon Alexa.
Usaremos GPIO18 em nosso script python, portanto, conecte o relé ao GPIO 18. Você pode alterar isso no script python.
Parte 5: Código Python para controlar a luz:
Encontre o Python Script completo no final deste tutorial.
Você precisa editar a chave Pub e Sub com suas chaves pubnub no código Python.
# Initialize the Pubnub Keys
pub_key = "***************************"
sub_key = "************************"
Agora execute o Script
python alexaRpi.py
Agora que está tudo pronto para a demonstração, certifique-se de que está executando todos os três serviços da Parte 1 (os três terminais) antes de continuar.
Para dar qualquer comando, você precisa ativar o serviço Alexa chamando “Alexa” cada vez que quiser enviar um comando. Você ouvirá um sinal sonoro. Depois de ouvir o bipe, diga "Alexa Trigger, ligue a luz". Você pode ver que a luz se acende em um momento. E então, se você disser “Alexa Trigger, desligue a luz”, a luz deve desligar.
É isso…. Você pode adicionar mais aparelhos AC no script python adicionando-os com outros pinos GPIO de RPi e pode controlar muitos aparelhos com seu sistema de automação residencial inteligente.
Verifique o código completo e o vídeo de demonstração abaixo. Verifique também todos os nossos projetos de domótica aqui.
#Import all the libraries
import RPi.GPIO as GPIO
import time
from pubnub import Pubnub
# Initialize the Pubnub Keys
pub_key = "***************************"
sub_key = "************************"
LIGHT = 18 #define pin of RPi on which you want to take output
def init(): #initalize the pubnub keys and start subscribing
global pubnub #Pubnub Initialization
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(LIGHT,GPIO.OUT)
GPIO.output(LIGHT, False)
pubnub = Pubnub(publish_key=pub_key,subscribe_key=sub_key)
pubnub.subscribe(channels='alexaTrigger', callback=callback, error=callback, reconnect=reconnect, disconnect=disconnect)
def control_alexa(controlCommand): #this function control Aalexa, commands received and action performed
if(controlCommand.has_key("trigger")):
if(controlCommand["trigger"] == "light" and controlCommand["status"] == 1):
GPIO.output(LIGHT, True)
print "light is on"
else:
GPIO.output(LIGHT, False)
print "light is off"
else:
pass
def callback(message, channel): #this function waits for the message from the aleatrigger channel
if(message.has_key("requester")):
control_alexa(message)
else:
pass
def error(message): #if there is error in the channel,print the error
print("ERROR : " + str(message))
def reconnect(message): #responds if server connects with pubnub
print("RECONNECTED")
def disconnect(message): #responds if server disconnects with pubnub
print("DISCONNECTED")
if __name__ == '__main__':
init() #Initialize the Script