المطورين أراد! نحن نبحث عن مطوري React و C ++ للمساعدة في هذا المشروع. تحقق من الرمز وإذا كنت مهتمًا ، فاتصل بـ [email protected].

Davepl ، 9/19/2021
NightDriversTrip هي حزمة رمز مصدر لإنشاء برنامج فلاش تقوم بتحميله إلى متحكم ESP32. يمكن أن يقود ما يصل إلى 8 قنوات من مصابيح LED WS2812B على نمط متصلة بدبابيس الرقائق وعرض الألوان والأنماط والتصاميم الفاخرة عليها. هناك العديد من التأثيرات المدمجة التي يمكن تكوينها ليتم عرضها على شريط LED ، بما في ذلك التأثيرات الصوتية/الموسيقى/الفوز للوحدات النمطية المزودة بميكروفون. يمكن أن يتلقى أيضًا اختياريًا بيانات الألوان لمصابيح LED بتنسيق بسيط مضغوط (أو غير مضغوط) على مقبس TCP/IP الذي يتم فتحه افتراضيًا على المنفذ 49152. يحتفظ ESP32 بساعة متزامن باستخدام NTP.
يمكن أن يقود Drivery كل من شرائح نمط WS2812B ومصفوفات نمط HUB75.
في الآونة الأخيرة ، تمت إضافة مثبت ويب إلى المشروع الذي يمكن من خلاله وميض معظم مشاريع NightDriver على الأجهزة المدعومة ، ولا يستخدم أي شيء سوى متصفح الويب. يرجى الرجوع إلى القسم التالي إذا كانت هذه هي الطريقة التي ترغب في البدء بها.
تم توفير تطبيق ويب يمكن استخدامه لتثبيت غالبية مشاريع NightDriver على الأجهزة المدعومة. سيتيح لك ذلك تمييز مشروعًا سريعًا على جهاز ESP32 ، واتصله بـ WiFi والبدء في استخدامه دون الاضطرار على الفور إلى العمل مع الكود المصدري.
لاحظ أن المثبت يتطلب متصفحًا يدعم المسلسل على الويب. في وقت كتابة هذا التقرير ، تعتبر المتصفحات التي تشمل مثل هذا الدعم إصدارات حديثة من Chrome و Edge و Opera.
يرجى اتباع هذه الخطوات لفلاش ، وإذا تم دعمها ، قم بإعداد WiFi على جهازك:
قم بتوصيل جهازك بجهاز الكمبيوتر بكبل USB.
انتقل إلى عنوان URL التالي في متصفحك: https://plummerssoftwarellc.github.io/nightdriverstrip. يجب أن تعرض شاشة تبدو هكذا: 
حدد جهازك (مثل "M5stickc Plus") من القائمة المنسدلة. ستظهر المنسدلة الثانية مع المشاريع المدعومة على هذا الجهاز.
حدد المشروع الذي تريد فلاشه في المنسدلة الثانية. عندما تفعل ذلك ، سيظهر زر الاتصال أدناه. لاحظ أن علامة كل مشروع تتضمن مؤشرا على الميزات الرئيسية الممكّنة في البناء المعني. يتم عرض الأسطورة لكل من رسائل الميزة أسفل المشروع المنسدلة.
انقر فوق الزر Connect. سيطلب منك مربع الحوار تحديد منفذ تسلسلي. اعتمادًا على نظامك ، قد يظهر فقط قائمة أو قائمة منها. في حالة عرض عدة ، سيكون عمومًا هو الذي يسمى بوضوح "المنفذ التسلسلي USB (COMN)". حدد المنفذ الصحيح وانقر فوق الاتصال.
سيظهر مربع حوار جديد. أحد الخيارات التي يقدمها هو "تثبيت <Project> لـ <vice>". انقر فوق هذا الخيار.
سيظهر مربع حوار يسألك عما إذا كنت تريد محو الجهاز. حدد المربع إذا كانت هذه هي المرة الأولى التي تومض فيها NightDriversTrip على جهازك ، أو كنت ترغب في وميض تثبيت نظيف. سيؤدي هذا إلى إعادة تعيين جميع الإعدادات إلى الإعدادات الافتراضية. لاحظ أنه سيتم مسح تكوين WiFi سواء اخترت مسح أم لا. انقر فوق التالي.
سيُطلب منك الآن تأكيد أنك ترغب في وميض الجهاز. انقر فوق تثبيت.
سيظهر مربع حوار يوضح لك تقدم التثبيت. عادة ، سيستغرق هذا حوالي دقيقتين. عند الانتهاء من الولادة ، انقر فوق التالي.
في هذه المرحلة ، يمكن أن تحدث أربعة أشياء:
إذا كان جهازك لا يدعم WiFi ، فيمكنك تخطي النقطة 12.
في مربع حوار معلومات اتصال WiFi ، حدد أو أدخل SSID وكلمة المرور. انقر فوق الاتصال. في بعض الحالات ، يظهر مربع حوار اتصال WiFi مرة أخرى بعد إجراء اتصال ناجح بالفعل. في هذه الحالة ، انقر فوق تخطي. من المحتمل أيضًا أن يتم الإبلاغ عن مهلة أثناء توصيل WiFi بالفعل. في هذه الحالة ، انقر فوق مرة أخرى.
الآن ، سيظهر مربع حوار يعرض تفاصيل المشروع الذي تومضه. سيوفر أيضًا خيارات للفلاش مرة أخرى وإظهار سجلات الجهاز ووحدة التحكم. علاوة على ذلك ، إذا كان جهازك يدعم WiFi ، فسيتوفر خيارات لزيارة تطبيق الويب الخاص بالجهاز (شريطة تمكين خادم الويب على الجهاز أيضًا) أو تغيير إعدادات WiFi. لاحظ أنه إذا قمت بتمييز صورة جهاز تتضمن تطبيق Web Server/Web ، فقد يستغرق الأمر دقيقة أو نحو ذلك لتأتي بعد إجراء اتصال بشبكة WiFi.
إذا كنت ترغب في تغيير تكوين WiFi على جهاز وامض بالفعل ، فاستخدم الخطوات التالية:
قم بتوصيل جهازك بجهاز الكمبيوتر بكبل USB.
انتقل إلى عنوان URL التالي في متصفحك: https://plummerssoftwarellc.github.io/nightdriverstrip.
حدد جهازك (مثل "M5stickc Plus") من القائمة المنسدلة. ستظهر المنسدلة الثانية مع المشاريع المدعومة على هذا الجهاز.
حدد المشروع الذي تومضه في وقت سابق ، في المنسدلة الثانية. عندما تفعل ذلك ، سيظهر زر الاتصال أدناه.
انقر فوق الزر Connect. سيطلب منك مربع الحوار تحديد منفذ تسلسلي. اعتمادًا على نظامك ، قد يظهر فقط قائمة أو قائمة منها. في حالة عرض عدة ، سيكون عمومًا هو الذي يسمى بوضوح "المنفذ التسلسلي USB (COMN)". حدد المنفذ الصحيح وانقر فوق الاتصال.
سيظهر مربع حوار جديد. إذا لم تُظهر بعد خيارات "الاتصال بـ Wi-Fi" أو "تغيير Wi-Fi" ، افتح نافذة "Logs & Console" ، وانتظر حتى تظهر خطوط السجل. ثم أغلق النافذة بالنقر فوق مرة أخرى. عند عرض "الاتصال بـ Wi-Fi" أو "تغيير Wi-Fi" ، انقر فوقه.
في مربع حوار معلومات اتصال WiFi ، حدد أو أدخل SSID وكلمة المرور. انقر فوق الاتصال. في بعض الحالات ، يظهر مربع حوار اتصال WiFi مرة أخرى بعد إجراء اتصال ناجح بالفعل. في هذه الحالة ، انقر فوق تخطي. من المحتمل أيضًا أن يتم الإبلاغ عن مهلة أثناء توصيل WiFi بالفعل. في هذه الحالة ، انقر فوق مرة أخرى.
تم تصميم الصور المضمنة في المثبت باستخدام الحالة الحالية للرمز المصدر في هذا المستودع. إذا كان هناك أي شيء ترغب في تغييره (تكوين) المشروع الذي تريد استخدامه ، فقد حان الوقت للانتقال إلى المرحلة التالية.
نظرًا لأن المرحلة التالية ستتطلب بسرعة بعض المعرفة بهيكل التطبيق الذي هو NightDriversTrip ، فقد يكون هذا وقتًا مناسبًا لقراءة مقدمة قاعدة NightDriversTrip.
على الأجهزة التي تحتوي على WiFi ، يمكن لـ NightDriversTrip بدء خادم ويب يستضيف واجهة المستخدم على الويب التي تعد جزءًا من المشروع. يمكن استخدامه لعرض وتغيير التأثير الذي يعمل ، والحصول على إحصائيات الأداء المباشر للجهاز.
عند بدء تشغيل الجهاز مع تمكين خادم الويب ، يمكن الوصول إلى واجهة المستخدم على الويب عن طريق فتح متصفح ويب وكتابة عنوان IP لجهازك في شريط العناوين. بمجرد التحميل ، يمكن استخدام الرموز الموجودة على يسار الشاشة لتبديل طرق العرض داخل واجهة المستخدم وإيقافها.
يمكن العثور على مزيد من المعلومات حول واجهة المستخدم على الويب في readme.md الخاص بها.
إلى جانب واجهة المستخدم على الويب ، ينشر خادم الويب أيضًا واجهة برمجة تطبيقات تشبه الراحة. من بين أمور أخرى ، يمكن قراءة مجموعة من إعدادات التكوين وتغييرها باستخدامه. يتوفر مزيد من المعلومات حول API في REST_API.MD.
أوصيك بالقيام بما يلي:
DEMO . يمكن العثور على بعض المؤشرات على ما هو مطلوب للقيام بذلك أدناه.globals.h أو Platformio.ini مثل WiFi و WebServer. انظر الميزة تعريف أدناه. تأكد من تعيين WiFi SSID وكلمة المرور في تضمين/أسرار.
يرجى التأكد من تعيينها في Include/Secrets.h ، وليس في include/secrets.example.h!
تمكين wifi عن طريق تعيين enable_wifi تعريف إلى 1 في globals.h.
# define ENABLE_WIFI 1يمكن أيضًا تكوين هذا في ملف platformio.ini ، كما هو موضح في القسم المعرفي أدناه.
هذه تحدد تتيح الميزات الرئيسية لـ NightDriversTrip. حددها في platformio.ini's build_flags أو في globals.h. ملاحظة: بعض التعريفات محددة للوحة ، ويلاحظ هذا أدناه.
| ميزة تعريف | وصف |
|---|---|
| enable_wifi | تواصل مع wifi |
| invoming_wifi_enabled | قبول بيانات وأوامر الألوان الواردة |
| enable_webserver | قم بتشغيل خادم الويب الداخلي |
| time_before_local | كم ثانية قبل أن تخرج المصباح ويظهر المحتوى المحلي |
| enable_ntp | اضبط الساعة من الويب |
| enable_ota | قبول على تحديثات فلاش الهواء |
| الأجهزة محددة | وصف | لوحات مدعومة |
|---|---|---|
| use_m5display | تمكين عرض الإحصائيات على مضمنة في شاشة LCD | M5stick-C و M5stick-C Plus |
| use_oled | تمكين عرض الإحصائيات على بنيت في OLED | Heltec WiFi Kit 32 |
| use_lcd | تمكين عرض الإحصائيات على ILI9341 LCD الخارجي | Wrover32 |
| use_tftspi | تمكين عرض الإحصائيات على LCD TTGO الخارجية | ESP32DEV |
| enable_audio | استمع للحصول على الصوت من الميكروفون ومعالجته | M5stick-C و M5stick-C Plus |
| enable_remote | جهاز التحكم عن بعد الأشعة تحت الحمراء | يتطلب أجهزة الأشعة تحت الحمراء |
مثال في platformio.ini (بادئة الأعلام مع -D ، على سبيل المثال ENABLE_WIFI=1 يصبح -DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1مثال في Globals.h:
# define ENABLE_WIFI 1 لإضافة تأثيرات جديدة ، أنت:
LEDStripEffect (أو فئة تأثير موجودة) ويحدث الأشياء الجيدة في الوظيفة المهمة الوحيدة ، Draw() . تحقق من ما تفعله التأثيرات المدمجة ، ولكن باختصار ، تقوم بشكل أساسي بالاستخلاص في مجموعة من كائنات CRGB التي يمثل كل منها ثلاثة أضعاف اللون 24 بت. بمجرد الانتهاء من ذلك ، يتم إرسال صفيف CRGB إلى LEDs ويتم مطالبتك بالإطار التالي على الفور. يجب أن تستغرق طريقة السحب في مكان ما حوالي 30 مللي ثانية ، من الناحية المثالية ، ويجب أن delay() للنوم لتحقيق التوازن إذا كان أسرع. يمكنك الرسم مرارًا وتكرارًا في حلقة مزدحمة ، لكن ليس هناك حاجة إليها.#define فئة التأثير الخاصة بك إلى effects.h . يحتاج كل فئة تأثير رقم تأثير واحد فقط ، ويرجى التأكد من أن الرقم الذي تختاره غير مستخدم بالفعل من قبل فئة تأثير أخرى! يمكن العثور على مزيد من المعلومات حول الارتباط بين فئة التأثير ورقم التأثير المرتبط به في effects.h .LoadEffectFactories() في effects.cpp (ضمن قسم تكوين البناء الخاص بك ، مثل DEMO ). يتوقع الماكرو ADD_EFFECT() رقم التأثير ونوع التأثير الجديد لك كمعلمات. يتم تمرير أي معلمات إضافية إلى مُنشئ التأثير عند إنشائها. هناك مثيل Global EffectManager يقوم أولاً بإنشاء جدول التأثير من ملف JSON على spiffs ، إذا كان موجودًا. ثم يضيف أي تأثيرات أخرى مسجلة في LoadEffectFactories() ولكن لم يتم تضمينها في ملف JSON. ثم يدور بين تلك التأثيرات بمعدل يتم التحكم فيه بواسطة DEFAULT_EFFECT_INTERVAL . لا يتم إخطار التأثيرات عندما تنشط أو لا ، يُطلب منهم فقط الرسم عند الحاجة.
كل قناة من LEDs لديها مثيل LEDStripGfx مرتبط به. _GFX[0] هو LEDStripGfx المرتبط بـ LED_PIN0 ، وهلم جرا. يمكنك الحصول على المخزن المؤقت LED من PIN0 عن طريق الاتصال _GFX[0]->leds() ، وسيحتوي على _GFX[0]->GetLEDCount بكسل. يمكنك الرسم في المخزن المؤقت دون لمس البايتات الخام عن طريق استدعاء fill_solid و fill_rainbow و setPixel ووظائف الرسم الأخرى.
يفترض أبسط تكوين ، DEMO ، أن لديك شريط متر واحد من 144 مصابيح LED ومصدر طاقة متصل بـ ESP32. إنه يحضر ، ويجد RainbowFillEffect واحد في وظيفة LoadEffectFactories() ، ويستدعي بشكل متكرر طريقة Draw() لتحديث صفيف CRGB قبل إرسالها إلى LEDs. إذا كنت تعمل بشكل صحيح ، فيجب أن ترسم لوحة قوس قزح التمرير على شريط LED الخاص بك.
يتم توفير هذا التكوين أبسط ، يسمى هنا ببساطة "العرض التوضيحي" ، من خلال بيئة بناء محددة من اللوحة. يمكن رؤية قائمة هذه البيئات من خلال تشغيل "Python3 Tools/Show_envs.py" ، والتي ستخبر القارئ ، حتى كتابة هذه السطور ، تشمل الاختلافات المحددة للأجهزة لـ "Demo":
قد يتم اختيار أنواع البناء هذه بواسطة وسيطة "-e" إلى PIO أو في خيار قائمة داخل رمز IDE/VS Platformio.
يتم استمرار جدول التأثيرات في ملف JSON على spiffs على فترات منتظمة ، للاحتفاظ بحالة التأثيرات (وفي الواقع قائمة التأثير الكامل) عبر إعادة التشغيل. هذا قيد الإعداد إلى حد كبير للتحديثات المستقبلية لـ NightDriversTrip ، حيث يمكن تغيير تكوين قائمة التأثيرات للتأثيرات الفردية باستخدام تطبيق ويب الجهاز. تتوفر نقاط نهاية API لتسهيل ذلك بالفعل وجاهزة للاستخدام (انظر واجهة المستخدم على الويب و API أدناه.)
هذا يجعل من الذي يجب أن يتم توفير تجاوز من SerializeToJSON() ومقابل تفضيل المقابل للتأثيرات التي تحتاج (أو تريد) للاستمرار أكثر من الخصائص التي يتم (DE) المتسلسلة من/إلى JSON بواسطة LEDStripEffect افتراضيًا.
طوال المشروع ، تكون المكتبة المستخدمة في معالجة JSON و (DE) التسلسلية هي Arduinojson. من بين أمور أخرى ، هذا يعني:
تمشيا مع الاتفاقية في Arduinojson ، يجب أن تعود وظائف SerializeToJSON() true إلا عندما تُرجع وظيفة Arduinojson (مثل JsonObject::set() ) false للإشارة إلى أنها نفدت من الذاكرة العازلة. أي وظيفة SerializeToJSON() إرجاع false ستؤدي إلى زيادة في المخزن المؤقت التسلسلي الكلي وإعادة تشغيل عملية التسلسل.
يجب حجز الذاكرة المطلوبة لعملية تسلسل مثيل الفئة الفردية (DE) مسبقًا ، من خلال إنشاء إما:
StaticJsonDocument< حجم المخزن المؤقت >() يحتفظ بالذاكرة على المكدس. يمكن استخدام هذا لأحجام المخزن المؤقت الصغيرة (أصغر من 1024 بايت) فقط.AllocatedJsonDocument( حجم المخزن المؤقت ) الذي يحتفظ بالذاكرة على الكومة.يعتمد مقدار الذاكرة المطلوبة فعليًا على رقم ونوع ومحتويات الخصائص التسلسلية (DE) ، وهي فعليًا قليلاً من لعبة التخمين - مما يعني أن القيم التي سترىها في جميع أنحاء قاعدة الكود هي تخمينات متعلمة أيضًا. عندما تفشل الخصائص المسلسل الأخيرة في الظهور في JSON التي تم إنشاؤها ، فمن المعقول افتراض أن عملية التسلسل قد نفدت من الذاكرة العازلة ، وبالتالي تحتاج إلى زيادة الذاكرة العازلة.
للحصول على فهم أفضل للتفاصيل المتعلقة بتسلسل JSON (DE) ، يمكنك التفكير في إلقاء نظرة على البرامج التعليمية المعنية في قسم "الاتصال الأول" من وثائق Arduinojson.
على سبيل المثال أثناء التطوير ، يمكن لقائمة تأثير (JSON-Persisted) على لوحتك الخروج من المزامنة مع التأثيرات التي تضيفها في التأثيرات LoadEffectFactories() إذا حدث هذا ، يمكنك إعادة تعيين قائمة التأثير على اللوحة إلى الافتراضي ، عبر الشبكة. لكي يعمل هذا ، يجب أن يكون المجلس متصلاً بـ WiFi ويجب تشغيل خادم الويب.
يمكن إجراء إعادة تعيين عن طريق تنفيذ منشور نموذج HTTP إلى http: // <visply_ip>/إعادة تعيين مع مجموعة الحقول التالية: EffectSonfig = 1 و Board = 1. على الأنظمة التي تحتوي على حليقة "منتظمة" ، يجب أن يقوم الأمر التالي بالخدعة:
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /resetمن المحتمل أن يتم إضافة القدرة على إجراء عملية إعادة التعيين هذه في تحديث مستقبلي إلى واجهة المستخدم على الويب.
علاوة على ذلك ، من الممكن أيضًا "تجاهل" قائمة التأثير المستمر تمامًا ودائمًا قم بتحميل قائمة التأثيرات القياسية عند بدء التشغيل. تتوفر الوثائق حول كيفية القيام بذلك في الجزء العلوي من وظيفة LoadEffectFactories() المذكورة أعلاه.
إذا قمت بتطوير تأثير يتطلب سحب البيانات من الإنترنت ، فيمكنك تسجيل وظيفة قارئ الشبكة مع فئة NetworkReader ، والتي تتوفر عبر مرجع g_ptrSystem->NetworkReader() . يمكنك استخدام إما أن PatternSubscribers أو تأثيرات PatternWeather كمصادر للإلهام. تقوم Patternstocks بسحب عروض أسعار الأسهم المباشرة (15 دقيقة) من خادم خاص.
يمكن بناء المشروع باستخدام platformio. هناك IDE Platformio متوفر ، وهو مبني على رمز Visual Studio. يتم تضمينه في ذلك هي أدوات Command Line Platformio الأساسية. يمكن أيضًا تثبيتها بمفردها إذا كنت تفضل عدم استخدام IDE.
لتجميع التطبيق الأمامي (وهو جزء من كل بناء منصة) ، يلزم إصدار حديث من NodeJs مع NPM. يمكن تنزيلها من موقع NodeJS. تتوفر تعليمات للطرق المدعومة لتثبيت NodeJs هناك أيضًا. من فضلك اقرأ ومتابعتها.
لاحظ أن تثبيت Nodejs باستخدام مدير الحزمة الافتراضي لنظام التشغيل/التوزيع الخاص بك من المحتمل أن يتركك مع إصدار NodeJS أقدم بكثير مما تحتاجه.
تم اختبار التطبيق على الإصدار العقدة 16.15.1 و 18.17.1 مع الإصدار NPM 8.13.2 ؛ يجب أن تعمل الإصدارات الأحدث أيضًا من حيث المبدأ.
للحصول على تفاصيل حول العمل مع تطبيق الواجهة الأمامية ، انظر الموقع/README.MD.
عند تثبيت IDE أو CORE ، يمكن بناء NightDriversTrip من قذيفة أمر عن طريق إدخال دليل المشروع/المستودع وإصدار الأمر التالي:
pio run -e demo
هذا سوف يبني التكوين demo .
إذا حصلت على خطأ في عدم العثور على
pio، فقد تحتاج إلى إضافته إلى مسارك.
لإنشاء جميع التكوينات المتاحة ، استخدم الأمر التالي (قد يستغرق هذا بعض الوقت):
pio run
لإنشاء وتحميل نظام الملفات الذي يمكن استخدامه عن طريق التأثيرات (على الرغم من أن لا شيء حاليًا) ، ستحتاج إلى إنشاء وتحميل صورة spiffs إلى Flash الخاص بك باستخدام Platformio. يمكنك القيام بذلك باستخدام واجهة مستخدم Platformio ، أو استخدام أداة سطر الأوامر pio :
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
يتضمن هذا المستودع عددًا من النصوص لأداء مهام مختلفة أثناء أو بعد بناء مشاريع. يتم تضمينها في دليل tools . يرجى ملاحظة أن البرامج النصية تتوقع أن تبدأ من الدليل الرئيسي للمشروع. لذلك ، باستخدام:
tools/buddybuild.shبدلاً من:
cd tools
./buddybuild.shاكتب شيئًا بسيطًا لإرسال بيانات الألوان إلى المقبس. التنسيق أساسي للغاية: أي قناة ، وعدد مصابيح LED التي ترسمها ، ومتى ترسمها ، وبيانات الألوان نفسها. يمكنك إرسال بيانات غير مضغوطة باستخدام طابع زمني صفري طالما قمت بإرسال الرأس الصحيح قبل بياناتك ، وهو أمر بسيط للغاية. سيتم رسم البيانات التي تحتوي على طابع زمني صفري على الفور بدون تخزين مؤقت.
| بايت | وظيفة | |
|---|---|---|
| 0 ، 1 | commandid | (اضبطه على 3 ، وهو WIFI_COMMAND_PIXELDATA64 ) |
| 2 ، 3 | قناة | (اضبطها على 1 لقناة واحدة ، على الرغم من أن 0 يعمل أيضًا لأسباب تاريخية) |
| 4 - 7 | طول | (عدد PIXELS التي يتم تعيينها 24 بت) |
| 8 - 15 | ثوان | (اضبطه على 0) |
| 16 - 24 | micros | (اضبطه على 0) |
| 25+ | RGB | (بيانات ألوان RGB 24 بت ، واحدة لكل PIXEL محدد في الطول أعلاه) |
إذا تم تصميمه باستخدام ENABLE_WIFI و INCOMING_WIFI_ENABLED ، إذا كانت الشريحة قادرة على الحصول على اتصال WiFi وعنوان DHCP ، فسيفتح مقبسًا على المنفذ 49152 وانتظر الحزم التي تم تشكيلها كما هو موضح أعلاه.
قم بإنشاء سلسلة من 24 إطارًا في الثانية (أو 30 إذا كان أقل من 500 LED) وقم بتعيين الطابع الزمني على "الآن" بالإضافة إلى 1/2 في الثانية. أرسلها إلى الشريحة فوق WiFi وسيتم رسمها 1/2 ثانية من الآن في دفق مستمر حيث أن الطوابع الزمنية التي أعطيتها كل حزمة تأتي.
الإفصاح الكامل: بصفته أحد زملاء Amazon ، يكسب Plummerssoftwarellc لجنة من عمليات الشراء المؤهلة. لم تتم إضافته إلى سعر الشراء ، ولا يزيد تكلفتك على الإطلاق. بالإضافة إلى ذلك ، ستذهب جميع أرباح 2021 من قناة Dave's Garage ، والتي تشمل هذه المبيعات ، إلى مركز UW Autism.
بدلاً من إنتاج مجموعة معقدة من الإرشادات ، إليك ما آمل أن يجلبه التعاون مفتوح المصدر إلى المشروع: أن الأشخاص سيضيفون ميزات مهمة وإصلاح العيوب وأوجه القصور في الكود. عندما يضيفون ميزات ، سيفعلون ذلك بطريقة تتفق مع الطريقة التي تتم بها الأمور في الكود الحالي. إنهم يقاومون الرغبة في البحث عن المهندس المعماري وإعادة كتابة كل شيء في صورتهم الخاصة ، وبدلاً من ذلك يضعون جهودهم نحو زيادة التحسن الوظيفي مع تقليل كود المصدر وتغييره.
دعونا نفكر في التسمية غير المتسقة ، والتي يجب إصلاحها. البعض هو Camelcase ، وبعضها هو pszhungarian ، وهلم جرا ، اعتمادا على المصدر. كنت أفضل تحديث كل شيء إلى TBD قياسي واحد. حتى يتم تحديد TBD ، أميل نحو معيار Win32.
عند العمل في وظيفة ، العمل بأسلوب الوظيفة. عند العمل على الفصل ، العمل بأسلوب الفصل. عند العمل على ملف ، اعمل بأسلوب الملف. إذا كانت هذه غير متسقة ، فافعل أي شيء يقلل من التغييرات. يجب إدخال التغييرات الأسلوبية فقط بعد المناقشة في المجموعة ، وعموما يجب إدخالها في امتلاك هذا التغيير في المشروع بأكمله.
بعد ذلك ، دعنا ننظر في #define S للتحكم في البناء. قد تكون هناك طرق أفضل وأكثر أناقة لفعل الأشياء. يمكن أن يكون هناك منصات تكوين كاملة. لكنني أفضل أن أبقيه بسيطًا. وأحدد أبسط أن تكون "أقل ما يحتاج مبرمج C ++ ذي الخبرة إلى التعلم قبل أن يكون بناءً مع الكود المعني". لا أريد أن أتعلم مكتبة صف جديدة إذا كان بإمكاني تجنبها!
لقد علمني حياة الترميز أن أخطئ في جانب البساطة ، لذا يرجى عدم تقديم بنيات قالب متغير ما لم تقلّل رمز المصدر بشكل واضح. أي شيء ينمو تعقيد وطول الكود يجب أن يكون مشبوهة.
أضف ما تريد و/أو تحتاج إلى تحقيق أحلام LED الخاصة بك. إصلاح أخطاء بلدي. املأ الفجوات الواضحة في معرفتي. كل ما لديه أكثر وميض لأقل عدد من البتات الحصول على تصويتي. تحصل فقط على الكثير من Blinken بارد إضافي لكل بايت من التعليمات البرمجية والبرنامج. يتم قياس هذا الإرجاع في Blinkenperbit ، وكمية الذهول الوامض الذي يضيفه الرمز مقسومًا على التأثير على المصدر (والثنائي).
لتكرار ، بناء مشروع Mesmerizer. ثم حذف pio/build_cache وقم ببناء مرة أخرى ، مع قضاء الوقت للبناء الثاني.
ASUS 7995WX [96-CORE ، 192-THREAD]-> [Davepl ، 02/11/2024] 20.73 ثانية
HP Z6 G5A ، 7995WX ، 128GB [96-CORE ، 192-THREAD]-> [DAVEPL 11/29/2023] 25.270 ثانية
3970X ، 128GB [32-CORE ، 64-THREAD] Windows11+WSL2/UBUNTU02.04LTS-> [DAVEPL 11/29/2023] 34.292 ثانية
Mac M1 Ultra Studio [10-Core ، 20-Thread]-> [Davepl 11/29/2023] 48.368 ثانية
حان الوقت لبناء تكوين الطيف ( pio run -e spectrum ). يفترض بناء نظيف بعد تثبيت كل شيء وتنزيله.
AMD 3970 32 -CORES ، 128GB ، RAID SSD -> [Davepl 09/19/2021] 12.93 ثانية (يعمل تحت WSL)
AMD 5950X 16 -CORES ، 64GB ، SSD -> [Davepl 09/19/2021] 16.90 ثانية
Apple MacBook Pro M1 Max ، 8+2 Cores ، 64GB ، 4TB SSD -> [Davepl 12/15/2021] 20.90 ثانية
Apple MacBook Air M2 ، 16GB ، 256GB SSD -> [Vaaski 02/28/2023] 56.17 ثانية
MacBook Pro 2020 ، 8 cores 2.4ghz i9 ، 64gb ، 4tb SSD -> [Davepl 09/19/2021] 34.09 ثانية
Mac Mini ، 4 perf cores ، 16 جيجابايت -> [Davepl 09/19/2021] 39.06 ثانية
Mac Pro ، 6 نوى ، 3.5 جيجا هرتز ، 64 جيجابايت ، 1 تيرابايت SSD -> [Davepl 09/19/2021] 48.42 ثانية
Xeon Silver ، 20 نوى ، 2.1 جيجا هرتز ، 16 جيجابايت VM -> [Davepl 10/10/2022] 53.11 ثانية
Raspberry PI 4 ، 64 بت Ubuntu LTS ، 4 Core ، 4GB -> [Davepl 09/23/2021] 6 دقيقة 25 ثانية
Jetson Nano 2G ، 4 Core Arm A57 -> [Davepl 10/04/2021] 2 دقيقة 56 ثانية