نعرض إطار الصورة الرقمية على الإنترنت

صورة
من المحتمل أن الكثيرين ، بالنظر إلى إطار الصورة الرقمية ، فكروا فيما إذا كان من الممكن عرض معلوماتهم الخاصة التي تتغير بمرور الوقت؟ نظرًا لأنني كنت مالكًا لإطار الصورة لعدة سنوات ، فقد حدثت لي هذه الفكرة - سيكون الإطار مثاليًا لعرض تنبؤات الطقس والمعلومات من "المنزل الذكي". حول كيفية تنفيذ هذه الوظيفة ، دون التدخل في تصميم الإطار - اقرأ تحت القطة.

طرق التنفيذ


أسهل طريقة للتحكم في الصورة المعروضة على إطار الصورة الرقمية هي ببساطة تبديل الصور المعدة مسبقًا والمخزنة في ذاكرتها بالطريقة الصحيحة. هنا مثال على تنفيذ هذه الطريقة. من الواضح أن هذه الطريقة ليست مرنة للغاية - يمكنك عرض رقم متغير واحد ، وستكون عملية تغيير هذا الرقم بطيئة جدًا.

وبالتالي ، بشرط أنه من المستحيل تفكيك الإطار ، يبقى فقط استخدام واجهات الذاكرة الخارجية - SPI (للعمل مع بطاقة SD) و USB. يكفي إنشاء جهاز يحاكي محرك أقراص خارجي ، وربطه بالإطار - وسيطلب نفسه صورًا من مثل هذا الجهاز. من الصعب جدًا استخدام وحدة التحكم الدقيقة لمحاكاة بطاقة SD ، ويصعب تكرار عامل الشكل للبطاقة نفسها. يمكن للمرء استخدام بطاقة WiFi SD جاهزة ، ولكن كل هذه البطاقات التي أعرفها كانت باهظة الثمن (> 40 دولارًا ، وهي قريبة من تكلفة الإطار نفسه).
يعد استخدام USB لحل هذه المشكلة أكثر ملاءمة - لا توجد مشكلة في العثور على وحدة تحكم دقيقة منتجة مع دعم USB ؛ يتم الاتصال بالإطار بواسطة موصل قياسي. علاوة على ذلك ، كان هناك بالفعل منشور عن حبريمخصص لمحاكاة محرك أقراص USB باستخدام متحكم stm32. ناقشت التعليقات على هذه المقالة إمكانية نقل البيانات المتغيرة ديناميكيًا بهذه الطريقة. نظرًا لذاكرة التخزين المؤقت لنظام التشغيل عند قراءة ملف ، فلا معنى لتغيير محتويات الملفات المحذوفة - لن يطلبها نظام التشغيل ببساطة ، لأنه لن يتمكن من معرفة أنها قد تغيرت. ومع ذلك ، لا تحتوي إطارات الصور على ملفات ذاكرة التخزين المؤقت (ببساطة ليس لديهم المقدار الصحيح من ذاكرة الوصول العشوائي)! يمكنك التحقق من ذلك عن طريق توصيل أي محرك أقراص USB محمول بإطار الصورة ، مع وميض LED عند قراءة الملفات - سوف يومض باستمرار عند قراءة الملفات. لذلك ، قررت استخدام هذه الطريقة الخاصة.

جزء البرنامج


لدي بالفعل لوحة تصحيح STM32F4DISCOVERY ، لذلك قررت التحقق من تشغيل مكتبة emfat المقترحة في المقالة أعلاه. لم تكن هناك مشاكل في نظام التشغيل Windows 7 ، ولكن تعذر على إطار الصورة اكتشاف الملفات الموجودة على القرص "الظاهري". كما اتضح لاحقًا ، لم يكتشف جهاز Android اللوحي أيضًا محرك الأقراص. اكتشف كمبيوتر Ubuntu آخر جهاز USB ولكنه لم يتمكن من تحميل محرك الأقراص.
كان علي معالجة المشكلة بشكل أعمق. كما اتضح ، على الرغم من حقيقة أن Windows اكتشف محرك الأقراص ويمكنه قراءة الملفات منه ، لم يتمكن TestDisk من تحديد نظام الملفات عليه:
صورة
تدريجيًا ، عند دراسة نتائج البيانات الأولية التي قدمتها TestDisk ، وكذلك الخوض في التعليمات البرمجية المصدر لهذا البرنامج ، أدركت أن أحد المعايير التي يحددها TestDisk نظام الملفات المستخدم هو حجم القرص. في emfat ، يعتمد حجم القرص الذي تمت مضاهاته على كمية البيانات الموجودة عليه. وبالتالي ، إذا كان هناك ملف واحد أو عدة ملفات صغيرة على القرص ، فلن يتجاوز حجم القرص 16 ميجابايت. في الوقت نفسه ، تفرض FAT32 قيودًا على الحد الأدنى لحجم الحجم - على الأقل 65527 مجموعات. مع الأخذ في الاعتبار أنه في "emfat" ، تحتل مجموعة واحدة 4096 بايت ، ثم لامتثال FAT32 يجب أن يكون حجم القرص 65527 * 4096 ~ 268 ميجا بايت. في الواقع ، هذا ليس هو ما يسبب أخطاء في تحديد نوع نظام الملفات. لم تنجح محاولة زيادة سعة القرص عن طريق زيادة حجم الملف الذي تمت مضاهاته إلى 400 ميجابايت - ربما لا يوجد شيء آخر غير مناسب هناك.لذا قررت إعادة "emfat" لمحاكاة نظام الملفات FAT16.
في النهاية ، نجح هذا ، وبدأت جميع الأجهزة في الكشف عن محرك الأقراص بشكل صحيح: من
صورة
الجدير بالذكر أن FAT16 لديها أيضًا قيود على حجم القرص - على الأقل 4087 مجموعات ، أي 16 ميجابايت في هذه الحالة. لتحقيق هذا الشرط ، من الضروري إنشاء ملف افتراضي 20 ميجا بايت في emfat.

سار التحقق باستخدام إطار الصورة بشكل جيد - عرض الإطار بنجاح صورة الاختبار المخزنة في ذاكرة فلاش بوحدة التحكم. الخطوة التالية هي عرض صور مخصصة. أسهل طريقة لمحاكاة ملفات BMP هي أن لها بنية بسيطة إلى حد ما ، ويمكن أن تكون الصورة 256 لونًا ، أي يوجد بايت واحد لكل بكسل. ولكن فقط في هذه الحالة ، تحتاج إلى 480 كيلوبايت من ذاكرة الوصول العشوائي لتخزين صورة بحجم 800 * 600. ليس لدى وحدة التحكم الدقيقة مثل هذه سعة الذاكرة ، مما يعني أنه لم يتبق سوى خيار واحد - لتشكيل الصورة على الطاير. مبدأ التشغيل هو كما يلي - في الحالة التي يطلب فيها الجهاز المضيف بيانات من ملف من محرك الأقراص ، تستدعي emfat وظيفة رد الاتصال المقابلة لهذا الملف. يتم نقل رقم القطاع الذي يتم طلب البيانات منه والمؤشر الذي يجب كتابة هذه البيانات من خلاله إلى هذه الوظيفة. معرفة رقم القطاع ،يمكنك تحديد أي جزء من الصورة مطلوب وتشكيله.
خلال التجارب ، تم اكتشاف حقيقة غير سارة - قد يطلب Windows بيانات من قطاعات خارج الترتيب. إن سبب القيام بذلك ليس واضحًا ، ولكن هذا يعقد تكوين الصورة على الطاير ، لأنه ضروري ولكن لحساب رقم القطاع - أي قطعة من البيانات يتم طلبها في الوقت الحالي. مشكلة أخرى هي أن الخطوط في ملفات BMP تنتقل من الأسفل إلى الأعلى ، مما يزيد من تعقيد حساب المركز.
لعرض النص ، استخدمت مكتبة mcufont . إنه ملائم لأنه يسمح لك باستخدام الخطوط المضغوطة ، مما يقلل بشكل كبير من استخدام ذاكرة الفلاش. نظرًا لأنني استخدمت خطوطًا كبيرة بما يكفي ، فإن هذه الميزة مهمة جدًا.
تقوم هذه المكتبة بكتابة الصورة التي تم إنشاؤها مباشرةً إلى الذاكرة ، لذا لكي تعمل المكتبة ، عليك تخصيص مصفوفة منفصلة في ذاكرة الوصول العشوائي.
قمت أيضًا بتنفيذ عرض الصور من ذاكرة وحدة التحكم. يتم عرض جميع الصور ، مثل النص ، بالأسود والأبيض ، حيث يمكن تخزين معلومات حول 8 بكسل في بايت واحد من الصورة. من أجل تحويل الصور العادية إلى عرض مناسب للاتصال بمشروع ، تم استخدام برنامج LCD Assistant .

ونتيجة لذلك ، يتم تكوين صورة النموذج التالي على محرك أقراص USB متصل:
العنوان

بعد اختبار البرنامج على STM32F4DISCOVERY ، صنعت الجهاز نفسه ، وهو متحكم دقيق مع وحدة WiFi متصلة به على ESP8266. من تلك المناسبة ، كان لدي فقط وحدة تحكم STM32F107RCT7.
اتضح أن دائرة الجهاز الناتج بسيطة للغاية: ولكن نظرًا للقيود المفروضة على حجم اللوحة - 17x36mm (خططت لتثبيتها في الحالة النهائية) والحجم الكبير لوحدة التحكم ، لم تكن لوحة الدوائر المطبوعة أسهل في التصنيع - على الوجهين ، مع تركيب الأجزاء على كلا الجانبين. في الوقت نفسه ، كان لا بد من صنع بعض خطوط الكهرباء بسلك. عرض اللوحة الناتجة (أثناء التصحيح باستخدام وحدة ESP-01):




مع أحجام اللوحة المشار إليها ، كانت وحدة WiFi ESP-03 هي الأنسب. هذا ما تبدو عليه اللوحة الناتجة مع الوحدة المثبتة بالفعل: ومن جانب وحدة التحكم: خلال التجارب ، اتضح أن حساسية الهوائي الخزفي كانت غير كافية بشكل واضح - الوحدة بالكاد متصلة بجهاز التوجيه. بعد توصيل قطعة من الأسلاك مقاس 31 مم بطرف WIFI_ANT ، تحسنت الحساسية بشكل ملحوظ وأصبحت مشابهة لحساسية ESP-01. يقع مكان تثبيت إطار الصورة بشكل دائم على بعد أمتار قليلة من جهاز التوجيه ، ويعمل الهوائي الأصلي للوحدة أيضًا بشكل طبيعي ، لذلك لا يوجد هوائي إضافي في الصورة.





نظرًا لأن ESP8266 كان ساخنًا جدًا أثناء التشغيل المستمر ، فقد قررت تشغيله فقط أثناء طلبات المعلومات. يمكن إدارة الطاقة باستخدام إخراج وحدة CH_PD. يؤدي تعيين هذا الدبوس على 0 إلى جعل ESP8266 في وضع الطاقة المنخفضة.
لجعله أكثر ملاءمة لاختبار تشغيل ESP8266 ، كتبت برنامجًا ثابتًا منفصلًا لوحدة التحكم الدقيقة التي تنفذ جسر USB-UART. ومن خلاله يتم تكوين الوحدة للعمل مع جهاز التوجيه ، بحيث يتم توصيل ESP8266 تلقائيًا بعد تشغيله.

مبدأ تشغيل الجهاز الناتج بسيط للغاية - كل 10 دقائق تحاول وحدة التحكم طلب البيانات من الخادم ، وإذا نجحت ، فإنها تقوم بتحديث بيانات الطقس. يتم أخذ بيانات درجة الحرارة الحالية والتوقعات لمدة 3 أيام مقدمًا من موقع openweathermap.org ، ويتم الحصول على معلومات حول درجة الحرارة خارج وداخل الشرفة من خادم majordomo. في نفس الوقت ، يطلب إطار الصورة صورة كل 6 ثوانٍ ، أثناء عرض المعلومات الحالية. نظرًا لأن كلتا العمليتين يمكن أن تحدث في وقت واحد ، يتم استخدام DMA لتلقي البيانات من ESP8266.

نتيجة لذلك ، يتم عرض الصورة التالية على إطار الصورة: شفرة المصدر للمشروع: github.com/iliasam/USB_Photoframe



Source: https://habr.com/ru/post/ar384177/


All Articles