جهاز التحكم عن بعد مع المشغل الخارجي لكاميرات SONY HDR على ESP8266


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

للتحكم في الكاميرا ، يتم إصدار وحدة تحكم عن بعد مع عرض الفيديو عبر WiFi. جهاز التحكم عن بعد مكلف للغاية وبقصور في العرض - الآن لا يمكن شراؤه إلا في مختلف أسواق السلع المستعملة الإلكترونية.


ولكن هناك واي فاي ، لذلك يمكنك التحكم فيه من هاتفك؟ هل حاولت التزلج أو ركوب الأمواج باستخدام الهاتف الذكي بين يديك؟ لكن هذا الإزعاج لا يزال غير كافٍ:

تقوم شركة SONY ، التي لا تهتم بعملائها تمامًا ، بإزالة تطبيق PlayMemories Mobile من Google Play للتحكم في كاميرات الحركة عبر WiFi من أي هاتف محمول ، واستبدالها بتطبيق ساعة ذكية. بدلاً من ذلك ، تطلق Imaging Edge Mobile - غير مريح بشكل رهيب وتسقط باستمرار قبالة الكاميرا. نفس الأغنية لتطبيقات iPhone.

كمساهم مخادع ، مستخدم كاميرا HDR AS100 ، قررت البحث عن حل بديل وشاهدت أرشيفًا مثيرًا للاهتمام - Sony Camera Remote API beta SDK

تمت كتابة SDK لتطوير تطبيقات التحكم في كاميرا SONY عبر WiFi من أجهزة Android و iOS.

يوجد داخل الأرشيف دليلان مع أمثلة لتطوير تطبيقات Java لنظامي Android و iOS. الأكثر إثارة للاهتمام هو مراجع API لوثيقة PDF للنسخة التجريبية من الكاميرا عن بعد . تقرر - سأفعل جهاز التحكم عن بعد بيدي

ما هو في API الخاص بك؟


أولاً ، هناك جدول بالأجهزة المدعومة لشهر فبراير 2017.

استنادًا إلى الجدول ، تتوافق واجهة برمجة التطبيقات (API) بدرجات متفاوتة من الوظائف مع جميع كاميرات HDR تقريبًا بدءًا من AS15 إلى AS300 وكاميرات FDR وكاميرات DSC و ILCE و NEX مع واجهة WiFi.

بعد ذلك ، سوف أصف كيفية العمل مع كاميرا HDR AS100 مع أحدث البرامج الثابتة 2.0.0 ، مما يعني أنه يجب أن يكون هناك توافق مع الأجهزة الأخرى.

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

هدفي هو تطوير جهاز مضغوط وأرخص جهاز تحكم عن بعد لكاميرات SONY

للبدء ، تحتاج إلى التأكد من تشغيل WiFi في قائمة الكاميرا:

[SETUP] -> [CONFG] -> [Wi-Fi] -> [ON]

يجب أن يكون المعرف وكلمة المرور على ملصق منفصل في تعليمات التشغيل للكاميرا. في حالة فقد هذا الملصق ، يمكنك توصيل الكاميرا عبر MicoUSB إلى كمبيوتر يعمل بنظام Microsoft Windows وتشغيله. يظهر [USB] على الشاشة ، ومحركان للشبكة على الكمبيوتر - مع إدخال بطاقة ذاكرة في الكاميرا والذاكرة الداخلية لكاميرا PMHOME. نحن مهتمون بالقرص الثاني

يحتوي الملف: \\ INFO \ WIFI_INF.TXT على المعرف وكلمة المرور للوصول إلى الكاميرا عبر WiFi ، ويحتوي الملف \\ INFO \ WPS_PIN.TXT على دبوس مفتاح الاتصال عبر WPS. الوصول إلى المعلومات للقراءة فقط ، لذلك من غير الممكن تغيير المعرف أو كلمة المرور أو الرقم السري.

يمكنك الآن الاتصال بالكاميرا باستخدام هذه البيانات. عنوان IP للكاميرا بعد الاتصال هو 192.168.122.1. للتحكم في الكاميرا ، تحتاج إلى إرسال طلبات HTTP POST إلى العنوان 192.168.122.1 : 10000 / sony / camera.

يمكن استخدام العناوين التالية لطرز الكاميرا المختلفة:

10.0.0.1 : 10000 / كاميرا
10.0.0.1 : 10000 / سوني / الكاميرا
192.168.122.1 : 8080 / sony / camera
192.168.122.1 : 10000 / سوني / الكاميرا

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

أيضًا ، من خلال بروتوكول HTTP ، يتم إرجاع الملفات النهائية مع الصور ودفق الفيديو للعرض من الكاميرا.

أصعب بروتوكول هو طلب المعلومات. بناءً على إصدار الطلب (1.0 - 1.3) ، فإنه ينتج مجموعة من 34 إلى 62 معلمة بتنسيق JSON ، والتي بدورها يمكن أن تكون صفائف ولديها وضعين للتشغيل - مع استجابة فورية لمعلومات كاملة عن حالة الكاميرا واستجابة لأي حدث على الكاميرا (مثل تبديل وضع أو بدء التسجيل)

أول فطيرة ... LUTOM


سيكون قلب الجهاز محركًا ناريًا - أرخص جهاز MK مع WiFi - ESP8266 الصيني. صحيح ، بالنظر إلى إعادة الرسم الباهتة للصورة على شاشة رسومات 240 × 320 باستخدام SPI ، قررت تأجيل إنتاج نسخة من لوحة التحكم عن بُعد الخاصة بـ Sonykovsky مع معاينة الفيديو في الوقت الفعلي ، واستقرت على وظيفة مفتاح التشغيل / الإيقاف العادي مع اختيار الوضع. كانت الشاشة OLED أحادية اللون مقاس 0.91 بوصة بدقة 32 × 128 ، والتي تستخدم عادة في أساور اللياقة البدنية الرخيصة.

مخطط النموذج الأولي:



تصميم لوحة:





حسنًا ، ضحية LUT:





إدراج


أوصي بتخطي هذا الجزء إلى كارهي arduino ، حيث أنني قمت بتطوير البرنامج الثابت في Arduino IDE مع تثبيت ESP8266 Core. للراحة ، استخدمت مكتبات إضافية:


مع مكتبات الرسومات ، كل شيء واضح. هناك حاجة للعمل مع شاشة OLED. WiFiManager هي مكتبة مريحة للغاية لإعداد اتصالات WiFi في ESP. في حالة الدخول في وضع الإعدادات ، فإنه يرفع نقطة الوصول إلى ESP وخادم WEB البسيط الذي يعيد توجيهه عند الاتصال. يمكنك البدء في الوضع التلقائي ، ولكن بعد ذلك سيبدأ وضع الإعدادات في كل مرة لا يوجد فيها اتصال بالكاميرا. اخترت إدخال وضع الإعدادات عن طريق الضغط لفترة طويلة على زر "BOOT / MODE" والخروج من مهلة 120 ثانية.

مكتبة WiFiManager مريحة أيضًا حيث يمكنك إضافة الحقول الخاصة بك للتخصيص (لم يكن ذلك مفيدًا لي في هذا المشروع) ، وكذلك التعامل مع الأحداث - الدخول في وضع الإعداد وحفظ الإعدادات.

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

باستخدام زر "BOOT / MODE" ، نحول أوضاع الكاميرا الرئيسية الثلاثة بشكل دوري - "VIDEO" و "PHOTO" و "LAPSE". استخدم زر PLAY / STOP لتشغيل / إيقاف التسجيل في وضع VIDEO أو LAPSE وتسجيل صورة واحدة في وضع PHOTO. عند تشغيل التسجيل ، يكون مصباح LED الأحمر في وضع التشغيل. عند التسجيل ، يومض الصورة مرة واحدة.

يوجد أيضًا مدخل إضافي على GPIO14 ، والذي يكرر بشكل أساسي الزر "PLAY / STOP". هذا الإدخال ضروري لتوصيل المشغل الخارجي ، والذي يمكنه مزامنة التقاط الصور للحصول على لقطات من الفاصل الزمني مع حدث خارجي. هذا الإدخال أخطط للاتصال بالطابعة ثلاثية الأبعاد واطلاق النار على أجزاء طباعة الفيديو الفاصل الزمني.

من بين الوظائف الإضافية ، يقيس البرنامج بشكل دوري قيم مدخلات ADC ، التي يتصل بها الفاصل مباشرة من البطارية ، ويعرض حالة البطارية مع الرمز. يتم معايرة البرنامج على المقسمات R12 = 1.6K و R11 = 10K وبطارية ليثيوم.

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

عينة "صناعية"


في الآونة الأخيرة ، كنت مدمن كسول على لوحات الطلب على JLCPCB ، والآن ، في الترتيب الأخير 100 × 100 ، كانت هناك مساحة خالية.

تم الانتهاء من التصميم للتثبيت في اتجاهين ، وفي الدائرة أضاف شحن الليثيوم على TP4056:







حاول الصينيون بخجل أن أخبرني أنني أطلب عدة مجالس في أمر واحد. لكننا لسنا معتادين على التراجع - أنا توحد جميع اللوحات مع إطار مشترك على الطباعة الحريرية ، أقوم بتوصيل Zeil من لوحات مختلفة (مقطوعة على أي حال) وحتى أكتب باللغة الروسية أن هذه لوحة واحدة)))



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





أبسط حالة على طابعة ثلاثية الأبعاد:







كيف يعمل:



الآن تطبيق صغير


لماذا تم بدء إدخال المشغل الخارجي. أردت أن أحاول تصوير مطبوعات TimeLaps على طابعة ثلاثية الأبعاد باستخدام كاميرا SONY HDR AS100. لهذا ، أنا في وحدة التحكم وأدخلت مدخلاً لمشغل خارجي. هناك عدة طرق لإرسال إشارة إلى هذا الإدخال.

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

قم بتثبيت OctoPrint باستخدام المكون الإضافي OptoLapse وتوصيل إدخال وحدة التحكم عن بعد بمنفذ Orange PI / Raspberry PI المجاني.

قم بتثبيت مفتاح حد إضافي متصل بوحدة التحكم واتخاذ رأس الطابعة لالتقاط صور لكل إطار بحيث يضغط هذا المفتاح.

جربت الطريقة الثالثة:





سرعان ما كتب سيناريو على ركبته في PHP ، والذي ، بعد طباعة كل طبقة ، يدرج رمز تراجع الرأس في موضع مفتاح الحد.

<?php $file1 = $argv[1]; $file2 = $argv[2]; if (!file_exists($file1)) { printf("Can't open %s\n",$file1); exit(1); } $flag = 0; $f1 = fopen($file1,"r"); $f2 = fopen($file2,"w"); while( !feof($f1) ){ $s = fgets($f1, 1024); $n = strpos($s,";LAYER:"); if( $n !== false )$flag = 1; if( $flag == 1 ){ $n1 = strpos($s,"G0 "); if( $n1 !== false ){ fprintf($f2, ";TIMELAPSE BEGIN\n"); fprintf($f2,"G10\n"); fprintf($f2, "G91\n"); fprintf($f2, "G0 F1000 Z10\n"); fprintf($f2, "G90\n"); fprintf($f2, "G0 F5000 Y230\n"); fprintf($f2, "G0 F5000 X178 Y230\n"); fprintf($f2, "G4 P1000\n"); fprintf($f2,"%s",$s); fprintf($f2,"G11\n"); fprintf($f2, ";TIMELAPSE END\n"); $flag = 0; } else { fprintf($f2,"%s",$s); } } else { fprintf($f2,"%s",$s); } } fclose($f1); fclose($f2); ?> 

رمز G بعد كل طبقة يشبه هذا:

 ;TIMELAPSE BEGIN G91 G0 F1000 Z10 G90 G0 F5000 Y230 G0 F5000 X178 Y230 G4 P1000 G0 F6000 X93.168 Y92.836 Z0.3 ;TIMELAPSE END 

لسوء الحظ ، لم أتمكن من التعامل مع retrac للطابعة على الفور ، لذلك خرج الفيديو الأول باسم "Printing snot")))


"لكن هذه قصة مختلفة تمامًا" ©

مشروع مفتوح المصدر بأكمله. يمكن أخذ مصدر البرنامج الثابت وملفات تصميم اللوحة والدوائر وطراز العلبة على GITHUB .

المقال الأصلي على مدونتي

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


All Articles