Assistentes controlados por voz que respondem à fala e aos comandos humanos não são mais uma novidade. Estima-se que um em cada quatro adultos na América possui um alto-falante inteligente, como o Google Home ou o Echo da Amazon. Esses dispositivos oferecem um ponto de comunicação entre você e seus dispositivos conectados, proporcionando comodidade e suporte ao automatizar determinadas funções.
Neste tutorial, abordaremos como você pode controlar aparelhos domésticos ou de escritório usando reconhecimento de voz e o protocolo Message Queuing Telemetry Transport (MQTT). MQTT é um protocolo de mensagens padrão OASIS para a Internet das coisas (IoT).
Para este projeto, usamos a API Speech do Google na linguagem de programação Python para garantir que o que é falado seja compreendido e que os comandos de voz correspondam a condições específicas. Também usaremos o MQTT para enviar sinais de controle ao dispositivo.
Componentes necessários
Ferramentas
- IDE do Arduino
- Phyton 2.7
Bibliotecas
Diagrama de circuito
A placa é conectada a um interruptor de luz usando um circuito de relé. Também é possível usar a placa Arduino UNO em vez de uma customizada.
Considerações técnicas
Usamos Python 2.7 para escrever o código e o microfone do nosso computador para gravar o que é dito para este projeto.
O ideal é que a fala seja facilmente convertida em texto em Python usando a biblioteca Speech_recoginition. O texto é convertido para a “voz” do computador usando a biblioteca ttysx. E a biblioteca paho-mqtt do Python suporta a comunicação para o MQTT.
Diagrama de bloco
Observação: O sistema do computador recebe a fala por meio de seu microfone e a converte, para que possa reconhecer adequadamente qualquer comando. O computador envia sinais para o MQTT com o suporte de um roteador, que está conectado a uma corretora online. O dispositivo de controle também está conectado a este mesmo broker MQTT.
Como funciona
- O dispositivo de controle, que fica dentro da placa, primeiro deve ser conectado ao roteador Wi-Fi de sua casa ou escritório. Ele aguardará qualquer sinal de comando no tópico “ts/light”.
- Quando iniciamos o script do reconhecedor, o dispositivo começa a “escutar”. Qualquer coisa falada será gravada e convertida em texto.
- Essa fala é salva dentro de uma string e essa string é comparada com um conjunto de comandos específicos. Se os comandos corresponderem, os sinais de controle serão enviados ao MQTT. Por exemplo, se um locutor disser “luzes acesas”, a fala será convertida em string. Essa string é, então, analisada em busca das palavras “luzes acesas”. Quando as palavras são encontradas e combinadas, o dispositivo envia um sinal “ON” para o corretor MQTT.
- Outro aparelho – aquele que fica dentro da tomada do quadro – recebe o comando e acende a luz.
O código
O código pode ser dividido em duas partes.
1. Reconhecimento de voz
Ao ser ligado o sistema cria a conexão com o broker MQTT: “broker.hivemq.com”.
cliente.connect(mqtt_broker, mqtt_port, 60)
Uma função começa a gravar quaisquer palavras captadas pelo microfone e as converte em texto.
enquanto 1:
dados = registroÁudio
dados = r.recognize_google(áudio)
Uma sequência de dados (que inclui as palavras faladas) é passada dentro da função “assti(data)”, onde a fala é analisada para quaisquer comandos específicos.
if (“luzes acesas” nos dados):
enviar(“LIGADO”)
falar(“a luz está acesa!”);
imprima “A luz está acesa!”
if (“luzes apagadas” nos dados):
enviar(“DESLIGADO”)
Se a condição for correspondida (ou seja, as palavras correspondem aos comandos), um sinal é enviado usando a função “send(msg)” para o MQTT.
def enviar(mensagem):
publicar.single(mqtt_publish_topic, msg, hostname=mqtt_broker)
2. Comunicação em rede
Uma assinatura comum é criada e publicada no ESP.
const char* tópicoSubscribe = “ts/light”;
const char* topicPublish = “ts/relatório”;
Para acessar a rede, usamos o chip WiFi ESP8266 e o ATmega328 é um microcontrolador de chip único. Qualquer coisa enviada do ATmega328 via serial é publicada diretamente como um sinal de controle para o tópico “ts/light”.
if (Serial.disponível ) {
String recivedData = Serial.readString ;
temp_str = dados recebidos;
char temp(temp_str.length + 2);
temp_str.toCharArray(temp, temp_str.length + 1);
cliente.publish(topicPublish, temp);
}
Observe o trecho de código do ESP8266. Qualquer coisa recebida pelo MQTT é enviada para a porta serial do ESP e para o ATmega328p.
void Received_data(char* tópico, byte* carga útil, comprimento interno não assinado) {
dados_r_in_string = “”;
for (int i = 0; i < comprimento; i++) {
data_r_in_string = String(data_r_in_string + (char)carga útil(i));
//Serial.print((char)carga útil(i));
}
Serial.print(data_r_in_string);}
Este é um pequeno script Python que converte voz em texto. É possível incluir comandos ou funcionalidades adicionais, como IA nos scripts. Isso significaria que eles trabalhariam como assistentes virtuais pessoais.