Walkie Talkie ESP32

Walkie Talkie basado en el ESP32

Walkie Talkie ESP32

Transmite audio mediante UDP Broadcast o ESP-NOW.

Walkie Talkie ESP32. Los datos de audio se transmiten a través de transmisión UDP o ESP-NOW. ¡Así que el Walkie Talkie funcionará incluso sin una red WiFi!

Lo he basado en un micrófono I2S y un amplificador I2S, pero funcionará igualmente bien con micrófonos analógicos y auriculares con un pequeño cambio en el código.

Componentes de hardware

  • Adaptador de amplificador Adafruit I2S 3W Clase D – MAX98357A
  • micrófono I2S MEMS
  • Altavoz genérico de 4 ohmios u 8 ohmios
  • Placa de desarrollo ESP32 genérica: Prácticamente cualquier placa debería funcionar siempre que tenga suficientes pines
  • Interruptor de botón

Puede acceder al proyecto Fusion360 aquí: https://a360.co/2PXgAUS , así que no dude en imprimir su propia versión si lo desea.

Para el micrófono del video, estoy usando mi propia placa de micrófono ICS-43434 pero funcionará igualmente bien con la placa de micrófono INMP441.

Ambos son micrófonos I2S que interactúan directamente con el ESP32.

La placa amplificadora I2S 3W es de Adafruit y alimenta el altavoz. Esto también interactúa directamente con el ESP32.

Para la placa ESP32, estoy usando un TinyPICO, pero se puede usar cualquier placa de desarrollo genérica ya que no estamos usando ninguna característica especial en este proyecto.

Estoy usando una placa de circuito impreso personalizada; la gente genial de PCBWay la inventó; como de costumbre, hicieron un gran trabajo y estoy muy satisfecho con el resultado de las placas.

Tengo muchos proyectos de audio y es realmente bueno poder conectar cosas juntas y no tener que preocuparme por los cables que van a todas partes. La única pequeña omisión que hice es no romper los pines GPIO restantes, así que creo que pronto haré una versión 2 de la placa.

Aquí hay un enlace al esquema y PCB en EasyEDA y un enlace para pedir la placa directamente de PCBWay si lo desea .

Habiendo dicho eso, realmente no necesitas una PCB, puedes conectar fácilmente todo en la placa de pruebas, y eso es exactamente lo que hice cuando estaba creando un prototipo.

Walkie Talkie ESP32

El esquema es muy simple: estamos usando placas I2S tanto para el micrófono como para el altavoz, lo que hace que el cableado de estos al ESP32 sea muy sencillo.

Por supuesto, puede modificar el código para usar el ADC incorporado para la entrada y el DAC incorporado para la salida. Muy útil si desea utilizar placas de micrófono analógicas y un conector para auriculares para la salida.

Agregué un poco de circuitos adicionales a mi placa para crear una fuente de alimentación limpia para los micrófonos. Si miras algunos de mis videos anteriores, recordarás que detectamos mucho ruido en los micrófonos cuando usamos WiFi.

Para solucionar este problema de ruido, estamos creando una fuente de alimentación limpia de 3.3v para los micrófonos tomando una alimentación directa de la batería, filtramos esto con un filtro LC y luego pasamos esto a un regulador de baja caída. Esto nos da una fuente de alimentación realmente agradable y limpia para los micrófonos que elimina muchos de los problemas de ruido.

Todo el código está en GitHub; debería ser en su mayoría autoexplicativo, pero daré una descripción general de alto nivel aquí.

El principal desafío de este proyecto es cómo hacer que la transmisión de audio de un walkie-talkie a todos los demás walkie-talkies.

He implementado esto de dos formas diferentes. Puede cambiar fácilmente entre estos en el código con una simple definición de hash.

La primera forma es utilizar la transmisión UDP. La transmisión UDP es un mecanismo muy simple. Envía un paquete UDP a una dirección IP especial y su enrutador transmite este paquete a todos los demás dispositivos en su red.

Podemos enviar de forma segura hasta 1436 bytes en un paquete UDP, por lo que si estamos muestreando a 16 KHz y usando muestras de 8 bits, eso es alrededor de 90 ms de datos de audio. Entonces necesitamos enviar alrededor de 11 paquetes por segundo. Esto está dentro de las capacidades del ESP32.

La gran ventaja de usar la transmisión UDP es que no necesitamos saber acerca de nuestros pares, simplemente podemos transmitir un mensaje y cualquiera que lo esté escuchando lo recibirá. Tampoco necesitamos un servidor centralizado al que todo se conecte. Todo el trabajo pesado lo realiza el enrutador.

Sin embargo, hay algunas desventajas de UDP que debemos tener en cuenta:

  • La entrega de paquetes UDP es solo el mejor esfuerzo; no hay garantía de que alguien reciba el paquete que envía.
  • Tampoco hay garantía de pedido de paquetes: alguien puede recibir los paquetes que ha enviado en un orden completamente aleatorio.

Para este proyecto, he optado por ignorar estos dos problemas. Con los paquetes de transmisión, generalmente nos quedamos en la misma red, por lo que probablemente no perdamos demasiados paquetes y nuestros paquetes probablemente también vendrán en el orden correcto. Si no es así, obtendremos un poco de ruido y distorsión en el audio.

La otra gran ventaja de la transmisión UDP es que puede recibir los paquetes en su computadora de escritorio o en su teléfono, por lo que sería bastante fácil crear clientes adicionales que no estén basados ​​en ESP32.

La segunda forma en que implementé el transporte es usar ESP-NOW.

ESP-NOW es un protocolo desarrollado por Esppresif que permite que varios dispositivos ESP se comuniquen entre sí sin necesidad de WiFi.

Esto nos da una gran ventaja sobre la opción UDP en el sentido de que no necesitamos una red WiFi para que nuestro Walkie-Talkie funcione.

La desventaja de ESP-NOW es que tiene un tamaño de paquete mucho más pequeño de 250 bytes. Esto significa que necesitamos enviar paquetes 64 veces por segundo.

También tenemos las mismas desventajas que UDP: la entrega de paquetes es el mejor esfuerzo y no hay garantía de en qué orden llegarán los paquetes.

Sin embargo, en mis pruebas, ha funcionado razonablemente bien.

Una vez resuelto el problema del transporte, solo tenemos que conectarlo todo.

Tenemos la entrada I2S, que lee muestras del micrófono y las pasa a nuestro transporte.

Una vez que el transporte ha acumulado suficientes datos para llenar un paquete, envía los datos a través de UDP o ESP-NOW.

Por otro lado, tenemos el mismo transporte escuchando paquetes. Cada vez que se recibe un paquete, pone los datos en cola para reproducirlos a través de nuestra salida I2S. La salida I2S acaba de enviar muestras al amplificador I2S.

Para permitir que los paquetes tarden un poco más en llegar, tenemos un búfer entre el transporte y la salida I2S. Dejamos que transcurra una pequeña cantidad de tiempo antes de comenzar a reproducir las muestras; esto nos da algo de tiempo libre para permitir la fluctuación de los paquetes. Tiene el costo de cierta latencia en el audio: con todo lo que se tiene en cuenta, el audio se reproduce aproximadamente medio segundo después de que se hizo.

Con todo, aunque el proyecto funciona. La calidad no es sorprendente, pero ciertamente es suficiente para un proyecto de hobby.

Como siempre, el código está todo en GitHub. Déjame saber lo que piensas en los comentarios. Y si tiene alguna mejora, abra una solicitud de extracción.

Algunas ideas que sería bueno tener en cuenta:

  • Compresión del audio para reducir el ancho de banda.
  • Control de ganancia automática
  • Cancelación de eco para que podamos tener full-duplex

Probablemente haya muchas otras mejoras, ¡así que siéntete libre de hackear

Walkie Talkie ESP32: Esquemas

https://oshwlab.com/chris_9044/esp32-walkie-talkie

Código fuente

Consíguelo de GitHub

atomic14 / esp32-walkie-talkie

Un walkie-talkie basado en ESP32 usando transmisión UDP o ESP-NOW

Malachite SDR

malachite sdr

Picked For You

Si4732 Receptor ATS-25

Factory Outlet 50kHz-3GHz NanoVNA-F V2
nanovna-f V2 – 50kHz ~ 3000MHz – Los rangos de medición se extienden a 3GHz y los rangos dinámicos son más grandes. La medición es más precisa y el funcionamiento es más conveniente. Batería de litio de gran capacidad de 5000mAh
Contenido Relacionado