UART ESP32 a Raspberry Pi I2C

Estoy tratando de entender cómo conectar los pines UART de un ESP32 a los pines I2C de mi raspberry pi 3B+. Veo varios chips puente disponibles para esto, como la hoja de datos MSP430 de TI . Pero no soy muy experto en circuitos, así que estoy pasando por un momento difícil. Los pines que necesito usar en el ESP32 son: GPIO 9 y 10, RX y TX respectivamente (UART1). En Raspberry Pi: GPIO 2 y 3, SDA y SCL respectivamente. ¿Alguien sabe las respuestas a las siguientes preguntas?

  1. Además de conectar los pines RPi, ESP, Vcc, GND al puente en las posiciones correctas de E/S en el chip, ¿qué circuitos adicionales se necesitarían para lograr una buena comunicación?

  2. ¿Cómo se vería el código ESP32 (IDE de Arduino)?

  3. ¿Cómo se vería el código de Pi (python)?

¿Por qué quieres usar I2C en la Raspberry Pi? También tiene un Uart, entonces, ¿por qué no conectarlos en su lugar?
Buena pregunta, la razón es que los pines UART están ocupados por otro módulo.
El ESP32 tiene una interfaz I2C, el PI tiene una interfaz I2C, ¿por qué no usar eso?
Me preguntaba acerca de esto... Ambas interfaces I2C de los módulos están desocupadas en mi aplicación. Nunca he probado esto antes.
@ Feynman137: Consíguete una Pi4. Tiene 6 Uarts ;-)
Finalmente puedo tener una razón para actualizar @PMF
Si insiste en usar esos pines, su única posibilidad realista es la serie de software. I2C y uart simplemente no son compatibles en absoluto, excepto si usa alguna placa convertidora, pero hay soluciones más fáciles (cambiar chips/pines, apegarse a una interfaz, solución de software, ...)

Respuestas (2)

esquemático

simular este circuito : esquema creado con CircuitLab

El ESP32 tiene más de 1 UART. Aunque es común usar solo uno de ellos en la configuración por defecto, el ESP32 tiene 3 UARTs. Puede configurar qué pines GPIO usar usando la función uart_set_pin(). Debe consultar la hoja de datos o el sitio web de Espressif para obtener más detalles.

El uso de múltiples UART permite que el ESP actúe como un puente serie. Esta función se implementa con frecuencia con los diferentes tipos de ESP como puente serie WiFi, pero también funciona para conexiones por cable.

Página UART

ESP tiene múltiples UART, pero Pi 3b+ no tiene pines para más de un UART y estos pines están actualmente ocupados. Este es el problema. Sin embargo, no conocía la función uart_set_pin(), así que agradezco la sugerencia.

Otros han comentado que la forma más fácil de comunicarse entre el ESP32 y el RPi es mediante una serie asíncrona; Si no tiene un puerto serie de repuesto en el Pi, puede agregar un adaptador de USB a serie.

Si elige uno con un chip FTDI, simplemente conéctelo al Pi y obtendrá otro puerto serie; el otro tipo común de adaptador usa el chip CP2102, y creo que esto podría requerir que instale un controlador en el Pi, pero encontrará muchas instrucciones sobre cómo hacerlo en la Web, por ejemplo, esta página

Asegúrese de estar usando un adaptador con el nivel de voltaje correcto (señales lógicas de 3,3 V, no voltajes de 5 V o RS232), luego conecte los cables de tierra juntos y Tx en Pi a Rx en ESP32, Rx en Pi a Tx en ESP32.

Con respecto a cómo usas este enlace para comunicarte, cualquier carácter que envíes en un lado solo aparecerá en el otro. Sin embargo, es prudente crear un formato de comunicación simple, como una carta de comando, quizás algunos valores numéricos, luego un Retorno de carro para señalar el final de la línea de comando. Esto tiene 2 beneficios; significa que puede usar un terminal serial para ingresar comandos manualmente, y también evita la posible confusión en la que el destinatario intenta realizar una acción cuando solo ha recibido parte de un comando.