Подключите arduino nano и ESP32 к I2C на GPIO7 и GPIO8?

Я допустил ошибку, соединив SD0 (GPIO7) и SD1 (GPIO8) с SDA и SCL на arduino nano. Я запутался с GPIO21 и pin21, GPIO22 и pin 22!

Поскольку я сделал прототип печатной платы, я бы не стал добавлять какие-то провода и обрезать следы, поэтому я бы спросил, могу ли я использовать эти контакты (GPIO7 и GPIO8) в качестве SDA и SCL.

Если ответ утвердительный, то как я могу их назначить с помощью библиотеки Arduino?

Провод.начало (7,8)?

Другой вопрос, я бы использовал специальные подтягивающие резисторы 2x4.7K. На стороне arduino я написал:

digitalWrite(SDA, 0); digitalWrite(SCL, 0);

Правильно ли делать то же самое на стороне ESP32?

Обновление 01 ноября: После вопроса от Маженко я думаю, что мне нужна дополнительная помощь для настройки I2c.

Я спроектировал печатную плату, имея в виду, что esp32 был терпим к 5V, поэтому в данный момент я подтягиваю SDA, SCL от 5V, который я ввожу в вывод питания esp. Обратите внимание, что этот 5V не исходит от Nano из-за высокого тока, требуемого esp. Я беру свой вход питания 12 В и регулирую его до 5 В с помощью 7805, предназначенного только для esp (я знаю, много рассеивания! В следующей версии печатной платы я должен все изменить, имея в виду, что мне нужны как 12В, так и 5В в моей схеме).

Так вот, я читал, что esp32 не терпит 5V. Чтобы избежать сдвига уровня, могу ли я вытащить SDA и SCL из линии 3,3 В (arduino 3,3 В или esp32?)?

Я бы использовал esp32 в качестве мастера.

- Спасибо.

, 👍-1

Обсуждение

Как я знаю, проводная библиотека-это аппаратная библиотека I2C, а не программное обеспечение. Аппаратное обеспечение I2C привязано к специальным выводам. И почему вы пытаетесь вытащить обе линии до минимума через digitalWrite?, @chrisl

Я бы потянул низко две линии, чтобы устранить внутренние резисторы arduino pull up из схемы, используя esternal. Я не знаю, могу ли я сделать то же самое на стороне esp32., @daigs

Если вы используете аппаратное обеспечение I2C на Nano, линии ничего не сделают, так как контакты управляются аппаратным обеспечением I2C, а не цифровым выходом. Если вы используете программное обеспечение I2C, контакты будут контролироваться библиотекой. Выполнение digitalWrite отключит внутренние pullup на данный момент, но как только библиотека примет меры, pins будут установлены в состояние библиотек по умолчанию (скорее всего, с включенным pullup, но не гарантированным). Поэтому я думаю, что эти линии не выполняют функцию на Arduino., @chrisl


1 ответ


1

Поскольку я сделал прототип печатной платы, я бы не стал добавлять несколько проводов и обрезать следы, поэтому я бы спросил, могу ли я использовать эти контакты (GPIO7 и GPIO8) в качестве SDA и SCL.

Нет, ты не можешь. Эти контакты используются внутренним чипом флэш-памяти. Если вы подключите к ним какие-либо объекты, вы в конечном итоге не сможете прочитать флэш-память и, следовательно, не сможете запустить какой-либо код. Другими словами, чип не загрузится. Так что вам придется укусить пулю, вырезать следы и добавить проволоку.

Провод.начало (7,8)?

Да. Это позволит управлять матрицей шины для маршрутизации I2C через различные контакты - но, конечно, вы не можете использовать эти контакты, как отмечалось выше.

На стороне arduino я написал:

digitalWrite(SDA, 0); digitalWrite(SCL, 0);

Правильно ли делать то же самое со стороны ESP32?

- Нет. Это использует причуду в системе AVR GPIO, которой нет в ESP32. В ESP32 контакты настроены следующим образом:

pinMode(sda, OPEN_DRAIN | PULLUP | INPUT | OUTPUT );

и

pinMode(scl, INPUT | PULLUP);

поэтому вы можете попробовать воспроизвести это в своем коде, но без флага PULLUP. Однако эффект от этого неизвестен, поэтому YMMV.

Однако, если ваши внешние отсоединения увеличиваются до 3,3 В, то вам действительно не нужно ничего делать на ESP32. Все, что у вас в итоге получится, - это большое сопротивление параллельно вашим 4,7 Ком, что просто приведет к небольшому снижению вашего сопротивления (а поскольку 4,7 Ком, возможно, слишком высоки в любом случае, это хорошо).

,

это 7 и 8 на Нано, @Juraj

@Juraj Нет, это SD0 и SD1, которые являются GPIO7 и 8 на esp32! Прочтите вопрос. Нано не имеет значения., @Majenko

да, извините, вы правы., @Juraj

@Majenco итак, как я мог бы использовать внешнее подтягивание 4.7 K, не вмешиваясь во внутренние компоненты esp32?, @daigs

@daigs, до какого напряжения ты поднимаешься?, @Majenko

@Majenaco хороший вопрос :-) У меня проблемы! Я пытаюсь отредактировать первый пост, чтобы получить от вас немного больше помощи по этому вопросу., @daigs