RisalDash RisalDash

Qoʻllanma · I²C · Debug

I²C sensor aniqlanmayaptimi? Mana yechim — tartib bilan

BME280 (yoki OLED, yoki MPU6050) ni uladingiz, skechni yozdingiz, javobiga esa — jimlik. Plata sensorni koʻrmayapti. Oʻntadan toʻqqizida aybdor toʻrtta narsadan biri, va ular toʻgʻri tartibda borilsa bir daqiqada tekshiriladi. ESP32, ESP8266 va Arduinoda bir xil ishlaydi.

I²CDebugTortuvchilarESP32ESP8266Arduino

Agar I²C simda aslida nima qilishini — START, ACK, taktni choʻzish — fizik jihatdan tushunmoqchi boʻlsangiz, interaktiv «bir bayt — olti shina» tahlilini koʻring. Bu post uning amaliy yarmi: shina jim, endi nima?

ESP32 bitta I²C shinasida BME280 va SSD1306 OLED bilan ulangan — SDA GPIO21 ga, SCL GPIO22 ga, umumiy 3V3 va GND
Sogʻlom I²C shinasi: BME280 (0x76) va SSD1306 (0x3C) bitta SDA/SCL juftini boʻlishadi — turli manzillar, ikki sim. BoardLabda yigʻilgan: pinlarni oʻzingiz torting va PNG eksport qiling.

1-qadam — avval doim shinani skanerlang

Hech qachon koʻr-koʻrona debug qilmang. Har bir I²C qurilma oʻzining 7-bitli manzilida javob beradi, va shinadan toʻgʻridan-toʻgʻri kim aloqada ekanini soʻrasa boʻladi. Buni yozing va Serial Monitor’ni 115200 da oching:

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin();               // ESP8266: D2/D1  ·  ESP32: 21/22  ·  Uno: A4/A5
}

void loop() {
  byte found = 0;
  Serial.println("Scanning I2C bus...");
  for (byte addr = 1; addr < 127; addr++) {
    Wire.beginTransmission(addr);
    if (Wire.endTransmission() == 0) {          // 0 = qurilma ACK bilan javob berdi
      Serial.printf("  found device at 0x%02X\n", addr);
      found++;
    }
  }
  Serial.println(found ? "done." : "No devices found — check wiring & pull-ups.");
  delay(3000);
}

Uch natija — uch tashxis:

Serial-kabel emas, veb-sahifadagi skanerni xohlaysizmi? RisalDash I2C-Scanner misoli har bir manzilni chip haqidagi taxmin bilan, brauzerda jonli koʻrsatadi.

2-qadam — tortuvchi rezistorlar (jim shinaning №1 sababi)

I²C chiqishlari ochiq stokli: qurilma liniyani faqat nolga tortib tushira oladi. Uni yana yuqoriga, mantiqiy birga qaytarib tortadigan narsa — bir juft tortuvchi rezistor: biri SDA’da, biri SCL’da, 3V3 ga. Ularsiz liniyalar «suzib yuradi», hech narsa yuqori daraja sifatida oʻqilmaydi, va skaner umuman hech narsa topmaydi.

Qiymat — bu murosa: kichikroq qarshilik = aniqroq frontlar, lekin koʻproq tok; datashit bo‘yicha chegara — shina sigʻimi (≤400 pF), va bu bizni keyingi tuzoqqa olib keladi.

3-qadam — uzun simlar I²C’ni oʻldiradi

I²C bitta plata’dagi mikrosxemalar uchun oʻylab topilgan — santimetrlar, metrlar emas. Har bir ortiqcha santimetr sim sigʻim qoʻshadi, koʻtarilish fronti yumshaydi, va ~400 pF dan keyin master 1 ni 0 dan farqlay olmaydi. Alomati: stolda ishlaydi, sensorni xona boʻylab tortsangiz — nosozlik boshlanadi.

4-qadam — ikki sensor, bitta manzil

Skaner qurilmani koʻradi, ammo ikkinchi xuddi shunday sensor koʻrinmaydi — chunki ular bitta qatʼiy manzilni boʻlishadi. Ikkita BME280 0x76 da javob beradi va bir-birini boʻgʻadi. Yechimlar:

Baribir jimmi? Odatdagi soʻnggi gumondorlar

Roʻyxatni yuqoridan pastga bajaring — skaner, tortuvchilar, sim uzunligi, manzillar, keyin mayda-chuydalar — va oʻlik I²C shina deyarli har doim bir necha daqiqada tiriladi.

Oʻz datchigingiz bilan sxema yigʻing va rasmni eksport qiling — brauzerda, Fritzingsiz.