
البرامج الثابتة بادي
هذا هو مكون البرامج الثابتة لـ Paddy ، و Daemon Power Management.
يستخدم Arduino C ++ ، وهو مصمم حول آلة الحالة. يتم تومضه مباشرة على شريحة مدعومة. نوع Arduino المستخدم لهذا المشروع هو IoT Nano 33.
تتمثل مهمة هذا الرمز في التواصل مع وسيط Paddy MQTT من خلال Wi-Fi ، أو تطبيق Paddy من خلال الطاقة المنخفضة Bluetooth ، لمعالجة الإعداد والخطأ. يجب أن تتحكم الرمز أيضًا في الأجهزة التي تنفذ:
- تشغيل/إيقاف تبديل جهاز التحميل
- قياس الطاقة لجهاز التحميل ، مع إرسال إحصائي دوري.
مخطط آلة الدولة

ملخص
يتم تنظيم رمز آلة الحالة هذه مع مكونات Singleton التي يتم إنشاء مثيل لها مرة واحدة في البرامج الثابتة وإعادة استخدامها طوال دورة حياة البرنامج. هذه الوحدات على النحو التالي:
- BLE: يتعامل مع التواصل المباشر بين الخفي والجهاز المركزي.
- التحكم: يقوم جهاز التحميل بتشغيل أو إيقاف بناءً على الأمر الذي تم استلامه في ذلك الوقت.
- MQTT: يتعامل مع جميع التواصل مع الوسيط ، والمندوبين يعملون على مكونات أخرى أو دول على استرجاع الرسائل.
- الطاقة: يتحكم ومعايرة محول تيار قياس الطاقة. يجعل القراءات الدورية.
- التخزين: يحاكي رقاقة EEPROM بسبب Arduino IoT Nano 33 المختار عدم وجود EEPROM الفعلي. تخزين أوراق الاعتماد اللازمة على ذلك.
- Wi-Fi: تعامل اتصالات Wi-Fi وقياس قوة الإشارة.
مع وجود واجب محدد مسبقًا ، من السهل أن نفهم ما يفعله كل قطعة من التدفق:
- حالة التمهيد: هذه هي الحالة الأولية التي يدخلها متحكم الدقيقة بمجرد أن ترفعها. يتم إجراء فحص الأجهزة هنا ، وتحديداً وحدة Wi-Fi ووحدة الطاقة المنخفضة Bluetooth. إذا نجحت هذه الشيكات ويمكن أن يهيئة الخفيون المكونات المذكورة أعلاه ، فإنها تنتقل إلى حالة init. خلاف ذلك ، فإنه ينتقل إلى مكسور ، ويتوقف عند هذا الحد وتوضيح LED مما يشير إلى وجود خطأ في الأجهزة للمستخدم.
- حالة init: حالة init هي أول حالة وسيطة يدخلها الخفي. الغرض منه هو إعداد الجهاز للوظيفة المناسبة ، من خلال معايرة وحدة قياس الطاقة أولاً عن طريق ركوب الدراجات عدة مرات ، معتاد قراءات الجهاز إلى خط الخط. بعد ذلك ، يتم التحقق مما إذا كان الخفي يحتوي على أي بيانات اعتماد مخزنة في EEPROM المحاكاة أم لا. ينتقل الخفي إلى حالة التوصيل مع بيانات الاعتماد المذكورة إذا كان الأول صحيحًا ، وإلا يتم إدخال مرحلة الإعداد.
- حالة الإعداد: مع سلوك الحظر الخاص بها ، لن تتقدم هذه الحالة حتى يتم إجراء إجراء المستخدم. نظرًا لأن الخفي لا يحتوي على أي بيانات اعتماد هنا ، فليس لديها فكرة عن كيفية الاتصال بشبكة Wi-Fi أو الوسيط. هذا يعني أنه في هذه المرحلة ، فإن الخفي غير قادر على استخدام Wi-Fi لنقل البيانات ، ويحتاج إلى نهج مباشر. Ble مثالي لهذا السيناريو ، حيث يمكن بسهولة تحقيق الكتابة والقراءة من خلال الخصائص من تطبيق Paddy. وبالتالي ، يتم استخدام قدرات BLE للجهاز لإبعاد هذه الخصائص:
- المسلسل (القراءة فقط): خاصية تنبعث من العدد التسلسلي للجهاز.
- SSID (الكتابة فقط): معرف مجموعة الخدمة لشبكة Wi-Fi.
- كلمة المرور (الكتابة فقط): كلمة مرور نقطة الوصول إلى Wi-Fi.
- اسم مستخدم المؤسسة (الكتابة فقط): إذا كانت Wi-Fi تتطلب تقنيات مصادقة المؤسسة مثل EAP أو Peap ، اسم المستخدم للمستخدم.
- كلمة مرور المؤسسة (الكتابة فقط): إذا كانت Wi-Fi تتطلب تقنيات مصادقة المؤسسة مثل EAP أو PEAP ، فإن كلمة المرور للمستخدم.
- JWT (الكتابة فقط): رمز الويب JSON الذي يستخدمه الخفي للاتصال بالوسيط.
- إعادة ضبط (الكتابة فقط): عندما تتم كتابة هذه الخاصية ، يعيد الخفي على بيانات اعتماده.
للمتابعة ، يجب كتابة JWT وخصائص بيانات الاعتماد بواسطة الجهاز المحمول للمستخدم من خلال تطبيق Paddy. تجدر الإشارة إلى أنه بالنسبة للبساطة ، تكتشف البرامج الثابتة هذه المرحلة على أنها تكتمل الكتابة فقط لخصائص SSID. على هذا النحو ، يمكن أن تحدث عمليات الكتابة بأي ترتيب باستثناء SSID واحد ، والتي يجب أن تدوم لتستمر لتحقيق السلوك المتوقع. للتمييز بين أوضاع التفويض ، تعطي مجموعات مختلفة من الخصائص المكتوبة ثلاثة تكوينات عندما يتعلق الأمر بترخيص Wi-Fi: عدم الأمان (SSID فقط) ، آمن (كلمة مرور SSID +) والمؤسسة (SSID + Enterprise username + Enterprise Password).
- حالة التوصيل: هذه الحالة بسيطة نسبيًا ، حيث يتم تشغيلها فقط أثناء توصيل الخفي بالوسيط الخلفي. عند النجاح في الاتصال ، يسلط الدولة على الإنترنت على الإنترنت ، ولإعادة التراجع عن الفشل.
- الحالة عبر الإنترنت: حالة "العمل" من الخفي ، وهذا يمثل لوحة وظيفية بالكامل. هنا يمكن أن تتفاعل مع الوسيط من خلال تلقي رسائل MQTT ، وإرسالها. يحتوي الخفي على بعض الواجبات أثناء وجوده في هذه الحالة:
- استمع إلى رسائل MQTT ، أي على الموضوعات ، وإعادة تعيين وتدوير الموضوعات. عند استلام إحدى هذه الرسائل ، فإنه يؤدي بشكل مناسب الإجراء الصحيح.
- أرسل رسائل ping الاحتفالية إلى الوسيط. هذه الرسائل محض لأغراض إحصائية وليست ضرورية للحفاظ على الاتصال حيًا ؛ يتم استخدامها فقط لتتبع حالة الخفي من التطبيق. في حمولة هذه الرسائل ، يتم نقل قوة إشارة Wi-Fi.
- ترحيل بشكل دوري بيانات استخدام الطاقة إلى الوسيط.
- تحقق مما إذا كان الجهاز لا يزال متصلاً بالوسيط. إذا لم يعد الجهاز متصلاً ، فانتقل إلى التراجع.
- حالة التراجع: بينما تعمل هذه الحالة كحشوة قبل إعادة توصيلات الخفي ، فهي أيضًا نافذة للمستخدم لإعادة ضبط الخفي من خلال اتصال BLE المباشر. على سبيل المثال ، في الحالات التي يتم فيها نقل الخفي من مكان مع اتصال Wi-Fi آخر ، يكون لديه بالفعل بيانات اعتماد ، لكنها غير صحيحة. على هذا النحو ، عندما يصل الخفي إلى حالة التراجع ، فإنه يفتح نافذة 60 ثانية حيث يمكن للمستخدم إعادة تعيينها عبر BLE مباشرة. ومع ذلك ، إذا نفد العداد لمدة 60 ثانية ، فسيتم إعادة محاكاة الخفي للاتصال بالخادم مرة أخرى عن طريق الانتقال إلى حالة التوصيل.
مخطط الدائرة
