مشروع · I2C · اختبار حساسات
قارِن أربعة حساسات I2C على لوحة معلومات ESP واحدة — وشاهدها تتباعد
تتشارك حساسات BME280 و BMP280 و AHT20 و HDC1080 ناقل I2C واحدًا. لكلٍّ منها قيمته الحيّة و رسمٌ بيانيٌّ للاتجاه، جنبًا إلى جنب، لترى بنظرة واحدة أيّ الحساسات تتوافق — وأيّها لا. دون سحابة، دون تطبيق. في هذا التشغيل قرأ الـ HDC1080 رطوبة أعلى بنحو 10% من الـ BME280 الجالس على بُعد 5 مم منه.
كل حساس حرارة/رطوبة يعلن هامش خطأه في ورقة البيانات، لكن الاختبار الصادق هو وضع عدّة منها في الهواء نفسه وقراءتها في اللحظة نفسها. هذا المشروع يفعل ذلك بالضبط: أربع قطع I2C شائعة — BME280 وBMP280 وAHT20 وHDC1080 — على ناقل واحد، وESP32 أو ESP8266 واحد، ولوحة معلومات ويب واحدة تُظهرها جميعًا في آنٍ معًا.
مبنية بـ RisalDash، وهي مكتبة Arduino مفتوحة المصدر تحوّل بضع استدعاءات
dash.metric(...) / dash.chart(...) إلى لوحة معلومات حيّة
ومتجاوبة تُقدَّم مباشرةً من اللوحة عبر WebSocket.
ماذا قالت الأرقام
اتصلت الأربعة معًا. كانت درجات الحرارة متقاربة — ضمن نصف درجة تقريبًا. أما الرطوبة فكانت الجزء المثير للاهتمام:
| الحساس | العنوان | الحرارة | الرطوبة | الضغط |
|---|---|---|---|---|
| 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 و AHT20 حول 30–32% رطوبة نسبية. أما الـ HDC1080 فاستقرّ عند 39.7% — أعلى بنحو عشر نقاط. لا يمكن القول إنّ أيًّا منها «خاطئ» بوضوح: هذا بالضبط نوع الانزياح بين النسخ الذي لا تكتشفه إلا بمقارنة الحساسات في النَّفَس نفسه. وهو أيضًا حجّة قوية لصالح المعايرة مقابل مرجع بدلًا من الوثوق بوحدة عارية واحدة. وقد توافق حساسا الضغط (BME280 مقابل BMP280) ضمن 1 hPa.
العتاد
- ESP8266 (Wemos D1 mini) أو ESP32 — ~$3–5
- BME280 (0x76)، BMP280 (0x77)، AHT20 (0x38)، HDC1080 (0x40) — بضعة دولارات لكلٍّ منها
- لوحة تجارب وأسلاك توصيل
التوصيل في غاية البساطة: كل حساس يتشارك الأسلاك الأربعة نفسها — SDA و SCL
و 3V3 و GND. هذا هو جوهر I2C بأكمله. على ESP8266 يكون الناقل
SDA = D2 (GPIO4)، SCL = D1 (GPIO5)؛ وعلى ESP32 يكون
GPIO21 / GPIO22. يستجيب كل جهاز على عنوانه الخاص، فلا يقع تعارض ما لم تتشارك
قطعتان عنوانًا واحدًا — وهنا الأربعة مختلفة.
0x40.هذه الطباعة فخّ كلاسيكي: تُباع اللوحة نفسها مركّبةً بأيٍّ من خمس رقائق مختلفة، وهي تستخدم مشغّلات مختلفة. إن لم تكن متأكدًا مما لديك، فإنّ المثال المرافق I2C Scanner يطبع كل عنوان على الناقل مع تخمين أفضل للرقاقة — وصِّل اللوحة وسيخبرك.
الكود
لوحة المعلومات تصريحية. كل حساس هو كتلة صغيرة — مؤشّر LED للاتصال، وبضع مقاييس ورسم بياني للاتجاه — و RisalDash يرتّبها ويبثّ القيم حيّةً:
#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); // كشف تلقائي: وصِّله، يتصل من تلقائه
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);
// ...ثلاث كتل أخرى: BMP280 و AHT20 و HDC1080
dash.enableOTA();
dash.apName("SensorCompare");
dash.begin(); // بوابة أسر، ثم ينضم إلى شبكة Wi-Fi لديك
} تُكتشف الحساسات تلقائيًّا: يُرجع begin() ما إذا كانت الرقاقة قد
استجابت، والقيمة المنطقية نفسها تقود مؤشّر LED «online» على البطاقة. انزع حساسًا عن الناقل
فتُظهر بطاقته ببساطة offline — وتستمر البقية في العمل. اقرأ القيم كل ثانيتين في
loop() مع فحوص isnan()، وسيتحدّث كل متصفّح مفتوح دفعةً واحدة.
إعداد Wi-Fi — تمامًا كما في كل مشاريع RisalDash
لا شيء يُدرَج في الكود مباشرةً. عند أول إقلاع لا تجد اللوحة شبكة محفوظة، فترفع
نقطة وصول ببوابة أسر باسم SensorCompare. وصِّل هاتفك بها،
فتظهر صفحة الإعداد تلقائيًّا، تختار شبكة Wi-Fi المنزلية وتدخل كلمة المرور. يحفظ الـ ESP
البيانات، ويُعيد الإقلاع، ومن تلك اللحظة ينضم إلى شبكتك من تلقائه — ولوحة
المعلومات تنتظر على عنوان IP الخاص به في شبكتك المحلية. كل شيء يُقدّمه الجهاز نفسه؛ لا شيء
يمسّ سحابة، وقراءاتك لا تغادر شبكتك أبدًا.
ولأنّ dash.enableOTA() مفعّل، تجري عمليات التحديث اللاحقة للبرنامج الثابت عبر
الأثير من المتصفّح — دون كابل USB بعد أول تحميل.
ولماذا نقارن أصلًا؟
إن كنت تسجّل بيانات دفيئة أو غرفة خوادم أو حوض زواحف، فانزياح رطوبة بنسبة 10% هو الفرق بين «طبيعي» و«إنذار». مراقبة عدّة حساسات معًا تخبرك أيّها تثق به، وهل تنجرف وحدة ما، ومقدار اختلاف قطعة جديدة عن أخرى تعمل منذ عام. إنها أرخص فحص معايرة موجود — وتصنع لوحة معلومات حيّة مُرضية حقًّا.
مصدر كامل ومُختبَر البناء لأجهزة ESP32 & ESP8266.