Índice:

Controle a sala de estar com Alexa e Raspberry Pi: 12 etapas
Controle a sala de estar com Alexa e Raspberry Pi: 12 etapas

Vídeo: Controle a sala de estar com Alexa e Raspberry Pi: 12 etapas

Vídeo: Controle a sala de estar com Alexa e Raspberry Pi: 12 etapas
Vídeo: TUTORIAL: Fita de LED AMBILIGHT DIY barata para sua TV 4K! (Raspberry Pi + Hyperion) 2024, Setembro
Anonim
Controle a sala de estar com Alexa e Raspberry Pi
Controle a sala de estar com Alexa e Raspberry Pi

Controle a TV, as luzes e a ventoinha da sua sala de estar com Alexa (Amazon Echo ou Dot) e Raspberry Pi GPIO.

Etapa 1: configuração inicial

Usei uma imagem Raspberry Pi 2 e Raspbian Jessie baixada de

Depois de fazer login, digite os seguintes comandos para instalar os pacotes e bibliotecas Python necessários:

sudo apt-get update && sudo apt-get upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip instalar Flask flask-ask sudo apt-get install lirc

Etapa 2: configurar o Ngrok

Configurar Ngrok
Configurar Ngrok

Visite https://ngrok.com/download e obtenha a versão mais recente do Linux ARM como um arquivo compactado e descompacte dentro do diretório inicial:

descompacte /home/pi/ngrok-stable-linux-arm.zip

Abra um novo terminal e digite o seguinte comando:

sudo./ngrok http 4000

Abra outro novo terminal e digite o seguinte comando:

sudo./ngrok http 4500

Abra o terceiro novo terminal e digite o seguinte comando:

sudo./ngrok http 5000

Etapa 3: Script Python para controle de interruptor de luz

Abra uma nova sessão de terminal e crie um novo arquivo python denominado light_control.py:

nano light_control.py

Copie / cole o seguinte código no novo arquivo:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('LightControlIntent', mapping = {'status': 'status'}) def light_control (status): try: pinNum = 27 exceto Exceção como instrução e: return ('Número do PIN inválido.') GPIO.setup (pinNum, GPIO. OUT) se o status estiver em ['ligado', 'alto']: GPIO.output (pinNum, GPIO. LOW) se o status estiver em ['desligado', ' low ']: GPIO.output (pinNum, GPIO. HIGH) return statement (' Turning {} the Living Room Lights'.format (status)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 ', porta = porta)

Salve e feche o arquivo.

Inicie o servidor Flask com:

sudo python light_control.py

Deixe ngrok e light_control.py em execução

Etapa 4: Script Python para controle de fãs

Abra uma nova sessão de terminal e crie um novo arquivo Python denominado fan_control.py:

nano fan_control.py

Copie / cole o seguinte código no novo arquivo:

from flask importar Flask

from flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger ("flask_ask").setLevel (logging. DEBUG) @ ask.intent ('FanControlIntent', mapping = {'status': 'status'}) def fan_control (status): try: pinNum = 22 exceto Exceção como declaração e: return ('Número do PIN não é válido. ') GPIO.setup (pinNum, GPIO. OUT) se status em [' ligado ',' alto ']: GPIO.output (pinNum, GPIO. LOW) se status em [' desligado ',' baixo ']: GPIO.output (pinNum, GPIO. HIGH) return statement ('Turning {} the Living Room Lights'.format (status)) if _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 ', porta = porta)

Salve e feche o arquivo.

Inicie o servidor Flask com:

sudo python fan_control.py

Deixe ngrok, light_control.py e fan_control.py em execução

Etapa 5: Instalação e configuração do pacote LIRC

Para controlar a TV, você deve configurar um pino no Raspberry Pi para gerar sinais infravermelhos (IR) para sua TV específica. Abra o terminal e digite o seguinte comando para instalar um pacote LIRC que emula os sinais infravermelhos de muitos controles remotos.

sudo apt-get install lirc

Em seguida, você precisa habilitar e configurar o módulo do kernel lirc_rpi. Para fazer isso, abra os módulos no editor Nano

sudo nano / etc / modules

Adicione as linhas abaixo ao arquivo (certifique-se de que o parâmetro gpio_out_pin aponta para o pino que controla o LED IV):

lirc_devlirc_rpi gpio_out_pin = 17

Em seguida, abra o arquivo hardware.conf no Nano como antes com sudo:

sudo nano /etc/lirc/hardware.conf

Adicione a seguinte configuração ao arquivo:

LIRCD_ARGS = "- uinput" LOAD_MODULES = verdadeiro

DRIVER = "padrão"

DEVICE = "/ dev / lirc0"

MODULES = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

Agora, reinicie o Raspberry Pi:

sudo reboot

Etapa 6: Python Script para controle de TV

Abra uma nova sessão de terminal e crie um novo arquivo python denominado ir_control.py:

nano ir_control.py

Vá para

Encontre um controle remoto compatível com sua TV. No meu caso, tenho uma TV Sanyo que funciona com o arquivo de configuração sanyo-tv01. Depois de encontrar um arquivo compatível com sua TV, abra-o e verifique as opções de comando.

Copie / cole o código a seguir no novo arquivo e substitua sanyo-tv01 pelo nome do arquivo que funciona com a sua TV. Certifique-se também de que os comandos tv são suportados pelo arquivo de configuração de sua TV; Pode ser necessário modificar os comandos KEY_POWER, KEY_VIDEO, KEY_VOLUMEUP, KEY_VOLUMEDOWN e KEY_MUTE para funcionar corretamente com o arquivo de configuração da TV:

from flask import Flaskfrom flask_ask import Ask, statement, convert_errors import RPi. GPIO as GPIO import logging import os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app, '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('GPIOControlIntent', mapping = {'status': 'status'}) # 'pin': 'pin'}) def tv_function (status): se o status em ['ligar']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") declaração de retorno ('Ligar a TV') status elif em ['desligar']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") declaração de retorno ('Desligando a TV') status elif em ['alterar entrada']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") return instrução ('Alterando a entrada na TV') status elif em ['aumentar volume']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") declaração de retorno ('Aumentando o Volume na TV') status elif em ['diminuir o volume']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN ") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend_VOLUMEDOWN_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 sanyo-tv01 ") return statement ('Diminuindo o Volume na TV') status elif em ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") return statement ('Silenciando a TV') status elif em ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") instrução return (' Ativando o mudo da TV ') else: return instrução (' Função remota não encontrada. ') if _name_ ==' _main_ ': porta = 5000 app.run (host = '0.0.0.0', porta = porta)

Salve e feche o arquivo.

Inicie o servidor Flask com:

sudo python ir_control.py

Deixe todas as três janelas do terminal ngrok, light_control.py, fan_control.py e ir_control.py em execução

Etapa 7: Faça login na conta AWS

Faça login na conta AWS
Faça login na conta AWS

Primeiro, crie ou faça login em sua conta de desenvolvedor AWS e abra sua lista de habilidades Alexa.

Etapa 8: configuração da habilidade Alexa para TV

Configuração de habilidade Alexa para TV
Configuração de habilidade Alexa para TV

Selecione "Adicionar uma nova habilidade".

Defina o nome da habilidade para 'Trigger TV' e o nome de invocação para a (s) palavra (s) que deseja usar para ativar a habilidade.

Clique em próximo para continuar.

Copie / cole o seguinte na caixa 'Esquema de Intenção':

"slots": [{"name": "status", "type": "TV_Function"}, {"name": "amount", "type": "AMAZON. NUMBER"}], "intent": "GPIOControlIntent "}]}

Em seguida, clique em 'Adicionar tipo de slot'

Digite TV_Function no campo 'Enter Type'.

Insira os seguintes valores no campo 'Inserir valores':

ligar

desligar alterar entrada aumentar volume diminuir volume sem som ativar som

Em seguida, copie / cole o seguinte na caixa 'Amostras de expressões':

GPIOControlIntent {status}

GPIOControlIntent {status} por {amount}

Clique em próximo para continuar.

Selecione 'HTTPS' como o tipo de terminal de serviço e selecione uma região. Insira o URL ngrok da etapa 2 e clique em 'Avançar'. O URL deve ser algo como:

ed6ea04d.ngrok.io

Clique em 'Avançar' para continuar e pressione 'Salvar'.

Etapa 9: Configuração da habilidade Alexa para luzes

Luzes Alexa Skill Setup
Luzes Alexa Skill Setup

Feche a habilidade aberta e selecione "Adicionar uma nova habilidade".

Defina o nome da habilidade para 'Controle de luzes' e o nome de invocação para a (s) palavra (s) que deseja usar para ativar a habilidade.

Clique em próximo para continuar. Copie / cole o seguinte na caixa 'Esquema de Intenção':

{

"intents": [{"slots": [{"name": "status", "type": "LIGHTS_CONTROL"}], "intent": "LightsControlIntent"}]}

Em seguida, clique em 'Adicionar tipo de slot'.

Digite "LIGHTS_CONTROL" no campo 'Enter Type'.

Insira os seguintes valores no campo 'Inserir valores':

sobre

desligado

Em seguida, copie / cole o seguinte na caixa 'Amostras de expressões':

LightsControlIntent turn {status}

Clique em próximo para continuar. Selecione 'HTTPS' como o tipo de terminal de serviço e selecione uma região. Digite o URL ngrok da etapa 2 e clique em 'Avançar'. O URL deve ser algo como:

ed6ea04d.ngrok.io

Clique em 'Avançar' para continuar e pressione 'Salvar'.

Etapa 10: Configuração da habilidade Fan Alexa

Fan Alexa Skill Setup
Fan Alexa Skill Setup

Feche a habilidade aberta e selecione "Adicionar uma nova habilidade".

Defina o Nome da Habilidade para 'Controle de Ventilador' e o Nome de Invocação para a (s) palavra (s) que deseja usar para ativar a habilidade.

Clique em próximo para continuar.

Copie / cole o seguinte na caixa 'Esquema de Intenção':

{

"intents": [{"slots": [{"name": "status", "type": "FAN_CONTROL"}], "intent": "FANControlIntent"}]}

Em seguida, clique em 'Adicionar tipo de slot'.

Digite "FAN_CONTROL" no campo 'Enter Type'.

Insira os seguintes valores no campo 'Inserir valores':

sobre

desligado

Em seguida, copie / cole o seguinte na caixa 'Amostras de expressões':

FANControlIntent turn {status}

Clique em próximo para continuar. Selecione 'HTTPS' como o tipo de terminal de serviço e selecione uma região. Digite o URL ngrok da etapa 2 e clique em 'Avançar'. O URL deve ser algo como:

ed6ea04d.ngrok.io

Clique em 'Avançar' para continuar e pressione 'Salvar'.

Etapa 11: Construir o Ciruit

Construa o Ciruit
Construa o Ciruit

Conecte o circuito conforme mostrado no diagrama. Eu usei um módulo de relé JBtek de 8 canais DC 5V para conectar a linha CA 120v de minha casa e aterramento.

Etapa 12: Comandos Alexa

Agora, os seguintes comandos podem ser falados para Alexa para controlar sua sala de estar.

Recomendado: