Los asistentes controlados por voz que responden al habla y a las órdenes humanas ya no son nuevos. Se estima que uno de cada cuatro adultos en Estados Unidos posee un altavoz inteligente, como Google Home o Amazon Echo. Estos dispositivos proporcionan un punto de comunicación entre usted y sus dispositivos conectados, brindando comodidad y soporte al automatizar ciertas funciones.
En este tutorial, cubriremos cómo puede controlar dispositivos domésticos o de oficina mediante el reconocimiento de voz y el protocolo de transporte de telemetría de cola de mensajes (MQTT). MQTT es un protocolo de mensajería estándar de OASIS para Internet de las cosas (IoT).
Para este proyecto, utilizamos la API de voz de Google en el lenguaje de programación Python para garantizar que se entienda lo que se habla y que los comandos de voz coincidan con condiciones específicas. También usaremos MQTT para enviar señales de control al dispositivo.
Componentes necesarios
Herramientas
- IDE de Arduino
- Pitón 2.7
Bibliotecas
Diagrama de circuito
La placa está conectada a un interruptor de luz mediante un circuito de relé. También es posible utilizar la placa Arduino UNO en lugar de una personalizada.
Consideraciones técnicas
Usamos Python 2.7 para escribir el código y el micrófono de nuestra computadora para grabar lo que se dice para este proyecto.
Idealmente, la voz debería convertirse fácilmente en texto en Python utilizando la biblioteca Speech_recoginition. El texto se convierte a la “voz” de la computadora usando la biblioteca ttysx. Y la biblioteca paho-mqtt de Python admite la comunicación para MQTT.
Diagrama de bloques
Nota: El sistema informático recibe la voz a través de su micrófono y la convierte para que pueda reconocer adecuadamente cualquier comando. La computadora envía señales a MQTT con el apoyo de un enrutador, que está conectado a un corredor en línea. El dispositivo de control también está conectado a este mismo broker MQTT.
Como funciona
- El dispositivo de control, que se encuentra dentro de la placa, primero debe estar conectado al enrutador Wi-Fi de su casa u oficina. Esperará cualquier señal de comando sobre el tema “ts/light”.
- Cuando iniciamos el script del reconocedor, el dispositivo comienza a "escuchar". Todo lo que se hable se grabará y se convertirá en texto.
- Este discurso se guarda dentro de una cadena y esta cadena se compara con un conjunto de comandos específicos. Si los comandos coinciden, las señales de control se envían a MQTT. Por ejemplo, si un orador dice "luces encendidas", el discurso se convertirá en una cadena. Luego, esta cadena se analiza en busca de las palabras "luces encendidas". Cuando se encuentran y coinciden palabras, el dispositivo envía una señal de "ENCENDIDO" al corredor MQTT.
- Otro dispositivo, el que se encuentra dentro de la toma del cuadro de distribución, recibe la orden y enciende la luz.
Código
El código se puede dividir en dos partes.
1. Reconocimiento de voz
Cuando se enciende, el sistema crea una conexión con el broker MQTT: “broker.hivemq.com”.
cliente.connect(mqtt_broker, mqtt_port, 60)
Una función comienza a grabar las palabras captadas por el micrófono y las convierte en texto.
mientras 1:
datos = grabar Audio
datos = r.recognize_google(audio)
Una secuencia de datos (que incluye las palabras habladas) se pasa a la función "assti(data)", donde el habla se analiza en busca de comandos específicos.
if (“luces encendidas” en datos):
enviar en")
hablar(“¡la luz está encendida!”);
imprime “¡La luz está encendida!”
if (“luces apagadas” en datos):
enviar")
Si la condición coincide (es decir, las palabras coinciden con los comandos), se envía una señal utilizando la función "enviar (msg)" a MQTT.
def enviar (mensaje):
publicar.single(mqtt_publish_topic, msg, nombre de host=mqtt_broker)
2. Comunicación en red
Se crea y publica una suscripción común en ESP.
const char* topicSubscribe = “ts/light”;
const char* topicPublish = “ts/report”;
Para acceder a la red utilizamos el chip WiFi ESP8266 y ATmega328 es un microcontrolador de un solo chip. Todo lo que se envía desde el ATmega328 vía serie se publica directamente como señal de control en el tema “ts/light”.
if (Serie.disponible) {
Cadena datos recibidos = Serial.readString;
temp_str = datos recibidos;
temperatura de carbón (temp_str.length + 2);
temp_str.toCharArray(temp, temp_str.length + 1);
client.publish(temaPublish, temporal);
}
Observe el fragmento de código ESP8266. Todo lo recibido a través de MQTT se envía al puerto serie del ESP y al ATmega328p.
void datos_recibidos (tema char*, carga útil byte*, longitud interna sin firmar) {
datos_r_in_string = “”;
para (int i = 0; i < longitud; i++) {
data_r_in_string = Cadena(data_r_in_string + (char)carga útil(i));
//Serial.print((char)payload(i));
}
Serial.print(data_r_in_string);}
Este es un pequeño script de Python que convierte voz en texto. Puede incluir comandos o funciones adicionales, como IA, en sus scripts. Esto significaría que trabajarían como asistentes virtuales personales.