جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
كنت أرغب في الحصول على محطة طقس منزلية لبعض الوقت ، بحيث يمكن لكل فرد في العائلة التحقق بسهولة من درجة الحرارة والرطوبة. بالإضافة إلى مراقبة الظروف الخارجية ، كنت أرغب في مراقبة غرف معينة في المنزل وكذلك ورشة المرآب الخاصة بي. سيتيح لنا ذلك معرفة الوقت المناسب لتهوية المنزل أو تشغيل جهاز إزالة الرطوبة (تمطر كثيرًا هنا خلال فصل الشتاء). ما قمت بإنشائه هو نظام استشعار قائم على ESP-Now يقدم تقارير إلى خادم ويب محلي يمكن لأي شخص التحقق منه من جهاز الكمبيوتر أو الهاتف. بالنسبة للهاتف ، كتبت كتطبيق Android بسيط لجعل ذلك أسهل.
الخطوة 1: تفاصيل التصميم
كنت أرغب في الحصول على العديد من محطات الاستشعار التي يمكنني وضعها في مواقع مختلفة وجعلها تقدم تقارير إلى محطة رئيسية واحدة (أو محور) من شأنها حفظ المعلومات. بعد تجربة العديد من الأفكار ، قررت استخدام بروتوكول Espressif's ESP-Now ، لأنه يسمح بالاتصال السريع مباشرة بين الأجهزة. يمكنك أن تقرأ قليلاً عن ESP-Now هنا وكان GitHub repo جزءًا كبيرًا من إلهامي.
توضح الصورة الأولى تخطيط النظام. يقوم كل جهاز استشعار بالإبلاغ عن قياساته إلى جهاز بوابة يقوم بإعادة توجيه البيانات إلى الخادم الرئيسي عن طريق الاتصال التسلسلي السلكي الثابت. والسبب في ذلك هو أن بروتوكول ESP-Now لا يمكن أن يكون نشطًا في نفس وقت اتصال WIFI. لكي يتمكن المستخدم من الوصول إلى صفحة الويب ، يجب أن يكون WIFI قيد التشغيل في جميع الأوقات ، مما يجعل من المستحيل استخدام اتصالات ESP-Now على نفس الجهاز. في حين أن جهاز البوابة يجب أن يكون جهازًا قائمًا على Espressif (قادر على ESP-Now) ، يمكن أن يكون الخادم الرئيسي أي جهاز قادر على تشغيل صفحة ويب.
تعمل بعض محطات الاستشعار على تشغيل البطاريات (أو البطاريات المشحونة بالطاقة الشمسية) والبعض الآخر يحتوي ببساطة على طاقة رئيسية. ومع ذلك ، أردت أن يستخدم الجميع أقل قدر ممكن من الطاقة وهذا هو المكان الذي تكون فيه ميزة "النوم العميق" المتاحة لأجهزة ESP8266 و ESP32 مفيدة للغاية. ستستيقظ محطات الاستشعار بشكل دوري ، وتأخذ القياسات وترسلها إلى جهاز البوابة وتعود إلى النوم لبعض الوقت المبرمج مسبقًا. فترة الاستيقاظ التي تبلغ 300 مللي ثانية فقط كل 5 دقائق (في حالتي) تقلل من استهلاك الطاقة بشكل كبير.
الخطوة الثانية: المستشعرات
هناك العديد من أجهزة الاستشعار للاختيار من بينها لقياس المعلمات البيئية. قررت التمسك بأجهزة استشعار قادرة على الاتصالات I2C فقط ، لأنها تسمح بالقياسات السريعة وستعمل على أي من الأجهزة التي أمتلكها. بدلاً من العمل مع الدوائر المتكاملة بشكل مباشر ، بحثت عن وحدات جاهزة للاستخدام تحتوي على نفس نقاط التثبيت لتبسيط تصميماتي. لقد بدأت بالرغبة فقط في قياس درجة الحرارة والرطوبة ، وبالتالي اخترت وحدة تعتمد على SI7021. أردت لاحقًا جهاز استشعار يمكنه قياس الضغط أيضًا وقررت تجربة وحدات الاستشعار القائمة على BME280. بالنسبة لبعض المواقع ، كنت أرغب حتى في مراقبة مستويات الإضاءة وكانت وحدة BH1750 مثالية لهذا كوحدة مستشعر منفصلة. اشتريت وحدات الاستشعار الخاصة بي من موقع ئي باي وهذه هي الوحدات التي تلقيتها:
- BME280 (GY-BMP / E280) ، يقيس درجة الحرارة والرطوبة والضغط
- SI7021 (GY-21) ، يقيس درجة الحرارة والرطوبة
- BH1750 (GY-302) ، يقيس الضوء
هناك نوعان من وحدات GY-BMP / E280 PCB يمكن العثور عليها. كلاهما يشتركان في نفس الدبوس للخارج من 1 إلى 4. وحدة واحدة بها دبابيس إضافية ، CSB و SDO. هذان الطرفان متصلان مسبقًا بالإصدار ذي 4 سنون للوحدة. يحدد مستوى دبوس SDO عنوان I2C (الأرضي = افتراضي 0x76 ، VCC = 0x77). يجب توصيل دبوس CSB بـ VCC لتحديد واجهة I2C. أنا أفضل وحدة 4 دبوس ، لأنها جاهزة للاستخدام كما هو لغرضي.
بشكل عام ، هذه الوحدات ملائمة جدًا للاستخدام نظرًا لأنها تحتوي بالفعل على مقاومات سحب مثبتة لخطوط الاتصالات وتعمل جميعها على 3.3 فولت ، لذا فهي متوافقة مع اللوحات القائمة على ESP8266. لاحظ أن المسامير الموجودة على أجهزة الاستشعار هذه ليست متسامحة بشكل عام مع 5 فولت ، لذا فإن ربطها مباشرة بشيء مثل Arduino Uno قد يؤدي إلى إتلافها بشكل دائم.
الخطوة الثالثة: محطات الاستشعار
كما ذكرنا ، ستكون جميع محطات الاستشعار عبارة عن أجهزة Espressif تستخدم بروتوكول اتصالات ESP-Now. من المشاريع والتجارب السابقة ، كان لدي العديد من الأجهزة المختلفة المتاحة لي لإجراء اختباراتي الأولية ودمجها في التصميم النهائي. كان لدي الأجهزة التالية في متناول اليد:
- وحدتان من وحدات ESP-01
- اثنين من لوحات التطوير المصغرة Wemos D1
- لوحات تطوير Lolin ESP8266 واحدة
- واحد ESP12E المسلسل لوحة عدة WIFI
- لوحة GOOUUU ESP32 واحدة (لوحة تطوير ذات 38 دبوسًا)
كان لدي أيضًا لوحة تطوير Wemos D1 R2 ، ولكن كانت هناك مشكلات معها لم تسمح لها بالاستيقاظ من النوم العميق وكجهاز طريق بوابة ، فإنه سيتعطل ولا يُعاد تشغيله بشكل صحيح. لقد أصلحته لاحقًا وأصبح جزءًا من مشروع فتح باب المرآب. لكي يعمل "النوم العميق" ، يجب توصيل دبوس RST الخاص بـ ESP8266 بمسمار GPIO16 ، حتى يتمكن مؤقت السكون من إيقاظ الجهاز. من الناحية المثالية ، يجب إجراء هذا الاتصال باستخدام صمام ثنائي شوتكي (كاثود إلى GPIO16) حتى تظل عملية إعادة الضبط اليدوية من خلال اتصال USB-TLL أثناء البرمجة تعمل. ومع ذلك ، يمكن أن يظل المقاوم ذو القيمة المنخفضة (300 أوم) أو حتى اتصال الأسلاك المباشر ناجحًا.
لا تسمح وحدات ESP-01 بالوصول السهل إلى دبوس GPIO16 ويجب على المرء اللحام مباشرة إلى IC. هذه ليست مهمة بسيطة ولن أوصي بهذا للجميع. كانت لوحة مجموعة WIFI التسلسلية ESP12E عنصرًا جديدًا إلى حد ما وتطلبت بعض التغييرات حتى تكون مفيدة لغرضي. أسهل اللوحات المستخدمة هي لوحات Wemos D1 المصغرة ولوحة Lolin. لا تتطلب أجهزة ESP32 أي تعديلات حتى يعمل النوم العميق. أندرياس سبيس لديه تعليمات لطيفة حول هذا الموضوع.
الخطوة 4: محطة الاستشعار ESP-01
في جميع محطات الاستشعار ، يتم تثبيت وحدات الاستشعار عموديًا لتقليل كمية الغبار التي يمكن أن تتجمع عليها. ليست كلها في حاويات وقد لا أقوم بتركيبها في حاويات. والسبب في ذلك هو أن الأجهزة قد ترتفع درجة حرارتها وتؤثر على قراءات درجة الحرارة والرطوبة في حالة عدم التهوية الكافية.
لوحات ESP-01 مضغوطة للغاية وتحتوي على عدد قليل من دبابيس الإدخال والإخراج الرقمية للعمل معها ، ولكنها كافية لواجهة I2C. ومع ذلك ، تتطلب الألواح تعديلاً مخادعًا للسماح "للنوم العميق" بالعمل. في الصورة الموضحة ، تم لحام سلك من دبوس الزاوية (GPIO16) إلى دبوس RST في الرأس. السلك الذي استخدمته هو سلك "إصلاح" معزول بقطر 0.1 مم. يذوب طلاء العزل عند التسخين ، لذلك يمكن لحامه لإصلاح الآثار ، وما إلى ذلك في ثنائي الفينيل متعدد الكلور ولا يزال لا داعي للقلق بشأن إنشاء شورتات حيث يتصل السلك بالمكونات الأخرى. يجعل حجمه من الصعب العمل معه وقد قمت بلحام هذا السلك في مكانه تحت مجهر (أسلوب الهواة / جامعي الطوابع). ضع في اعتبارك أن الرأس على الجانب الأيمن به تباعد بين المسمار 0.1 بوصة (2.54 مم). لن يكون تثبيت صمام ثنائي شوتكي هنا أمرًا سهلاً على الإطلاق ، لذلك قررت فقط تجربة السلك بمفرده وقد تم تشغيل كلتا الوحدتين لأكثر من شهر بدون أي مشاكل.
تم تثبيت الوحدات على لوحين نموذجيين قمت بإنشائهما. واحد (# 1) هو لوحة مبرمج تسمح أيضًا بتثبيت واختبار وحدات I2C ، بينما الأخرى (# 2) هي لوحة تطوير / اختبار لأجهزة I2C. بالنسبة للوحة الأولى ، قمت بتوصيل موصل ذكر قديم USB و PCB صغير لتشغيل الوحدة مباشرة من محول حائط USB. تحتوي الوحدة الأخرى على مقبس تيار مستمر منتظم تم تعديله ليناسب رأس طرف المسمار ويتم تشغيله عبر محول حائط أيضًا.
يوضح التخطيط كيف يتم توصيلهم وكيف يعمل المبرمج. ليس لدي أي وحدات ESP-01 أخرى ، لذلك لم يكن لدي أي حاجة فورية للمبرمج. في المستقبل ، من المحتمل أن أصنع ثنائي الفينيل متعدد الكلور لهم. تحتوي كلتا اللوحتين على وحدة استشعار SI7021 مثبتة لأنني لم أكن مهتمًا بقياسات الضغط في تلك المواقع.
الخطوة 5: ESP 12E Serial WIFI Kit Sensor Station
لم تكن لوحة ESP12E Serial WIFI Kit للتطوير بقدر ما كانت مخصصة لعرض ما يمكن القيام به باستخدام هذا الجهاز. اشتريتها منذ فترة طويلة لأتعلم قليلاً عن برمجة ESP8266 وقررت أخيرًا منحها بعض الاستخدامات الجديدة. أزلت جميع مصابيح LED التي تم تثبيتها من أجل العروض التوضيحية وأضفت رأس برمجة USB بالإضافة إلى رأس I2C المناسب للوحدات النمطية التي أستخدمها. كان يحتوي على مقاوم للصور CdS متصل بدبوس الإدخال التناظري الخاص به وقررت تركه هناك. كانت هذه الوحدة الخاصة ستراقب ورشة الجراج الخاصة بي ومستشعر الصور الذي كان كافياً لإخباري إذا تم ترك الأضواء عن طريق الخطأ. بالنسبة لقياس الضوء ، قمت بتطبيع القراءات لإعطائي نسبة مئوية من الإخراج وأي شيء يزيد عن "5" في الليل يعني ترك الأضواء مضاءة أو أن باب المنزل لم يتم إغلاقه بشكل صحيح. تم وضع علامات واضحة على دبابيس RST و GPIO16 على PCB وتم تثبيت الصمام الثنائي Schottky الذي يربط بينهما على الجانب السفلي من PCB. يتم تشغيله من خلال لوحة USB التسلسلية التي يتم توصيلها مباشرة بشاحن حائط USB. لديّ إضافات من لوحات USB التسلسلية ولست بحاجة إلى هذه في الوقت الحالي.
لم أقم بعمل تخطيطي لهذه اللوحة ولا أنصح عمومًا بشراء واحدة لاستخدامها لهذا الغرض. تعد لوحات Wemos D1 Mini أكثر ملاءمة وستتم مناقشتها بعد ذلك. على الرغم من أنه إذا كان لديك واحد من هؤلاء وتحتاج إلى بعض النصائح ، فسيسعدني تقديم المساعدة.
الخطوة 6: محطات الاستشعار الصغيرة D1
إن نوع Wemos D1 Mini من لوحات التطوير ESP8266 هو المفضل لدي لاستخدامه ، وإذا اضطررت إلى القيام بذلك مرة أخرى ، فسأستخدمها فقط. لديهم عدد كبير من دبابيس IO التي يمكن الوصول إليها ، ويمكن برمجتها مباشرة عبر Arduino IDE ولا تزال مضغوطة إلى حد ما. دبوس D0 هو GPIO16 على هذه اللوحات ومن السهل جدًا توصيل الصمام الثنائي Schottky. يوضح التخطيط كيف تم توصيل هذه اللوحات بالأسلاك وكلاهما يستخدم وحدة استشعار BME2808.
تستخدم إحدى اللوحتين لمراقبة الطقس الخارجي وتعمل من بطارية تعمل بالطاقة الشمسية. يتم توصيل لوحة شمسية 165 مم × 135 مم (6 فولت ، 3.5 واط) بوحدة شحن بطارية ليثيوم أيون TP4056 (انظر الرسم التخطيطي لإعداد محطة مستشعر البطارية بالطاقة الشمسية). تتميز وحدة الشحن الخاصة هذه (03962A) بدائرة حماية البطارية والتي تكون ضرورية إذا كانت البطارية (العبوة) لا تحتوي على واحدة. تم إعادة تدوير بطارية Li-ion من حزمة بطارية كمبيوتر محمول قديمة ولا يزال بإمكانها الاحتفاظ بشحن كافٍ لتشغيل لوحة D1 Mini ، خاصةً مع تمكين النوم العميق. تم وضع اللوحة في حاوية بلاستيكية لإبقائها آمنة إلى حد ما من العناصر. ومع ذلك ، من أجل تعريض المقصورة الداخلية لدرجة الحرارة والرطوبة الخارجية ، تم حفر فتحتين قطرهما 25 مم على الجانبين المتقابلين وتغطيتهما (من الداخل) بقطعة قماش سوداء اللون. تم تصميم قطعة القماش للسماح للرطوبة بالتغلغل وبالتالي يمكن قياس الرطوبة. في أحد طرفي العلبة ، تم حفر ثقب صغير وتركيب نافذة بلاستيكية شفافة. هذا هو المكان الذي تم فيه وضع وحدة مستشعر الضوء BH1750. يتم وضع الوحدة بأكملها في الخارج في الظل (وليس أشعة الشمس المباشرة) مع توجيه مستشعر الضوء إلى العراء. لقد تم تشغيله من بطارية تعمل بالطاقة الشمسية لما يقرب من 4 أسابيع في طقس الشتاء الممطر / الغائم هنا.
الخطوة 7: البوابة وخادم الويب
تم استخدام لوحة Lolin NodeMCU V3 (ESP8266) لجهاز ESP-Now Gateway واستخدمت ESP32 (لوحة GOOUUU) لخادم الويب. كان من الممكن أن تكون أي لوحة ESP8266 أو حتى لوحة ESP32 بمثابة جهاز بوابة ، وكان هذا ببساطة هو اللوحة التي تركتها بعد أن استخدمت جميع اللوحات الأخرى التي أمتلكها.
لقد استخدمت لوحة ESP32 لأنني بحاجة إلى لوحة تتمتع بقوة حوسبة أكبر قليلاً لجمع البيانات وفرزها وحفظها في التخزين وتشغيل خادم الويب. في المستقبل ، قد يكون لها أيضًا جهاز استشعار خاص بها وشاشة (OLED) محلية. للتخزين ، تم استخدام بطاقة SD مع محول مخصص. لقد استخدمت محول بطاقة microSD مشتركًا إلى بطاقة SD وقمت بلحام رأس ذو 7 سنون (0.1 بوصة خطوة) إلى جهات الاتصال المطلية.
لا يتضمن إعداد النماذج الأولية (مع أسلاك Dupont) وحدة استشعار ، ولكن PCB النهائي الذي صممته يسمح بعرض شاشة OLED صغيرة بالإضافة إلى شاشة OLED. تفاصيل حول كيفية تصميم ثنائي الفينيل متعدد الكلور هذا جزء من Instructable مختلفة.
الخطوة 8: البرمجيات
أجهزة ESP8266 (ESP-NOW)
تمت كتابة البرنامج لجميع الأجهزة باستخدام Arduino IDE (v1.87). تعمل كل محطة استشعار بشكل أساسي على الرمز المتطابق. إنها تختلف فقط عن طريق المسامير المستخدمة لاتصالات I2C وأي وحدة استشعار متصلة بها. الأهم من ذلك أنهم يرسلون حزمة بيانات القياس المماثلة إلى محطة ESP-Now Gateway ، بغض النظر عما إذا كان لديهم نفس المستشعر. ما يعنيه هذا هو أن بعض محطات الاستشعار سوف تملأ القيم الوهمية لقياسات الضغط ومستوى الضوء إذا لم يكن لديها أجهزة استشعار لتوفير قيم حقيقية. تم تكييف رمز كل محطة وبوابة من أمثلة أنتوني إلدر على GitHub هذا.
استخدم رمز جهاز البوابة SoftwareSerial للتواصل مع خادم الويب ، نظرًا لأن ESP8266 يحتوي على جهاز UART واحد يعمل بكامل طاقته. يعمل بأقصى معدل للباود 9600 يبدو موثوقًا به تمامًا وهو أكثر من كافٍ لإرسال حزم البيانات الصغيرة نسبيًا هذه. جهاز البوابة مبرمج أيضًا بعنوان MAC خاص. والسبب في ذلك هو أنه إذا كانت بحاجة إلى الاستبدال ، فلا يلزم إعادة برمجة جميع محطات الاستشعار باستخدام عنوان MAC الجديد للمستلم.
ESP32 (خادم الويب)
ترسل كل محطة استشعار حزمة البيانات الخاصة بها إلى جهاز البوابة الذي يعيد توجيهها إلى خادم الويب. إلى جانب حزمة البيانات ، يتم أيضًا إرسال عنوان MAC الخاص بمحطة الاستشعار لتحديد كل محطة. يحتوي خادم الويب على جدول "بحث" لتحديد موقع كل أداة استشعار وفرز البيانات وفقًا لذلك. تم ضبط الفاصل الزمني بين القياسات على 5 دقائق بالإضافة إلى عامل عشوائي لتجنب "تصادم" أجهزة الاستشعار مع بعضها البعض عند الإرسال إلى جهاز طريق البوابة.
تم تعيين جهاز توجيه WIFI المنزلي لتخصيص عنوان IP ثابت لخادم الويب عندما يتصل بشبكة WIFI. بالنسبة لي كان 192.168.1.111. ستؤدي كتابة هذا العنوان في أي متصفح إلى الاتصال بخادم الويب الخاص بمحطة الطقس طالما كان المستخدم ضمن نطاق WIFI للشبكة المنزلية (والاتصال بها). عندما يتصل المستخدم بصفحة الويب ، يستجيب خادم الويب بجدول القياسات ، ويتضمن وقت القياس الأخير لكل مستشعر. بهذه الطريقة إذا أصبحت محطة الاستشعار غير مستجيبة ، يمكن للمرء أن يرى ذلك من الجدول إذا كانت القراءة أكثر من 5-6 دقائق.
يتم حفظ البيانات في ملفات نصية فردية على بطاقة SD ويمكن أيضًا تنزيلها من صفحة الويب أيضًا. يمكن استيراده إلى Excel أو أي تطبيق آخر لتخطيط البيانات
الروبوت التطبيق
لتسهيل عرض معلومات الطقس المحلية على هاتف ذكي ، قمت بإنشاء تطبيق Android نسبيًا باستخدام Android Studio. إنه متاح على صفحة GitHub الخاصة بي هنا. يستخدم فئة webview لتحميل صفحة الويب من الخادم ، مثل الوظائف المحدودة. إنه غير قادر على تنزيل ملفات البيانات ولم أكن بحاجة إلى تلك الموجودة على هاتفي على أي حال.
الخطوة 9: النتائج
أخيرًا ، هذه بعض النتائج من محطة الطقس في منزلي. تم تنزيل البيانات على جهاز كمبيوتر محمول ورسمت في Matlab. لقد أرفقت نصوص Matlab الخاصة بي ويمكنك أيضًا تشغيلها في GNU Octave. يعمل المستشعر الخارجي على بطاريته المشحونة بالطاقة الشمسية لمدة 4 أسابيع تقريبًا ، ونادرًا ما يكون لدينا أي شمس في هذا الوقت من العام. حتى الآن كل شيء يسير على ما يرام ويمكن لكل فرد في الأسرة البحث عن الطقس بأنفسهم بدلاً من أن يسألوني الآن!