Подключите 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 в качестве мастера.
- Спасибо.
@daigs, 👍-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
- Как выбрать альтернативные контакты I2C на ESP32?
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- PN532 не обнаруживает RFID-карту при подключении к ESP32 в режиме I2C, но отлично работает с Arduino Uno
- Как закрыть/закончить Wire.begin()?
- Лучший способ отправки команд I2C между Arduino и ESP32
- Не могу отключить внутренний интерфейс I2C подтягиваний на ESP32
- DS3231 RTC не работает с ESP32
- Как установить подсветку дисплея 16x2 LCD I2C?
Как я знаю, проводная библиотека-это аппаратная библиотека I2C, а не программное обеспечение. Аппаратное обеспечение I2C привязано к специальным выводам. И почему вы пытаетесь вытащить обе линии до минимума через digitalWrite?, @chrisl
Я бы потянул низко две линии, чтобы устранить внутренние резисторы arduino pull up из схемы, используя esternal. Я не знаю, могу ли я сделать то же самое на стороне esp32., @daigs
Если вы используете аппаратное обеспечение I2C на Nano, линии ничего не сделают, так как контакты управляются аппаратным обеспечением I2C, а не цифровым выходом. Если вы используете программное обеспечение I2C, контакты будут контролироваться библиотекой. Выполнение digitalWrite отключит внутренние pullup на данный момент, но как только библиотека примет меры, pins будут установлены в состояние библиотек по умолчанию (скорее всего, с включенным pullup, но не гарантированным). Поэтому я думаю, что эти линии не выполняют функцию на Arduino., @chrisl