[PT-BR] Google Assistant + Raspberry Pi: Comandos de voz para acionamento de cargas (Automação Resid

O objetivo deste post é aproveitar a infra-estrutura do post anterior [Raspberry Pi + Blynk: Acionamento de carga AC (Automação Residencial com Smartphone)], adicionando microfone e auto-falantes, para nos permitir utilizar a biblioteca de reconhecimento de voz do google (Google Assistant), para acionarmos a mesma carga por comando de VOZ.
Utilizei a língua inglesa (ENG-US) como forma de comunicação, porém já tive notícias que tem gente conseguindo utilizar a biblioteca em português (carece fontes).
Para atingir este objetivo, dividi o post em seis partes, listadas abaixo:
Passo 1: Configuração do projeto na Google Cloud Passo 2: Peças de Hardware e seu diagrama Esquemático Passo 3: Gravação do sistema operacional no Raspberry Pi, configuração do VNC server e ajuste de configurações de segurança Passo 4: Configuração do microfone e auto-falante Passo 5: Projeto GassistPi, configurando modificações e auto carregamento Passo 6: Demonstração
Na demonstração, além de realizar o acionamento da carga, aproveito o Google Assistant para: sintonizar rádios, tocar música direto do youtube, perguntar sobre o tempo hoje, perguntar o valor do dollar em reais e ordenar o desligamento do sistema.
Configuração do projeto na Google Cloud
Vá ao guia de configuração de um projeto de desenvolvimento e ajuste de conta do google assistant SDK (Software development Kit), infelizmente esse guia está em inglês, porém eu vou traduzir aqui o conteúdo e indicar os mesmos links que você precisa acessar para usar o google assistant com seu raspberry pi.
O projeto de desenvolvimento google dá ao seu dispositivo acesso a API (Application Programming Interface) do google assistant. O projeto possui uma cota de uso e te dá métricas valiosas para os pedidos feitos por seu dispositivo.
Para ativar o acesso ao google assistant API, faça o seguinte:
1. No console da plataforma em nuvem, vá a pagina de projetos. Selecione um projeto existente ou crie um novo projeto.
2. Ative o google assistant API no projeto que você selecionou (veja os termos de serviço)
3. Crie um OAuth Client ID (chave de identificação de cliente) através dos seguinte passos:
a. Crie um OAuth client ID.
b. Você pode precisar dar um nome a tela de consentimento do produto. Na aba OAuth consent screen, dê um nome ao produto (sugiro dar o mesmo nome do projeto) e clique em Save.
c. Clique em Other e dê um nome ao Client ID (sugiro dar o mesmo nome do projeto).
d. Clique em ⬇ (no canto direito da tela) para o client ID e faça o download do arquivo JSON segredo do cliente (client_secret_<client-id>.json).
4. O arquivo client_secret_<client-id>.json precisa estar no dispositivo (raspberry pi) para autorizar o exemplo do Google Assistant SDK a fazer requisições ao google assistant. Não renomeie este arquivo (por enquanto).
Para o raspberry Pi tenha certeza que este arquivo (client_secret_<client-id>.json) fica locado na pasta /home/pi. Você pode fazer o upload via comando scp (Linux):
scp ~/Downloads/client_secret_client-id.json pi@raspberry-pi-ip-address:/home/pi/
ou, você pode baixar o arquivo diretamente do seu raspberry pi (com sistema pixel) acessando via chromium browser sua conta do google cloud e baixando igual ao passo 3.d.
O Video abaixo ilustra todos os passos anteriores, e cópia da chave tanto via scp (Linux) quanto diretamente no raspberry PI direto do chromium Browser.
Peças de Hardware e seu diagrama Esquemático (Circuito do Relé, Conexão do microfone e auto-falante)
O hardware deste post é basicamente o hardware do post anterior adicionando um microfone USB (R$17,00 no mercado livre), e um par de alto-falantes P2 com alimentação USB (R$ 13,50).
O esquemático do hardware então é descrito na figura abaixo:

Como descrito anteriormente a parte central do hardware é a raspberry pi 3, que utilizará o microfone para captar o audio do usuário e os altos falantes para comunicar-se com o usuário. Adicionalmente utilizo um relé de 5V de entrada e conecto uma tomada onde estará a carga a ser controlada.
Com o hardware montado, vamos em frente com a gravação do SD-card com o sistema operacional e a execução do conjunto de configurações tanto de segurança quanto de acesso remoto.
Gravação do sistema operacional no Raspberry Pi
O sistema operacional a ser gravado no raspberry pi será o Raspbian com interface gráfica (Pixel desktop). Usaremos essa distro devido a necessidade de acessarmos remotamente a RPi para usarmos o browser na finalização da autenticação do google assistant na google cloud.
Diferente do post anterior, neste post irei realizar a gravação no ambiente Linux (Ubuntu 16.04) utilizando o programa Etch. Abaixo segue o vídeo que ilustra todos os passos para realização da gravação.
Assim que terminada gravação do sd-card, temos que inserir o mesmo no raspberry pi, e durante a primeira inicialização realizar a configuração do VNC server para acessarmos a RPi remotamente com interface gráfica.
Configurando VNC no raspberry pi e acessando remotamente via PC host
Instalação e configuração do tightvncserver na Raspberry PI.
No terminal instale o pacote tightvncserver digitando:
"sudo apt-get install tightvncserver"
Crie um arquivo por meio do eguinte comando "sudo nano /etc/init.d/tightvnc", e com o seguinte conteúdo: #!/bin/sh ### BEGIN INIT INFO # Provides: tightvncserver # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop tightvncserver ### END INIT INFO # Set the USER variable to the name of the user to start tightvncserver under export USER='pi' eval cd ~$USER case "$1" in start) su $USER -c '/usr/bin/tightvncserver :1' echo "Starting TightVNC server for $USER " ;; stop) pkill Xtightvnc echo "Tightvncserver stopped" ;; *) echo "Usage: /etc/init.d/tightvnc {start|stop}" exit 1 ;; esac exit 0
Dê permissão de execução ao arquivo criado por meio do seguinte comando:
"sudo chmod 755 /etc/init.d/tightvnc"
Adicione o mesmo para execução automática ao iniciar a raspberry por meio do seguinte comando:
"sudo update-rc.d tightvnc defaults"
Execute o tightvncserver pela primeira vez para criar o password de acesso remoto:
"su pi -c /usr/bin/tightvncserver :1"
Digite "n" quando for perguntado por criação de password view only.
No computador onde iremos acessar remotamente a raspberry pi:
No computado o qual desejamos acessar remotamente a interface gráfica do raspberry pi, instale o xtightvncviewer:
"sudo apt-get install xtightvncviewer"
Em seguida execute o mesmo endereçando o ip da raspberry pi:
"xtightvncviewer 192.168.1.38:1"
Ajuste de configurações básicas e de segurança
O vídeo abaixo da seção de configuração de mic/alto-falantes ilustra todos os passos de configuração a serem executados para garantir maior segurança a sua Raspberry Pi conectada na rede, esses passos são:
*Configuração do teclado (vídeo do post anterior);
Configuração da senha do access point (wifi);
Configuração da senha do usuário "pi"
*Ativação do SSH (deve ser feito para o passo anterior do vnc server)
Configuração de fuso horário (importante para o google cloud e assistant)
sudo apt-get update
sudo apt-get upgrade (atualização do sistema operacional)
Configuração do microfone e auto-falante
O vídeo abaixo ilustra as configurações a serem realizadas para obtermos o correto funcionamento do microfone e dos alto-falantes na raspberry pi, os passos são:
Achar dispositivo de gravação: arecord -l => card 1, device 0 Achar dispositivo de reprodução: aplay -l => card0, device 0
Configurações avançadas de mic e alto-falantes com o Alsamixer
Criar arquivo ~/.asoundrc com as configurações de mic e alto-falantes
Forçar saída de audio no connector P2 (3.5mm)
Testar alto-falantes: speaker-test -t wav
Testar gravação microfone: arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw
Testar reprodução microfone: aplay --format=S16_LE --rate=16000 out.raw
Projeto GassistPi, configurando modificações e auto carregamento
O vídeo abaixo ilustra todas as configurações necessárias para finalizarmos a configuração do google assistant para uso do projeto GassistPi (https://github.com/shivasiddharth/GassistPi).
Seguem os passos realizados:
Instalação do git e git-core: sudo apt-get install git-core git
Permissões para arquivos de configuração do projeto GassistPi:
"sudo chmod +x /home/pi/GassistPi/audio-drivers/USB-MIC-JACK/scripts/usb-mic-onboard-jack.sh"
"sudo /home/pi/GassistPi/audio-drivers/USB-MIC-JACK/scripts/usb-mic-onboard-jack.sh"
Copiar via rede (scp) ou baixar diretamente na raspberry pi o arquivo json com as credenciais secretas do cliente:
por o arquivo .json na pasta /home/pi e renomear o mesmo para: assistant.json
Permissões para scripts de instalação de dependências de software (pacotes python)
"sudo chmod +x /home/pi/GassistPi/scripts/gassist-installer-pi3.sh" "sudo chmod +x /home/pi/GassistPi/scripts/snowboy-deps-installer.sh"
Execução dos scripts de instalação de dependências de software (pacotes python)
"sudo /home/pi/GassistPi/scripts/snowboy-deps-installer.sh" "sudo /home/pi/GassistPi/scripts/gassist-installer-pi3.sh"
Ao fim do script gassist-installer-pi3.sh será informado uma url para o usuário entrar e pegar o código de autorização para a raspberry pi poder usar o projeto da google cloud com a API google assistant.
Ir para ambiente virtual para teste da aplicação demo do google: "source env/bin/activate" "google-assistant-demo"
Permissão para o script de inicialização automática do google assistant "sudo chmod +x /home/pi/GassistPi/scripts/service-installer.sh"
Rodar o script de instalação do serviço "sudo /home/pi/GassistPi/scripts/service-installer.sh"
Habilitar o serviço ao controle do sistema
sudo systemctl enable gassistpi-ok-google.service
Antes de rodar o google assistant (GassistPi), faço três modificações no código para adaptar ao hardware que tenho para acionamento da carga (Lâmpada): 1 - mudo a palavra de acionamento de trigger para turn, 2 - mudo o acionamento da lâmpada de kitchen lights para lights, e mudo o pino de 12 para 26.
Rodar o google assist sudo systemctl start gassistpi-ok-google.service
Agora basta reiniciar a raspberry pi que o google assistant inicializa automaticamente.
Demonstração
Segue abaixo o video de demonstração, que segue o seguinte script:
Ligar e desligar lâmpada: "Turn lights on" ... "Turn lights off"
Sintonizar radio web (streaming) "Tune into radio one" ... "Stop"
Rodar audio diretamente do youtube: "Play iron maiden song list" - youtube ... "Stop"
Pergunta sobre o clima hoje em graus Celsius "How's the weather in my location today in °C"
Pergunta sobre taxa de conversão do dollar para real: "Dollar to real exchange rate"
Comando para desligar o sistema (raspberry pi): "Turn shut down"
Se divirtam!!!!
#RaspberryPi #Electronics #maker #GoogleCloud #GoogleAssistant #VoiceRecognition #Português