جدول المحتويات:

ابدأ عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!: 9 خطوات (بالصور)
ابدأ عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!: 9 خطوات (بالصور)

فيديو: ابدأ عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!: 9 خطوات (بالصور)

فيديو: ابدأ عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!: 9 خطوات (بالصور)
فيديو: Jack In The Box® مسلوق ومحمّل TOTS CHEDDAR BACON Livestream Review | زقزقة هذا ... 2024, يوليو
Anonim
إطلاق عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!
إطلاق عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!
إطلاق عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!
إطلاق عرض شرائح صور العطلة الخاصة بك بلمسة من السحر!

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

الفكرة بعد ذلك هي التقاط صور للتمثال أمام المشاهد أو المعالم الشهيرة من البلد المذكور: أجد أنه أكثر تسلية من التقاط الصور بالنصب نفسه فقط (يوجد Google لذلك وهو أرخص بكثير) ولكن لا يزال أسهل من الحصول على لأكون في كل صورة بنفسي (لست معجبًا ، لأكون صادقًا)

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

سيشرح هذا الدليل كيف فعلت ذلك ، باستخدام NFC و raspberry pi و nodejs و osmc

الخطوة 1: نظرة عامة على الحل

نظرة عامة على الحل
نظرة عامة على الحل
نظرة عامة على الحل
نظرة عامة على الحل

نظرًا لأن الإعداد بالكامل يتضمن بعض الأشياء ، فإليك نظرة عامة عامة على ما يتضمنه لمساعدتك على فهم كل ما يلي:

المعدات

- التمثال مصنوع منزليًا: نظرًا لأنني أكتب هذه التعليمات في منتصف رحلة مدتها أسبوع في كوبنهاغن / أوسلو / ستوكهولم / هلسنكي ، فسوف أقوم بتضمين بعض اللقطات للتمثال الذي تم صنعه لهذه الرحلة

- تحت كل تمثال توجد شريحة NFC: أستخدم ملصقات مستديرة يمكنني وضعها تحت كل تمثال ولكن يمكنك استخدام أي عامل شكل آخر - فقط تأكد من أن الشريحة التي تستخدمها متوافقة مع القارئ الخاص بك

- لعرض الصور ، سأستخدم raspberry pi مع تثبيت OSMC: إنه مشغل الوسائط المفضل لدي للبرامج التلفزيونية والأفلام ، لذا فهو متصل بالفعل بالتلفزيون الخاص بي

- لكي يتمكن raspberry pi من قراءة علامات NFC ، أضفت قارئ NFC - الذي استخدمته هو Explore-NFC من NXP ، والمتوفر في العديد من مواقع الويب: يتم توصيله بـ Pi ويعمل كدرع

برمجة

في Raspberry Pi ، ينتظر البرنامج النصي NodeJS قراءة علامة NFC: بمجرد الانتهاء من ذلك ، يتحقق البرنامج النصي من معرفه مقابل قائمة القيم / الزوج مع كل مجلد من مصدر الصور على OSMC ومعرف NFC المقابل كما تم تكوينه بواسطة المستخدم.

عندما تتم قراءة العلامة ، إذا كان المعرف موجودًا في القائمة ، فإن البرنامج النصي Node يخبر OSMC بتشغيل عرض الشرائح لهذا المجلد المحدد. من أجل إنشاء / تكوين تلك القائمة ، يقوم نفس البرنامج النصي NodeJS بتشغيل وظيفة المسح كل 5 دقائق: يمسح لكل دليل داخل مصدر "الصور" على OSMC (باستخدام واجهة برمجة تطبيقات JSON-RPC التي تقدمها Kodi) ويضيفها إلى قائمة يتم حفظها بعد ذلك على القرص. من خلال تحرير هذا الملف النصي مباشرة ، يمكن للمستخدم بعد ذلك إضافة معرف NFC المقابل لكل ألبوم.

الخطوة الثانية: عمل التمثال

صنع التمثال
صنع التمثال
صنع التمثال
صنع التمثال
صنع التمثال
صنع التمثال
صنع التمثال
صنع التمثال

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

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

الخطوة الثالثة: تثبيت OSMC

قم بتثبيت OSMC
قم بتثبيت OSMC

أول شيء قمت به هو تثبيت OSMC على بطاقة micro SD لـ Raspberry Pi: في الإعداد الخاص بنا ، سيكون بمثابة مشغل وسائط لمشاهدة صورك. لن أخوض في الكثير من التفاصيل حول هذا الجانب لأنه موثق جيدًا إلى حد ما (هناك عدد قليل من Instructables متاح إذا كنت بحاجة إلى مساعدة). فقط قم بتنزيل برنامج التثبيت على جهاز الكمبيوتر الخاص بك واتبع التعليمات. بمجرد الانتهاء ، قمت للتو بتوصيل لوحة مفاتيح وماوس وقمت بتوصيل HDMI بالتلفزيون واتبعت معالج الإعداد لإعداد المنطقة الزمنية وما إلى ذلك.

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

عند إضافة المصدر ، سيُطلب منك إدخال اسم له: يمكنك ترك الاسم الافتراضي أو تغييره ولكن تأكد من كتابته لأننا سنحتاج إليه لاحقًا. في حالتي أطلقت عليها اسم "صوري"

يجب أن تشاهد الآن محتويات الدليل الذي أضفته وأن تتصفح صورك: في حالتي ، لدي دليل فرعي لكل رحلة.

تهانينا ، لديك الآن مركز وسائط به صورك ويمكنك تشغيل عرض شرائح لمجلد معين (كمكافأة ، يمكنك أيضًا استخدامه لتشغيل مقاطع الفيديو أو الموسيقى الخاصة بك)

الخطوة 4: تكوين القارئ

بالنسبة لبقية التعليمات ، سنقوم بالاتصال بـ Pi باستخدام سطر الأوامر عبر SSH. للقيام بذلك ، ما عليك سوى توصيل Pi بشبكتك باستخدام كبل Ethernet واستخدام الجهاز الطرفي أو برنامج sotware مخصص للاتصال بـ Pi. في نظامي التشغيل Mac OS و Linux ، يكون الأمر

ssh [email protected]

سيُطلب منك إدخال كلمة مرور ، إنها osmc مرة أخرى

لكي يتمكن القارئ من العمل ، يجب تمكين SPI: في معظم التوزيعات مثل Raspbian ، يمكن القيام بذلك باستخدام raspi-config ، وهي أداة تكوين تسمح لك بتغيير بعض قيم التكوين.

ومع ذلك ، لا يتضمن OSMC raspi-config ، من أجل سلامتك عند استخدامه. بدلاً من ذلك ، أغلق جهاز Raspberry وأخرج بطاقة micro SD وقم بتثبيتها على جهاز الكمبيوتر الخاص بك: يجب أن يكون قسم "التمهيد" مرئيًا الآن. هناك ، في جذر المجلد ، سترى ملفًا يسمى "config.txt" - فقط افتحه وأضف هذا السطر في النهاية:

"dtparam = spi = on"

يمكنك الآن حفظ الملف وإعادة التشغيل ويجب تمكين SPI.

بعد ذلك ، ستحتاج إلى تنزيل ملف ZIP المرفق وفك ضغطه على التوت - أوصي بإنشاء مجلد المشاريع وفك ضغطه هناك. للقيام بذلك ، يمكنك إما الاتصال بـ Raspberry باستخدام FTP عبر SSH (أستخدم CyberDuck للقيام بذلك) أو وضع الملف على محرك أقراص USB واستخدام مدير ملفات Kodi لنسخه على Raspberry Pi.

في كلتا الحالتين ، بمجرد نسخ الملف المضغوط إلى Pi ، يمكنك بعد ذلك الانتقال إلى المجلد الذي نسخته إليه وفك ضغطه ، والانتقال إلى المجلد الناتج وتثبيت الحزمة:

قم بفك ضغط SW2827.zipcd SW2827sudo dpkg -i libneardal0_0.14.3-1_armhf.deb بالقرب من explorenfc_1.2-1_armhf.deb

إذا سارت الأمور على ما يرام ، يجب أن تكون قادرًا على توصيل القارئ وإعادة التشغيل ثم الدخول

explorenfc الأساسية

إذا اقتربت من شريحة NFC للقارئ ، فيجب أن تعرض الآن مجموعة من المعلومات من الشريحة (من بين أشياء أخرى ، معرفها)

الخطوة الخامسة: تثبيت العقدة وإنشاء المشروع

بعد ذلك ، سنقوم بتثبيت NodeJS على التوت لكتابة تطبيقنا.

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

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

يمكنك بعد ذلك كتابة

sudo apt تثبيت nodejs

لتثبيت أحدث إصدار من nodejs و npm المتاح.

من أجل التحكم في KODI من داخل nodejs ، سنستخدم حزمة npm تسمى kodi-ws.

لنبدأ بإنشاء مشروع جديد: فقط اكتب الأمر

الحرف الأول npm

سيُطرح عليك عدد من الأسئلة: بالنسبة لمعظمها ، يمكنك ترك الإعداد الافتراضي ، ما عليك سوى اختيار اسم لتطبيقك وإدخال اسمك الخاص في النهاية. عندما تُسأل عن نقطة البداية ، اترك فقط index.js

سيؤدي هذا إلى إنشاء ملف package.json يلخص خصائص الحزمة الخاصة بك ، مثل تبعياتها.

يمكنك الآن الدخول

sudo npm تثبيت kodi-ws sudo npm install jsonfilesudo npm install cronsudo npm install child_process

إذا قمت بفتح package.json بعد ذلك ، ستلاحظ أنه تمت إضافة كل هذه الحزم إلى التبعيات.

الخطوة 6: شرح المدونة

شرح المدونة
شرح المدونة

مرفق بهذه الخطوة رمز التطبيق.

لقد تركت قدرًا لا بأس به من التسجيلات التي يمكن عدم التعليق عليها من أجل فهم النص ولكن فريقنا يقوم بتقسيمه معًا.

ستلاحظ أنه على الرغم من جميع الوظائف المعلنة ، فإن الكود لا يقوم إلا ببعض الأشياء في البداية:

kodi ('localhost'، 9090). ثم (الوظيفة (اتصال) {

يحاول البرنامج النصي الاتصال بـ OSMC JSON-RPC API. بمجرد أن ينجح (وعندها فقط) ، يستمر مع بقية الملف.

إذا كنت لا تقوم بتشغيل هذا من Raspberry Pi لسبب ما ، فقم بتغيير المضيف المحلي إلى عنوان IP الخاص بك. تأكد أيضًا من أنه في إعدادات الخدمة داخل OSMC (الإعدادات / الخدمات) مربع الاختيار "السماح بالتحكم عن بعد من التطبيقات الموجودة على الأنظمة الأخرى" (انظر الصورة)

ما تبقى من الملف هو في الغالب إعلانات عن وظائف سنستخدمها لاحقًا: الوظيفتان اللتان تم إطلاقهما فعليًا من هنا هما (الأسطر 172/173)

scanAndSetCron () ؛ listenForTag () ؛

في scanAndSetCron:

- بدء تشغيل وظيفة scanPictures. داخلها ، نتحقق مما إذا كان المتغير "mypicturedirectory" ، الذي سيحمل مسار صورنا ، فارغًا. إذا كان الأمر كذلك ، فإننا نطلب من OSMC تزويدنا بجميع المصادر التي لديها لمحتوى الصورة (داخل وظيفة getPictureDirectory ، السطر 11):

var piclist = wait connection. Files. GetSources ("الصور") ؛

يعطينا OSMC مصفوفة في المقابل: لكل عنصر ، نتحقق مما إذا كان اسم المصدر يتضمن "My": إذا كان هذا هو الحال ، فإننا نقوم بتخزينه كمصدر صورتنا (السطر 16 وما يليه). هذا هو المكان الذي تريد تغيير السلسلة من "My" إلى كل ما أدخلته سابقًا كاسم لمصدر الصور

if (piclist.sources .label.includes ("My")) {console.log (">>> وجدت الدليل" + piclist.sources .file)؛ mypicturedirectory = piclist.sources .file ؛ }

الآن بعد أن أصبح لدينا المسار إلى المصدر (بشكل أساسي المجلد الجذر لألبوماتنا) ، نطلب من OSMC مسحه ضوئيًا وإضافة المسار لكل مجلد إلى مصفوفة تسمى Album_directories (إذا لم يكن موجودًا بالفعل). نظرًا لأنه سيتم تشغيل هذه الوظيفة كل X ثانية ، فإننا نتحقق من أن الدليل ليس موجودًا بالفعل في القائمة قبل إضافته ، مع تعيين معرف NFC على سلسلة فارغة - وبهذه الطريقة ، سيكون كل مجلد جديد تضيفه إلى صورك تلقائيًا وأضاف - السطر 46

لـ (var j = 0؛ j <directories.length؛ j ++) {if (الدلائل [j].filetype.includes ("الدليل")) {if (searchDirectory (directory [j].file، Album_directories)) {console. السجل (الدلائل [j].file + "هناك بالفعل") ؛ } else {console.log (">> Adding dir" + directories [j].file)؛ Album_directories.push ({directory: directories [j].file، nfc: ""})؛ }}}

في النهاية ، نحفظ مصفوفة Album_directories في ملف json على Pi ، والذي نحاول تحميله في كل مرة يتم فيها تنفيذ الوظيفة: يحدث هذا في نهاية وظيفة scanAndSetCron حيث نستخدم حزمة تشبه cron لضمان تشغيل وظيفتنا كل 15 ثانية.

يمكن فتح ملف JSON الذي أنشأناه ، Album_directories.json ، باستخدام أي تطبيق مفكرة. بمجرد القيام بذلك ، سيتم تقديمك بقائمة ألبومات الصور الخاصة بك ، كل منها به حقل "nfc" فارغ:

[{"directory": "/ home / osmc / Pictures / Mada 2016 /"، "nfc": ""}، {"directory": "/ home / osmc / Pictures / NewFolder /"، "nfc": "" }، {"directory": "/ home / osmc / Pictures / Test /"، "nfc": ""}]

في هذا الحقل ، يتعين عليك الآن لصق معرف العلامة التي تريد ربطها بهذا الألبوم. للحصول على هذا المعرف ، ما عليك سوى الانتقال إلى المجلد SW2827 وتشغيل explorenfc-basic ومسح العلامة التي تريد استخدامها. في الإخراج الذي تحصل عليه ، ما عليك سوى البحث عن القيمة بجوار ISO14443A UID. انسخه إلى الألبوم الذي تريد تكوينه. في حالتي ، على سبيل المثال ،

[{"directory": "/ home / osmc / Pictures / Mada 2016 /"، "nfc": "040A12EAFC3881"}، {"directory": "/ home / osmc / Pictures / NewFolder /"، "nfc": " "}، {" directory ":" / home / osmc / Pictures / Test / "،" nfc ":" "}]

احفظ الملف وسيتم تحميل محتواه عند تشغيل التطبيق في المرة القادمة.

في وظيفة listenForTag ، نقوم بذلك فقط: نظرًا لأنه لا يبدو أن هناك منفذًا مخصصًا لمكتبة القارئ لـ NodeJS ، فإننا نعتمد على عمليات الأطفال لتشغيل البرنامج الثنائي للقارئ:

var spawn = يتطلب ('child_process'). spawn، child = spawn ('/ usr / bin / explorenfc-basic'، )؛

نحن نعتمد على مستمع الأحداث لتلقي الإخراج من هذا التنفيذ: داخل رد الاتصال لـ child.stdout.on ('البيانات' ، الوظيفة (البيانات) ، نقوم بتحليل إخراج هذا الأمر باستخدام وظيفة التحلل: نحن نبحث عن السطر الذي رأيناه سابقًا ، بدءًا من "ISO14443A UID:" ، حيث يتم تخزين معرف العلامة التي تم مسحها ضوئيًا. بمجرد العثور على هذا السطر ، نقوم بقصه وتخزين المعرف في كائن (يسمى ID ، كيف أصلي).

أخيرًا ، نحاول مطابقة هذا المعرف مع المعرفات التي أدخلناها في مصفوفة كائنات Album_directories (تم تحميلها عبر ملف Album_directories.json). إذا تم العثور على تطابق ، فإننا نوجه OSMC لبدء عرض شرائح لهذا المجلد المحدد:

var nfcid = analysisOutput (البيانات) ؛ console.log ("nfcid is" + nfcid.id)؛ var المقابلalbum = searchTag (nfcid.id، Album_directories) ؛ إذا (الألبوم المقابل) {console.log ("تم العثور على الألبوم" + JSON.stringify (الألبوم المقابل) + "لهذه العلامة") ؛ var args = [{'path': appropriatealbum.directory}] ؛ connect.run ('Player. Open'، args) ؛ } listenForTag () ،

هل لاحظت أنه في نهاية الوظيفة ، نقوم بتشغيل listenForTag مرة أخرى؟ هذا هو الحل الوحيد الذي وجدته لجعل التطبيق يعمل: سيقوم explorenfc-basic بالانتظار افتراضيًا لعلامة ما ، ثم قراءتها ، ثم الخروج. يحتوي التطبيق على وضع مستمر يمكننا الاتصال به باستخدام explorenfc-basic -k ولكن في هذا الوضع ، لا تقوم عملية child_process مطلقًا بإخراج محتوى العلامة نظرًا لأنه لا ينتهي أبدًا (بمعنى آخر ، لم يتم تشغيل child.stdout.on ('data') أبدًا). نظرًا لأنني لم أجد أي طريقة أخرى لاستخدام هذا القارئ ، فإن ما نقوم به هنا هو بشكل أساسي إطلاق explorenfc-basic في وضع علامة واحدة ، وعندما تتم قراءة علامة ، نطلق listenForTag وبالتالي نعيد تشغيل explorenfc-basic.

إذا اضطررت إلى العودة (وأعتقد أنني سأفعل) ، فسأختار قارئ NFC الذي يوفر المزيد من الخيارات: على سبيل المثال ، Adafruit (ربما لاحظت أنني مغرم جدًا بهم) لديه هذا القارئ https:// www.adafruit.com / product / 789 متوافق مع libnfc ، وهو ما أعتقد أنه يعني أن القارئ سيكون أكثر نظافة للتفاعل معه من استدعاء عملية فرعية من داخل العقدة وتحليل stdout!

الخطوة 7: جربها

لبدء تشغيل التطبيق ، ما عليك سوى الانتقال إلى هذا المجلد واكتب "node index.js" (أو npm start نظرًا لأننا قمنا بتكوينه مسبقًا في package.json). من المفترض أن ترى في السجلات اتصال التطبيق بـ OSMC / Kodi والمسح الضوئي لأول مرة. بعد بضع ثوانٍ ، سيتم إنشاء ملف Album_directories.json داخل دليل المشروع ؛ يمكنك بعد ذلك إدخال معرفات علامة NFC كما هو موضح سابقًا وربطها بالألبومات التي تريدها.

الخطوة 8: بدء التشغيل تلقائيًا

للتلخيص ، أنشأنا تطبيق Node الذي (1) يقوم بمسح مكتبة صور KODI الخاصة بك ويحاول العثور على المجلد الذي تخزن فيه صور عطلتك ، (2) يستمع إلى علامات NCF بالاعتماد على explorenfc-basic ثم (3) يقوم بتشغيل الألبوم المرتبط بمعرف NFC هذا.

من أجل تشغيل هذه العملية برمتها في الخلفية ، سنستخدم PM2 ، مدير العمليات للعقدة.

في سطر الأوامر ، انتقل إلى مجلد المشاريع (حيث يوجد ملف index.js الخاص بك) واكتب الأسطر التالية:

sudo npm قم بتثبيت pm2 -gpm2 start index.js

يتم الآن مراقبة تطبيقك بواسطة PM2 وسيتم إعادة تشغيله تلقائيًا! للتأكد من إطلاقه فعليًا ، اكتب قائمة pm2 ويجب أن تراها في القائمة. إذا كنت تريد رؤية السجلات ، فاكتب فقط سجلات pm2.

موصى به: