RisalDash RisalDash

Loyiha · I2C · Sensorlar sinovi

Bitta ESP dashboardida to‘rtta I2C sensorni solishtiring — va ularning farqini ko‘ring

BME280, BMP280, AHT20 va HDC1080 bitta I2C shinasida o‘tiribdi. Har biri o‘z jonli qiymatini va trend grafigini yonma-yon oladi, shunda bir qarashda qaysi sensorlar mos kelishini — qaysilari yo‘qligini ko‘rasiz. Bulutsiz, ilovasiz. Bu sinovda HDC1080 undan 5 mm narida turgan BME280’ga nisbatan deyarli 10% yuqori namlik ko‘rsatdi.

BME280BMP280AHT20HDC1080I2CESP32 + ESP8266
RisalDash Sensor Compare dashboardi — BME280, BMP280, AHT20 va HDC1080 yonma-yon, har birida online LED, jonli harorat, namlik va bosim, hamda harorat trend grafigi
To‘rt sensor, bitta shina, bitta sahifa — ESP’ning o‘zi uzatadi, WebSocket orqali jonli.

Har bir harorat/namlik sensori datasheetida o‘z xatoligini e’lon qiladi, ammo halol sinov — bir nechtasini bir xil havoga qo‘yib, ularni bir xil lahzada o‘qishdir. Ushbu loyiha aynan shuni qiladi: to‘rtta ommabop I2C detali — BME280, BMP280, AHT20 va HDC1080 — bitta shinada, bitta ESP32 yoki ESP8266 va ularning barchasini bir vaqtda ko‘rsatadigan bitta veb-dashboard.

U RisalDash — bir nechta dash.metric(...) / dash.chart(...) chaqiruvidan adaptiv, jonli dashboard yasaydigan va uni platadan to‘g‘ridan-to‘g‘ri WebSocket orqali uzatadigan ochiq kodli Arduino kutubxonasi asosida qurilgan.

Raqamlar nima dedi

To‘rttasi ham birga onlayn bo‘ldi. Haroratlar zich edi — taxminan yarim gradus ichida. Namlik esa eng qiziq qismi bo‘ldi:

Sensor Manzil Harorat Namlik Bosim
BME280 0x76 28.5 °C 30.3 % 967 hPa
BMP280 0x77 29.0 °C 968 hPa
AHT20 0x38 28.6 °C 32.3 %
HDC1080 0x40 28.7 °C 39.7 %

BME280, BMP280 va AHT20 taxminan 30–32% nisbiy namlik atrofida to‘plandi. HDC1080 esa 39.7%da o‘tirdi — deyarli o‘n punkt yuqori. Hech qaysisi ochiqchasiga “noto‘g‘ri” emas: bu aynan sensorlarni bir havoda solishtirganingizdagina ilg‘aydigan nusxadan-nusxaga siljishdir. Bu, shuningdek, yalang‘och bitta modulga ishonish emas, etalonga qarab kalibrlash foydasiga zo‘r dalil. Ikki bosim sensori (BME280 vs BMP280) 1 hPa ichida mos keldi.

Temir qism

Breadboarddagi to‘rtta I2C sensor breakout platasi — BME280, BMP280 va AHT20 binafsha modullar hamda HDC1080, barchasi umumiy SDA/SCL orqali kichik ESP platasiga ulangan
To‘rttala modul breadboardda bir xil SDA, SCL, 3V3 va GND liniyalarini bo‘lishadi.

Ulanish shundan oddiyroq bo‘lmaydi: har bir sensor bir xil to‘rtta simni bo‘lishadi — SDA, SCL, 3V3 va GND. I2C’ning butun mohiyati shu. ESP8266da shina — SDA = D2 (GPIO4), SCL = D1 (GPIO5); ESP32da esa — GPIO21 / GPIO22. Har bir qurilma o‘z manzilida javob beradi, shuning uchun ikki detal bittasini bo‘lishmasa, ziddiyat yo‘q — bu yerda to‘rttasi ham har xil.

SI7021 / HTU21D / SHT21 / SHT20 / HDC1080 deb belgilangan binafsha I2C namlik sensori breakoutining yaqindan surati — bu chiplarning istalganini ko‘tara oladigan bitta plata; bu esa 0x40 manzilidagi HDC1080
Bitta plata, beshta nom. Bu binafsha breakoutlarda SI7021 / HTU21D / SHT21 / SHT20 / HDC1080 deb belgilangan — bu esa 0x40dagi HDC1080.

Bu belgi klassik tuzoq: bir xil PCB beshta har xil chipdan biri o‘rnatilgan holda sotiladi, va ular har xil drayverlardan foydalanadi. Nima olganingizga ishonchingiz komil bo‘lmasa, hamroh I2C Scanner misoli shinadagi har bir manzilni chip haqidagi eng yaxshi taxmin bilan chop etadi — platani ulang, u aytib beradi.

Kod

Dashboard deklarativ. Har bir sensor kichik blok — online LED, bir juft metrika va trend grafigi, — RisalDash esa ularni joylashtiradi va qiymatlarni jonli uzatadi:

#include <RisalDash.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_AHTX0.h>
#include <ClosedCube_HDC1080.h>

RisalUI dash("Sensor Compare");

void setup() {
  Wire.begin();                       // ESP8266: D2/D1  ·  ESP32: 21/22
  bmeOK = bme.begin(0x76);            // avto-aniqlash: ulading — u onlayn bo‘ladi
  bmpOK = bmp.begin(0x77);
  ahtOK = aht.begin();                // 0x38
  hdcOK = i2cPresent(0x40);

  dash.separator("BME280 · 0x76");
  dash.led("BME280 online", &bmeOK);
  dash.metric("BME280 temp", &bmeT, "°C").decimals(1);
  dash.chart("BME280 temp trend", &bmeT, "°C");
  dash.metric("BME280 humidity", &bmeH, "%").decimals(1);
  // ...yana uchta blok: BMP280, AHT20, HDC1080

  dash.enableOTA();
  dash.apName("SensorCompare");
  dash.begin();                       // captive portal, keyin Wi-Fi’ingizga ulanadi
}

Sensorlar avtomatik aniqlanadi: begin() chip javob berganini qaytaradi, va aynan shu bul qiymat kartadagi “online” LED’ini boshqaradi. Sensorni shinadan ajratib oling — uning kartasi shunchaki offline ko‘rsatadi, qolganlari ishlashda davom etadi. Qiymatlarni har ikki soniyada loop()da isnan() tekshiruvlari bilan o‘qing, va har bir ochiq brauzer bir vaqtda yangilanadi.

Wi-Fi sozlash — har bir RisalDash loyihasidagidek

Kodga hech narsa qattiq yozib qo‘yishning hojati yo‘q. Birinchi yoqilganda plata saqlangan tarmoqni topa olmaydi, shuning uchun SensorCompare nomli captive-portalli kirish nuqtasini ko‘taradi. Telefoningizni unga ulang, sozlash sahifasi o‘zi ochiladi, uy Wi-Fi’ingizni tanlaysiz va parolni kiritasiz. ESP ma’lumotlarni saqlaydi, qayta yuklanadi va shu ondan boshlab tarmog‘ingizga o‘zi ulanadi — dashboard lokal tarmoqdagi o‘z IP’sida kutib turadi. Hammasini qurilmaning o‘zi uzatadi; hech narsa bulutga tegmaydi va o‘qishlaringiz tarmog‘ingizdan chiqib ketmaydi.

dash.enableOTA() yoqilgani uchun keyingi proshivkalar brauzerdan havo orqali ketadi — birinchi quyishdan keyin USB-kabelsiz.

Umuman nega solishtirish kerak?

Agar issiqxona, server xonasi yoki terrarium ma’lumotlarini yozayotgan bo‘lsangiz, 10% namlik farqi “normal” va “xavf” o‘rtasidagi farqdir. Bir nechta sensorni birga kuzatish sizga qaysiga ishonishni, modul siljib ketayotgan-ketmayotganini va yangi detal bir yildan beri ishlab kelayotgani bilan qanchalik farq qilishini aytib beradi. Bu — eng arzon kalibrovka tekshiruvi va chinakam yoqimli jonli dashboard.

ESP32 & ESP8266 uchun to‘liq, build-sinovdan o‘tgan manba kodi.