Как выбрать альтернативные контакты I2C на ESP32?
Я новичок в Arduino, и это может быть основной вопрос, но я столкнулся с проблемой.
Я использую датчик HTU21D с ESP32. Этот датчик использует связь I2C. Внутри библиотеки Arduino есть эта функция, чтобы начать собирать данные:
//Start I2C communication
void HTU21D::begin(TwoWire &wirePort)
{
_i2cPort = &wirePort; //Какой порт пользователь хочет, чтобы мы использовали
_i2cPort->begin();
}
Как видите, мы можем задать в этой функции, какой порт мы хотим использовать. Идеальный. Но моя проблема в том, что я не знаю, как использовать тип TwoWire. Я проверил кое-какую документацию, но так и не смог найти решение. Я хочу использовать GPIO_16 как SDA и GPIO_17 как SCL.
Поэтому я попробовал что-то подобное безрезультатно: htu21d.begin(Wire(16, 17));
Как установить вывод SDA и SCL в двухпроводном типе ? (в моем случае GPIO_16 и GPIO_17)
@Gazouu, 👍8
Обсуждение2 ответа
Лучший ответ:
Я смог решить свою проблему благодаря комментарию Юрая. Я так и сделал :
Wire.begin(16, 17);
htu21d.begin(Wire);
у меня тоже получилось, спасибо, Wire.begin(SDA, SCK);
для библиотеки ssd1306 для oled ., @alireza
Некоторые контакты ESP32 не поддерживают SPI. Вы можете использовать контакты 11,12,13,18,23,24,25,26,29 и 30 только как SDA или SCK., @Georgi Peev
Вот пример того, как вы можете изменить контакты esp8266 i2c. Я использовал его для своих ESP8266 и bme280, но то же самое для Arduino и других датчиков.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
void setup() {
Wire.pins(12,2); //новые контакты SDA SCL (D6 и D4 для esp8266)
Serial.begin(115200);
delay(100);
bme.begin(0x76, &Wire); //вот адрес моего bme280 и экземпляра объекта TwoWire
}
Для моего ESP8266 я попытался использовать GPIO0 для SDA и GPIO2 для SCL, но безуспешно. Вероятно, потому, что GPIO0-это флэш-пин. Мне помогло изменение SDA на GPIO12 (или D6 pin).
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Одинаковый вывод на дисплеях с разными I2C-адресами (библиотека AdaFruit, ESP32)
- Адрес TTGO TS I2C
- Отправка и получение различных типов данных через I2C в Arduino
- Альтернативы библиотеке Wire для I2C
- Библиотека Wire.h работает на Uno, но не компилируется для ATtiny85
- PN532 не обнаруживает RFID-карту при подключении к ESP32 в режиме I2C, но отлично работает с Arduino Uno
- Лучший способ отправки команд I2C между Arduino и ESP32
вы пробовали
htu21d.begin(Wire);
?Wire
- это объект, экземпляр класса TwoWire. он определяется в Wire.h в конце, @JurajНо как мне сказать Wire, что я хочу использовать pin 16 как SDA и pin 17 как SCL ?, @Gazouu
нашел это
void TwoWire::begin(int sdaPin, int sclPin, uint32_t frequency)
здесь https://github.com/espressif/arduino-esp32/blob/master/libraries/Wire/src/Wire.cpp#L49-L63, @jsotolaвы звоните по проводу., @Juraj