ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» I2C стал стандартом Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для связи ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΌΠΈ устройствами β€” ΠΎΡ‚ простых Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π΄ΠΎ слоТных OLED-дисплССв. ESP32, благодаря своСй ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ этот ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» "ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ", Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ: устройства Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ, Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ошибками, ΠΈΠ»ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ вовсС "зависаСт". ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‡Π°Ρ‰Π΅ всСго кроСтся Π² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ с линиями SDA (Serial Data) ΠΈ SCL (Serial Clock).

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ β€” Π³Π΄Π΅ находятся ΠΏΠΈΠ½Ρ‹ SDA ΠΈ SCL Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… вСрсиях ESP32 (ΠΎΡ‚ ESP32-DevKitC Π΄ΠΎ ESP32-S3), Π½ΠΎ ΠΈ практичСскиС аспСкты: ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ рСзисторами, ΠΊΠ°ΠΊΠΈΠ΅ ошибки Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ 90% Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Wire.h, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° I2C-сканСр Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ устройства. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ особСнности ESP32 β€” возмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΠ½Ρ‹ I2C, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρ‹ для проСктирования схСм.

Распиновка SDA ΠΈ SCL Π½Π° ESP32: Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹

Один ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… вопросов, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ: "Π“Π΄Π΅ Π½Π° ΠΌΠΎΠ΅ΠΉ ΠΏΠ»Π°Ρ‚Π΅ ESP32 находятся SDA ΠΈ SCL?" ΠžΡ‚Π²Π΅Ρ‚ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ модуля. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ популярных ΠΏΠ»Π°Ρ‚ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

НапримСр, Π½Π° ESP32-DevKitC V4 (самой распространённой вСрсии) ΠΏΠΈΠ½Ρ‹ SDA ΠΈ SCL ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ располоТСны Π½Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°Ρ… GPIO21 ΠΈ GPIO22 соотвСтствСнно. Однако Π½Π° ESP32-WROOM-32 Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ DIP эти ΠΏΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½ΠΎΠΆΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, всСгда ΡΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ΡΡŒ с datasheet вашСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ‹.

  • πŸ”Ή ESP32-DevKitC: GPIO21 (SDA), GPIO22 (SCL)
  • πŸ”Ή ESP32-CAM: GPIO13 (SDA), GPIO14 (SCL) (Π½ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹)
  • πŸ”Ή ESP32-S3: GPIO8 (SDA), GPIO9 (SCL) ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  • πŸ”Ή TTGO T-Display: GPIO21/22, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ с дисплССм

Π’Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ESP32 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… I2C-ΠΏΠΎΡ€Ρ‚Π° (I2C0 ΠΈ I2C1), Π½ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ€Ρ‚ (GPIO19/18 ΠΈΠ»ΠΈ GPIO25/26 Π² зависимости ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ) часто занят flash-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΠΊΡ€Π°Ρ…Ρƒ систСмы.

πŸ“Š ΠšΠ°ΠΊΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρƒ ESP32 Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅?
  • ESP32-DevKitC
  • ESP32-CAM
  • ESP32-S3
  • TTGO T-Display
  • Другая

ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы: ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Π΅Π· Π½ΠΈΡ… I2C Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Одна ΠΈΠ· самых распространённых ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с I2C Π½Π° ESP32 β€” ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… рСзисторов Π½Π° линиях SDA ΠΈ SCL. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» I2C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΎΡ€ (open-drain), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… рСзисторов, ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π»ΠΈΠ½ΠΈΠΈ ΠΊ VCC, сигнал просто "провалится" Π² ноль.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ значСния рСзисторов β€” 4.7 кОм ΠΈΠ»ΠΈ 10 кОм, Π² зависимости ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΎΠ² ΠΈ количСства устройств Π½Π° шинС. Блишком Π½ΠΈΠ·ΠΊΠΎΠ΅ сопротивлСниС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1 кОм) ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅Π³Ρ€Π΅Π²Ρƒ ΠΈ искаТСнию сигнала, Π° слишком высокоС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 47 кОм) β€” ΠΊ Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π° высоких скоростях.

Π”Π»ΠΈΠ½Π° ΡˆΠΈΠ½Ρ‹ ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ устройств Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ рСзистор Макс. ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ
Π”ΠΎ 10 см 1-3 10 кОм 400 ΠΊΠ“Ρ†
10-50 см 3-10 4.7 кОм 100 ΠΊΠ“Ρ†
50-100 см 10+ 2.2 кОм 50 ΠΊΠ“Ρ†
Π‘ΠΎΠ»Π΅Π΅ 1 ΠΌ Π›ΡŽΠ±ΠΎΠ΅ 1 кОм + Π±ΡƒΡ„Π΅Ρ€Π½Ρ‹Π΅ микросхСмы 10 ΠΊΠ“Ρ†
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ESP32 с встроСнными ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ рСзисторами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… модулях Wemos D1 Mini ESP32), Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСзисторы ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ схСму вашСй ΠΏΠ»Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ°ΠΉΠΊΠΎΠΉ!

Настройка I2C Π² Arduino IDE: пошаговая инструкция

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с I2C Π½Π° ESP32 Π² Arduino IDE ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Wire.h. Однако просто ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‘ нСдостаточно β€” Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚ ΠΈ ΡƒΡ‡Π΅ΡΡ‚ΡŒ особСнности ΠΏΠ»Π°Ρ‚Ρ‹.

Π’ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ шаблон ΠΊΠΎΠ΄Π° для сканирования устройств Π½Π° шинС I2C:

#include <Wire.h>

void setup() {

Serial.begin(115200);

Wire.begin(); // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ I2C Π½Π° стандартных ΠΏΠΈΠ½Π°Ρ… (SDA=21, SCL=22 для ESP32-DevKitC)

}

void loop() {

byte error, address;

int nDevices = 0;

Serial.println("Π‘ΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ I2C...");

for(address = 1; address < 127; address++ ) {

Wire.beginTransmission(address);

error = Wire.endTransmission();

if(error == 0) {

Serial.print("Устройство Π½Π°ΠΉΠ΄Π΅Π½ΠΎ: 0x");

Serial.println(address, HEX);

nDevices++;

}

}

if(nDevices == 0) Serial.println("Устройства Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹");

delay(5000);

}

Если сканСр Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ устройства, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

  • πŸ”Œ ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ SDA/SCL (ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π½Π½Ρ‹Π΅ ΠΏΠΈΠ½Ρ‹ β€” частая ошибка!).
  • πŸ”„ НаличиС ΠΎΠ±Ρ‰Π΅Π³ΠΎ зазСмлСния (GND) ΠΌΠ΅ΠΆΠ΄Ρƒ ESP32 ΠΈ устройством.
  • πŸ”‹ НапряТСниС питания устройства (Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ 3.3V, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” 5V).
  • πŸ” ΠŸΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы (ΠΈΡ… отсутствиС β€” ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° 80% ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ).

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ SDA/SCL|

УстановлСны ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы|

ΠžΠ±Ρ‰ΠΈΠΉ GND ΠΌΠ΅ΠΆΠ΄Ρƒ ESP32 ΠΈ устройством|

ΠŸΠΈΡ‚Π°Π½ΠΈΠ΅ устройства соотвСтствуСт Π΄Π°Ρ‚Π°ΡˆΠΈΡ‚Ρƒ|

Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½ тСстовый скСтч для сканирования-->

ΠŸΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΈΠ½ SDA/SCL: ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ GPIO

Уникальная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ESP32 β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΠ½Ρ‹ для I2C. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΌΠΈ устройствами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с SPI-дисплССм ΠΈΠ»ΠΈ SD-ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ). Для этого Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Wire.begin() Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΈΠ½Ρ‹:

Wire.begin(19, 18); // SDA Π½Π° GPIO19, SCL Π½Π° GPIO18

Однако здСсь Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ:

  1. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с flash-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ: ΠŸΠΈΠ½Ρ‹ GPIO6-GPIO11 часто занят flash, ΠΈΡ… использованиС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ сбою.
  2. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΎΠΊΡƒ: НСкоторыС GPIO (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GPIO34-GPIO39) Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Π²Ρ…ΠΎΠ΄Ρ‹.
  3. АппаратныС ограничСния: I2C1 (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ€Ρ‚) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… модСлях ESP32.

Для Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ:

  • πŸ”Ή GPIO21/22 β€” стандартныС ΠΏΠΈΠ½Ρ‹, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ риск ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ².
  • πŸ”Ή GPIO19/18 β€” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ занят Π»ΠΈ GPIO18 подсвСткой.
  • πŸ”Ή GPIO25/26 β€” ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ESP32-WROOM, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ с DAC.
πŸ’‘

Если послС пСрСназначСния ΠΏΠΈΠ½ I2C пСрСстал Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ delay(100) послС Wire.begin() β€” это ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΠ½Ρƒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Π°Ρ….

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с I2C Π½Π° ESP32. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС сцСнарии ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если послС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ устройства ESP32 пСрСстаёт ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, скорСС всСго, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ адрСсов ΠΈΠ»ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π½Π° линиях SDA/SCL. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ всС устройства ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ†Π΅ΠΏΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ!
Π‘ΠΈΠΌΠΏΡ‚ΠΎΠΌ ВозмоТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
Устройство Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ сканСром ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ рСзисторы Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ рСзисторы 4.7 кОм ΠΊ VCC
ESP32 зависаСт ΠΏΡ€ΠΈ Wire.begin() ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΏΠΈΠ½ с flash-ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ GPIO (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 21/22)
Ошибки чтСния Π΄Π°Π½Π½Ρ‹Ρ… (NACK) Блишком высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΡˆΠΈΠ½Ρ‹ УстановитС Wire.setClock(100000) (100 ΠΊΠ“Ρ†)
ΠŸΠΎΠΌΠ΅Ρ…ΠΈ Π½Π° Π»ΠΈΠ½ΠΈΠΈ SDA/SCL Π”Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π° Π±Π΅Π· экранирования Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²ΠΈΡ‚ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ Π΄Π»ΠΈΠ½Ρƒ

Особого внимания заслуТиваСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с "зависаниСм" ESP32 ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с I2C. Часто это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ устройство Π½Π° шинС "зависаСт" ΠΈ Π½Π΅ отпускаСт линию SDA. Π’ этом случаС ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сброс ΡˆΠΈΠ½Ρ‹:

void i2c_reset() {

pinMode(SDA, INPUT_PULLUP);

pinMode(SCL, INPUT_PULLUP);

delay(10);

for(int i = 0; i < 9; i++) {

pinMode(SCL, OUTPUT);

digitalWrite(SCL, LOW);

delayMicroseconds(5);

pinMode(SCL, INPUT_PULLUP);

delayMicroseconds(5);

}

Wire.begin();

}

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ популярных Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ²

Рассмотрим ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Ρ‘Ρ… самых популярных I2C-устройств ΠΊ ESP32: Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ BME280, OLED-дисплСя SSD1306 ΠΈ гироскопа MPU6050. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ схСму ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄.

1. BME280 (Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π°, Π²Π»Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅)

  • πŸ”Ή ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: VCC β†’ 3.3V, GND β†’ GND, SDA β†’ GPIO21, SCL β†’ GPIO22.
  • πŸ”Ή Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: Adafruit_BME280 (установитС Ρ‡Π΅Ρ€Π΅Π· Library Manager).
  • πŸ”Ή ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: Π”Π°Ρ‚Ρ‡ΠΈΠΊ чувствитСлСн ΠΊ Π½Π°ΠΏΡ€ΡΠΆΠ΅Π½ΠΈΡŽ β€” Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ ΠΊ 5V!

2. SSD1306 (OLED-дисплСй 128x64)

  • πŸ”Ή ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Аналогично BME280, Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ адрСс (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 0x3C ΠΈΠ»ΠΈ 0x3D).
  • πŸ”Ή Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: Adafruit_SSD1306 + Adafruit_GFX.
  • πŸ”Ή ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: ДисплСй ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ устройствами Π½Π° шинС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Wire.setClock(400000) для ускорСния.

3. MPU6050 (гироскоп/аксСлСромСтр)

  • πŸ”Ή ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: VCC β†’ 5V (встроСнный рСгулятор), INT β†’ GPIO (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ).
  • πŸ”Ή Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°: MPU6050_light (лСгковСсная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° стандартной).
  • πŸ”Ή ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ: Π”Π°Ρ‚Ρ‡ΠΈΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ β€” Π±Π΅Π· Π½Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ.
ΠŸΠΎΡ‡Π΅ΠΌΡƒ MPU6050 Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния?

Если гироскоп Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠ»ΠΈ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

1. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ VCC (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 5V, Π° Π½Π΅ 3.3V).

2. НаличиС ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… рСзисторов (Π±Π΅Π· Π½ΠΈΡ… устройство ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ).

3. АдрСс устройства (ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ 0x68 ΠΈ 0x69 β€” ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠ° AD0 мСняСт послСдний Π±ΠΈΡ‚).

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° I2C Π½Π° ESP32

Для слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с большим количСством устройств Π½Π° шинС I2C Π²Π°ΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… совСтов:

1. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости ΡˆΠΈΠ½Ρ‹

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ESP32 Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° скорости 100 ΠΊΠ“Ρ†, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ устройства ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ 400 ΠΊΠ“Ρ† ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ 1 ΠœΠ“Ρ†. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ:

Wire.setClock(400000); // 400 ΠΊΠ“Ρ†

2. ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ устройств

Если Π½Π° шинС слишком ΠΌΠ½ΠΎΠ³ΠΎ устройств, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ I2C-ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TCA9548A). Он позволяСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ устройства Π½Π° нСсколько нСзависимых шин, управляСмых с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ESP32.

3. ЛогичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Если устройство Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ логичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Saleae ΠΈΠ»ΠΈ DSLogic) ΠΊ линиям SDA/SCL. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ:

  • πŸ”Ή ΠŸΠΎΡ‚Π΅Ρ€ΡŽ синхронизации (линия SCL "Π·Π°Π»ΠΈΠΏΠ°Π΅Ρ‚" Π² LOW).
  • πŸ”Ή ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ напряТСния (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 0V ΠΈ 3.3V).
  • πŸ”Ή ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ адрСсов (нСсколько устройств ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ адрСс).
πŸ’‘

ИспользованиС логичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° β€” СдинствСнный Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ способ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° физичСском ΡƒΡ€ΠΎΠ²Π½Π΅ I2C. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° слоТных схСм прСвращаСтся Π² "ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ‹ΠΊΠ°".

FAQ: ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

МоТно Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ 5V-устройства ΠΊ 3.3V ESP32?

Π”Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли устройство ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π½Ρ‹Π΅ ΠΊ 3.3V Π²Ρ…ΠΎΠ΄Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Arduino-совмСстимыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ). Для устройств, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… строго 5V Π½Π° SDA/SCL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TXB0104 ΠΈΠ»ΠΈ BSS138).

⚠️ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ 5V нСпосрСдствСнно ΠΊ GPIO ESP32 ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎΠΌΡƒ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°!

ΠŸΠΎΡ‡Π΅ΠΌΡƒ I2C-сканСр Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ устройство, Π½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… заканчиваСтся ошибкой?

Π­Ρ‚ΠΎ типичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ:

  • πŸ”Ή ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ устройства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Π±Π°ΠΉΡ‚).
  • πŸ”Ή Блишком высокой скорости ΡˆΠΈΠ½Ρ‹ (ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Wire.setClock(50000)).
  • πŸ”Ή ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ устройством Π½Π° шинС (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ адрСса).

РСшСниС: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Serial, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС происходит сбой.

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… I2C-устройств (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π²Π° BME280)?

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ I2C-устройств ΠΈΠΌΠ΅ΡŽΡ‚ фиксированный адрСс, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, BME280) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ SDO/SA0. Если адрСс ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

  • πŸ”Ή I2C-ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TCA9548A).
  • πŸ”Ή АппаратноС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ шин (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· транзисторныС ΠΊΠ»ΡŽΡ‡ΠΈ).
ESP32 Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ устройство послС ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  1. НС измСнились Π»ΠΈ ΠΏΠΈΠ½Ρ‹ SDA/SCL Π² Π½ΠΎΠ²ΠΎΠΌ скСтчС.
  2. НС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ Π»ΠΈ I2C с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SPI ΠΈΠ»ΠΈ UART).
  3. НС сбились Π»ΠΈ настройки Wire (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΡˆΠΈΠ½Ρ‹).

Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° остаётся, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ скСтч Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Wire ΠΈ сканСром.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ I2C ΠΈ SPI ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° ESP32?

Π”Π°, ESP32 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π°:

  • πŸ”Ή ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌΠΈ ΠΏΠΈΠ½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GPIO23 часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ для SPI, ΠΈ для I2C).
  • πŸ”Ή Уровнями напряТСния (Ссли SPI-устройство Π½Π° 5V, Π° I2C Π½Π° 3.3V).
  • πŸ”Ή Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ (одноврСмСнная Ρ€Π°Π±ΠΎΡ‚Π° с нСсколькими шинами ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π»Π°Π³ΠΈ).