top of page

[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.

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 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!!!!

Featured Posts
Recent Posts
Search By Tags
Nenhum tag.
Follow Us
  • LinkedIn Social Icon
  • Facebook Social Icon
  • Twitter Social Icon
  • Instagram Social Icon
  • YouTube Social  Icon
bottom of page