ESP32 UART для Raspberry Pi I2C

Я пытаюсь понять, как подключить контакты UART ESP32 к контактам I2C моего raspberry pi 3B+. Я вижу несколько чипов моста, доступных для этого, например, TI MSP430 Datasheet . Но я не очень разбираюсь в схемах, поэтому у меня трудные времена. Контакты, которые мне нужно использовать на ESP32: GPIO 9 и 10, RX и TX соответственно (UART1). На Raspberry Pi: GPIO 2 и 3, SDA и SCL соответственно. Кто-нибудь знает ответы на вопросы ниже?

  1. Помимо подключения контактов RPi, ESP, Vcc, GND к мосту в правильных позициях ввода-вывода на микросхеме, какие дополнительные схемы потребуются для обеспечения хорошей связи?

  2. Как будет выглядеть код ESP32 (Arduino IDE)?

  3. Как будет выглядеть код Pi (python)?

Почему вы хотите использовать I2C на Raspberry Pi? У него также есть Uart, так почему бы не подключить их вместо этого?
Хороший вопрос, причина в том, что контакты UART заняты другим модулем.
У ESP32 есть интерфейс I2C, у PI есть интерфейс I2C, почему бы не использовать его?
Мне просто интересно об этом... Интерфейсы I2C обоих модулей не заняты в моем приложении. Я никогда не пробовал это раньше.
@ Feynman137: Купи себе Pi4. Он имеет 6 Uart ;-)
Наконец-то у меня может появиться причина обновить @PMF
Если вы настаиваете на использовании этих выводов, ваш единственный реальный шанс — программный серийный номер. I2C и uart просто вообще не совместимы, за исключением случаев, когда вы используете какую-то плату преобразователя, но есть более простые решения (заменить чипы/пины, придерживаться одного интерфейса , программного решения, ...)

Ответы (2)

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

ESP32 имеет более 1 UART. Хотя обычно в конфигурации по умолчанию используется только один из них, ESP32 имеет 3 UART. Вы можете настроить, какие выводы GPIO использовать, используя функцию uart_set_pin(). Вы должны проверить техническое описание или веб-сайт Espressif для получения подробной информации.

Использование нескольких UART позволяет ESP действовать как последовательный мост. Эта функция часто реализуется с различными вариантами ESP в виде последовательного моста WiFi, но она работает и для проводных соединений.

Страница UART

ESP имеет несколько UART, но Pi 3b+ не имеет контактов для более чем одного UART, и эти контакты в настоящее время заняты. В этом проблема. Однако я не знал о функции uart_set_pin(), поэтому я ценю это предложение.

Другие прокомментировали, что самый простой способ связи между ESP32 и RPi — это использование асинхронного последовательного порта; если у вас нет свободного последовательного порта на Pi, вы можете добавить адаптер USB-to-serial.

Если вы выберете один с чипом FTDI, то просто подключите его к Pi, и вы получите еще один последовательный порт; другой распространенный тип адаптера использует чип CP2102, и я думаю, что это может потребовать от вас установки драйвера на Pi, но вы найдете множество инструкций, как это сделать, в Интернете, например, на этой странице .

Убедитесь, что вы используете адаптер с правильным уровнем напряжения (логические сигналы 3,3 В, а не 5 В или напряжения RS232), затем соедините заземляющие провода вместе, а Tx на Pi к Rx на ESP32, Rx на Pi к Tx на ESP32.

Что касается того, как вы используете эту ссылку для общения, любой символ, который вы отправляете на одной стороне, просто появится на другой. Однако целесообразно создать простой формат связи, такой как командная буква, возможно, несколько числовых значений, а затем возврат каретки, сигнализирующий об окончании командной строки. Это имеет 2 преимущества; это означает, что вы можете использовать последовательный терминал для ввода команд вручную, а также это позволяет избежать возможной путаницы, когда получатель пытается выполнить действие, когда он получил только часть команды.