پورتال ساخت و ساز - درب و دروازه.  داخلی.  فاضلاب.  مواد.  مبلمان.  اخبار

و بنابراین بیایید شروع کنیم، برای سیستم عامل به یک ابزار از سازنده به نام Flip نیاز دارید. دانلود، نصب، اجرا و در اینجا پنجره برنامه را داریم:

در ابتدا، دکمه ها (daws) فعال نیستند، این طبیعی است، ما آردوینو را به کامپیوتر متصل می کنیم و آن را می بندیم - دو کنتاکت شدید را از سمت پورت USB، RESET و GND باز می کنیم.

یک دستگاه جدید باید در سیستم ظاهر شود، به طور عجیبی، ATmega16u2 درایور را نصب کنید (در پوشه برنامه)، برگه "Settings" > "Communication" > "USB" > "open" را در برنامه flip انتخاب کنید. دکمه ها باید فعال شوند در هر صورت، می توانید یک نسخه پشتیبان از سیستم عامل ایجاد کنید تا بتوانید همه چیز را به جای خود برگردانید. در منوی "File"، روی "Load HEX File" کلیک کنید، برنامه در مسیرهای مورد نیاز است، بهتر است فایل سیستم عامل را در ریشه درایو C: قرار دهید، فایل هگز مورد نظر را با سیستم عامل انتخاب کنید، بررسی کنید که آیا چک باکس های "Erase"، "Program"، "Verify" هستند و روی "Run" کلیک کنید. ما اتصال را قطع می کنیم - آردوینو و voila را وصل می کنیم ... اکنون دیگر نمی توانیم از طریق USB داخلی در آردوینو سیستم عامل آپلود کنیم، اما یک صفحه کلید عالی بدون دکمه دریافت کردیم.

نگران سیستم عامل آردوینو نباشید، دانلود سیستم عامل از Arduino IDE از طریق یک آداپتور جداگانه USB به TTL امکان پذیر خواهد بود، اگرچه باید بگویم که اکنون این کار کمتر راحت خواهد بود.

ما آداپتور USB به TTL را وصل می کنیم، به عنوان مثال این یکی:

ما به مخاطبین سفید، سبز و سیاه نیاز خواهیم داشت، اینها به ترتیب RX، TX و GND هستند، ما آنها را به پین ​​هایی با همان نام گذاری روی آردوینو وصل می کنیم، فقط برعکس RX به TX و TX به RX. کنتاکت قرمز نباید استفاده شود!

ما USB را به TTL به رایانه متصل می کنیم، درایورها را نصب می کنیم، یک پورت COM جدید باید در مدیر دستگاه ظاهر شود. Arduino IDE را باز کنید و تنظیم کنید: Board - Arduino / Genuino Uno، Port - پورت سریال جدید ما.

شروع کار با نرم افزار آردوینو

بیایید کتابخانه مورد نیاز را به آردوینو IDE اضافه کنیم: پیوند github.com/SFE-Chris/UNO-HIDKeyboard-Library را دنبال کنید و روی «Clone or download» > «Download ZIP» کلیک کنید. سپس در arduino IDE، برگه «Sketch» ​​> «Include Library» > «Add.ZIP Library» را انتخاب کنید و آرشیو فشرده‌ای را که تازه دانلود کرده‌اید انتخاب کنید.

آماده سازی تمام شده است، مستقیماً به سیستم عامل بروید. کپی کردن نوشته من:

آردوینو - طرح

#عبارتند از صفحه کلید HID؛ مجموعه int; void setup() ( keyboard.begin(); ) void loop() ( while (Serial.available()) (//شروع حلقه زمانی که داده در دسترس است sbor += Serial.read();//خواندن داده، اضافه کردن در اعشاری به شکل if (sbor == 27)(//ظاهر کاراکتر دنباله کنترل برای (int i=0; i<=4; i++){//сложение последовательности if (sbor == 165) {//для определения F1-F12 на разных терминалах могут быть разные значения sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor >صفر شکستن ;مورد 508: صفحه کلید.pressSpecialKey(F4)؛شکستن;مورد 509: صفحه کلید.pressSpecialKey(F5);شکستگی;مورد 511: صفحه کلید.pressSpecialKey(F6);شکست;مورد 512: صفحه کلید.pressSpecialKey(F7); break;case 513: keyboard.pressSpecialKey(F8)؛ break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11)؛ break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER)؛ break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE)؛ break; case 9 : صفحه کلید. pressSpecialKey(TAB)؛ break؛ case 32: keyboard.pressSpecialKey(SPACEBAR)؛ break؛ case 26: keyboard.pressSpecialKey(PAUSE)؛ break؛ case 292: keyboard.pressSpecialKey(INSERT); زنگ تفريح؛ case 456: keyboard.pressSpecialKey(HOME); زنگ تفريح؛ case 295: keyboard.pressSpecialKey(PAGEUP); زنگ تفريح؛ case 294: keyboard.pressSpecialKey(END); زنگ تفريح؛ case 296: keyboard.pressSpecialKey(PAGEDOWN); زنگ تفريح؛ مورد 182: keyboard.pressSpecialKey(RIGHTARROW); زنگ تفريح؛ case 183: keyboard.pressSpecialKey(LEFTARROW); زنگ تفريح؛ مورد 181: keyboard.pressSpecialKey(DOWNARROW); زنگ تفريح؛ مورد 180: keyboard.pressSpecialKey(UPARROW); زنگ تفريح؛ case 293: keyboard.pressSpecialKey(DELETE); زنگ تفريح؛ case 320: keyboard.pressSpecialKey((CTRL | ALT)، DELETE); زنگ تفريح؛ //برای فراخوانی ctl+alt+del case 346، alt + del را فشار دهید: keyboard.pressSpecialKey(ALT, F4); زنگ تفريح؛ //برای فراخوانی alt+f4 shift + F4 پیش فرض را فشار دهید: keyboard.pressKey(sbor); زنگ تفريح؛ ) //Serial.println(sbor);//فقط برای رفع اشکال بدون اتصال به usb keyboard.releaseKey(); مجموعه = NULL; ))


آن را در آردوینو IDE قرار دهید و دکمه چک را فشار دهید. اکنون مهم ترین مرحله آغاز خواهد شد، مهمترین چیز در اینجا این است که لحظه را بگیریم، تعداد کمی از افراد در اولین بار موفق می شوند. ما دکمه دانلود را در آردوینو IDE فشار می دهیم، ابتدا خطوط سفید با لاگ کامپایل اجرا می شود، به دنبال آن خطوط نارنجی، این در حال برقراری ارتباط با پورت سریال است، این همان لحظه ای است که شما نیاز دارید که آن را بگیرید و زمان داشته باشید. برای فشار دادن دکمه RESET روی برد آردوینو. سیستم عامل باید بارگیری شود، اگر همه چیز موفقیت آمیز باشد، کتیبه ای مانند این خواهید دید

Avrdude: خواندن اطلاعات فلش روی تراشه: خواندن | ############################################### # | 100% 0.34s avrdude: تایید ... avrdude: 2934 بایت فلش تایید avrdude انجام شد. متشکرم.
اگر پس از چندین بار تلاش، سیستم عامل باز هم بارگذاری نشد، پین های RX و TX را تعویض کنید و همچنین بررسی کنید که آیا پایه GND به طور ایمن وصل شده است.

خط پایان

کنسول رزبری را باز کنید و بنویسید:

sudo raspi-config
منوی راه‌اندازی Raspberry باز می‌شود، گزینه‌های پیشرفته > سریال را انتخاب کرده و No را انتخاب کنید.

شاید این دستکاری ها مورد نیاز نباشد، پس بیمه اتکایی. این پارامتر تعیین می کند که آیا سیستم عامل رزبری با پورت سریال تعامل خواهد داشت یا خیر، این تعامل عمدتاً برای اشکال زدایی مورد نیاز است، بنابراین با خیال راحت آن را خاموش کنید، این فقط با ما تداخل خواهد داشت، زیرا. ما از طریق این پورت با آردوینو ارتباط برقرار می کنیم و سیستم هوا را مسدود می کند.

برنامه minicom را نصب کنید.

Minicom یک برنامه ساده برای کار با پورت سریال است.

sudo apt-get install minicom -y
ما حقوق دسترسی به دستگاه، / dev / ttyAMA0 را تنظیم کردیم - این همان پورت سریال است.

sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
minicom را شروع کنید:

Sudo minicom -s
منوی برنامه باز می شود، مورد "Serial port setup" را انتخاب کنید، منوی دیگری باز می شود، "Serial Device" را با فشار دادن کلید A انتخاب کنید، بنویسید / dev / ttyAMA0، Enter را فشار دهید، سپس مورد Bps / Par / Bits را در زیر انتخاب کنید. حرف E، یکی دیگر ظاهر می شود منو C و خط Q را فشار دهید. مطمئن شوید که در خطوط F - Hardware Flow Control: و G - Software Flow Control: خیر، به طور کلی همه چیز باید مانند تصویر زیر باشد، Enter را فشار دهید.

این تنظیمات را به عنوان پیش‌فرض «Save setup as dfl» ذخیره کنید و «Exit from Minicom» را ببندید.

ارتباط

ما جلوتر می رویم ، اکنون تقریباً همه چیز را آماده کرده ایم ، فقط می ماند که آردوینو را به پورت سریال رزبری وصل کنیم ، چیزی شبیه به این:

در اینجا یک نکته وجود دارد، آردوینو و رزبری سطوح ولتاژ متفاوتی دارند و از نظر تئوری نیاز به هماهنگی دارند، توصیه می کنم مقاله را بخوانید.

اگرچه همه چیز مستقیماً بدون هماهنگی برای من کار کرد، اما نباید از یک مثال بد تقلید کنید و یک مبدل سطح منطقی بخرید، ساده ترین آن به این صورت است:

یا حداقل یک تقسیم کننده ولتاژ روی مقاومت ها مونتاژ کنید.

راه اندازی

همه چیز آماده است، می توانید شروع کنید.

همه اتصالات را بررسی می کنیم، رزبری پای را روشن می کنیم، به کنسول رزبری می رویم، مینی کام را راه اندازی می کنیم. من فوراً رزرو می کنم، از طریق ssh به تمشک وصل شدم، از KiTTY (نسخه اصلاح شده PuTTY) به عنوان مشتری استفاده کردم، این مهم است. با سایر پایانه ها، مقادیر کلیدهای ارسالی ممکن است متفاوت باشد و بر این اساس، لازم است برای باد هزینه ای در نظر گرفته شود - تعداد انتقال مورد سوئیچ را تغییر دهید.

به طور کلی من به شما تحویل می دهم که می گویند "همانطور که هست". خب، من احتمالاً با این کار تمام خواهم کرد، IP KVM خانگی آماده است.

P.S.

در نهایت، آنچه را که در پسماند خشک اتفاق افتاد را شرح خواهم داد.

طرفداران:

- قیمت
- دستگاه نسبتاً ارزان بود
- Raspberry Pi: حدود 2700 روبل.
- آردوینو UNO: حدود 400 روبل.
- مبدل VGA به AV: حدود 700 روبل.
- کارت فیلمبرداری: 500 روبل.
- مجموع: 4300 روبل.

- تنظیم دقیق
شما می توانید تقریباً هر ترکیبی را رهگیری کنید و تقریباً هر کلیدی را به آنها اختصاص دهید، تا KEYBOARDPOWER و VOLUMEUP، به هر حال، می توانید مقادیر ممکن را در فایل هدر HIDKeyboard.h مشاهده کنید یا می توانید کلیدهای خود را اضافه کنید.

معایب:

- ترمز ویدیو و انتقال کلیک
- دومین و بزرگترین است کیفیت تصویر، یک شکلک غمگین در اینجا به سادگی مورد نیاز است ، وحشتناک است ، حتی اگر وضوح را در رایانه مورد نظر به حداقل برسانید ، حداکثر کاری که می توان انجام داد پیکربندی BIOS و انتخاب یک مورد در بوت لودر است. اما آیا در واقع KVM برای این مورد نیاز نیست؟.. و برای هر چیز دیگری، رادمین و مانند آن وجود دارد.

این سومین تغییر در موضوع IP KVM است، این بار مفهوم به طور کامل بازنگری شده است، بیایید شروع به ساختن چیز جدیدی کنیم. چیزهای جالب زیادی وجود خواهد داشت، صفحه را ترک نکنید. یک دستگاه غیر معمول دیگری ظاهر می شود، تقریباً دور بیندازید همه اجزای قدیمی، به آردوینو بومی ما برگردید و بیایید کمی هکر بازی کنیم.

برای کسانی که به تازگی عضو شده اند، خلاصه ای از سری قبل:


  • ما IP KVM را روی آردوینو و رزبری پای مونتاژ کردیم، معلوم شد که گران و با کیفیت ویدئویی ضعیف است.

  • OrangePI و Atmega16u2 ارزان یاد گرفتند، اما کیفیت تصویر همچنان منزجر کننده است.

و در نهایت در این مقاله تمامی معایب موارد قبلی اصلاح خواهد شد. تاکید ویژه بر کاهش حداکثری هزینه قطعات خواهد بود.

طبق سنت، اجزای دستگاه مونتاژ شده را در نظر بگیرید:

1. دوست قدیمی ما Atmega16u2:

این تنها مؤلفه ای است که از مقالات قبلی منتقل می شود.

2. ESP8266 بدنام، در این مورد ESP8266-12e:


می توانید از نسخه دیگری از ESP8266 استفاده کنید، فقط باید تعداد و مکان پورت ها را در نظر بگیرید.

3. و در واقع قهرمان مناسبت LKV373A


به لطف این دستگاه، امکان انتقال ویدئو از طریق شبکه محلی، با بالا فراهم شد
وضوح تا فول اچ دی

برنامه اقدام به شرح زیر است:

  1. مخفی کردن و جستجو: به دنبال LKV373A که در آن در شبکه تحت چه آدرس IP مخفی شده است.
  2. بازی یک هکر: آپلود سیستم عامل، بازنشانی رمزهای عبور و پیکربندی LKV373A
  3. پیدا کردن دوستان جدید: ESP8266، Arduino IDE و تصاویر خنده دار
  4. فینال جشن ما همه اجزا را به هم متصل می کنیم و ضربه های کلید را از طریق telnet انتقال می دهیم

LKV373A، پس زمینه

پس بیایید شروع کنیم! LKV373A یا HDMI Extender دستگاهی برای گرفتن تصاویر به طور مستقیم از درگاه hdmi و پخش به شبکه محلی است که به این دستگاه ها اکستندر hdmi نیز گفته می شود. همانطور که توسط سازندگان برنامه ریزی شده است، مجموعه ای از چنین دستگاه هایی باید از یک فرستنده (فرستنده) و یک گیرنده (گیرنده)، با نام های TX و RX تشکیل شود. احتمالاً باید از آنها استفاده شود تا سود بیشتری برای سازنده به ارمغان بیاورد ، فقط به صورت جفت. اما شخصی با نام مستعار Danman وجود داشت که در اینجا پیوندی به وبلاگ او وجود دارد که به نحوه عملکرد آن علاقه مند شد. او Wireshark را باز کرد، ترافیک منتقل شده توسط دستگاه TX را استشمام کرد، چه اتفاقی افتاد؟

جریان ویدئو بدون هیچ گونه رمزگذاری منتقل می شود و با کمک VLC Player "می توانید بدون هیچ تلاش اضافی آن را تماشا کنید. اما او به همین جا بسنده نکرد، "احساس کرد": رابط وب، TTL، و telnet، و حتی فریمور را با یک برنامه نویس کشیده است.درباره او در وبلاگش این را به تفصیل توضیح داده است. سیستم عاملی که در وهله اول به ما علاقه مند است نیز در آنجا پست شده است: IPTV_TX_PKG_v4_0_0_0_20160427.PKG.در این سیستم عامل، رابط وب با تنظیمات پیشرفته و نه مانند استاندارد، فقط دکمه به روز رسانی. علاوه بر این، در این سیستم عامل دارای یک telnet با دستورات زیادی برای پیکربندی است. به کمک این سیستم عامل است که ما HDMI Extender را برای وظایف خود مجدداً پیکربندی می کنیم. من سیستم عامل و همه موارد لازم را ارسال کردم. در github اینجا لینک است، بعداً به آن نیاز خواهیم داشت، اما در حال حاضر در حال پایان دادن به تئوری هستیم. بیایید به تمرین برویم.

فرستنده

به دنبال LKV373A آنلاین هستید

من همان اکستندر Danman(y) را گرفتم. هر آنچه در زیر توضیح داده خواهد شد برای HDMI Extender LKV373A نسخه V3.0 مناسب است!

LKV373A را به شبکه محلی متصل می کنیم، برق را روشن می کنیم. اکنون بیایید سعی کنیم مطمئن شویم که دستگاه در پینگ شبکه 192.168.1.238 قابل مشاهده است.

192.168.1.238 آدرس IP پیش فرض است. اگر سفت‌افزار قدیمی روی توسعه‌دهنده آدرس را تغییر نمی‌دهد، صرف نظر از اینکه سرور DHCP در شبکه وجود دارد یا نه. نسخه‌های میان‌افزار جدیدتر فقط در صورتی از IP پیش‌فرض استفاده می‌کنند که دستگاه نتواند آدرسی را از DHCP دریافت کند. در صورت درخواست پینگ. پاسخ داده شد، ادامه دهید اگر نه، ناامید نشوید، سعی کنید اکستندر را مستقیماً به پورت LAN کامپیوتر وصل کنید و از sniffer استفاده کنید.

فلش میزنیم

HDMI Extender پیدا شد، بیایید به سمت سیستم عامل برویم. به github بروید و هر چیزی که در آنجا پست شده است را دانلود کنید. حالا بیایید رابط وب توسعه دهنده را از طریق مرورگر باز کنیم و تصویر زیر را ببینیم:


روی «مرور ...» کلیک کنید، میان‌افزار، فایلی به نام IPTV_TX_PKG_v4_0_0_0_20160427.PKG را انتخاب کنید و روی «ارتقا» کلیک کنید. تادام! سیستم عامل تکمیل شده است، اکنون برای تنظیم مجدد رمز عبور از طریق telnet به LKV373A متصل می شویم.

دستور اتصال چیزی شبیه Telnet 192.168.1.238 9999 خواهد بود، جایی که 9999 پورت اتصال به آن است. CEP هشدار می دهد: آدرس دریافت شده از DHCP را می توان با استفاده از اسکنر شبکه پیدا کرد.

اتصال از طریق تلنت

هنگام اتصال، پیام زیر باید ظاهر شود:

===================================== سرور IPTV TX========== ============================== ورودی>

ما لیست می نویسیم در پاسخ، لیستی از دستورات را دریافت می کنیم:

===================================== سرور IPTV TX========== ============================= ورودی>list set_group_id get_group_id set_dhcp get_dhcp set_uart_baudrate get_uart_baudrate set_static_ip get_static_ip set_mac_address get_hit_context_address get_mac_ fig set_session_key set_ device_name get_device_name set_video_bitrate get_video_bitrate set_downscale_mode get_downscale_mode set_video_out_mode get_video_out_mode set_streaming_mode get_streaming_mode get_fw_version get_company_id factory_reset راه اندازی مجدد لیست خروج

برای بازنشانی تمام تنظیمات و رمز عبور، از دستور factory_reset استفاده کنید. یک دستور می نویسیم، enter را فشار می دهیم و این تصویر را می گیریم:

Input>factory_reset پردازش بازنشانی کارخانه! سیستم بعد از چند ثانیه راه اندازی مجدد می شود! اتصال توسط میزبان خارجی بسته شده.

رابط وب

اکنون می توانیم دستگاه را همانطور که نیاز داریم پیکربندی کنیم. بیایید به رابط وب برویم. ما از ورود استاندارد استفاده می کنیم: رمز عبور مدیریت: 123456 و اینجاست، رابط وب "مطلوب" با تنظیمات اضافی:


اگرچه امکانات در رابط وب افزایش یافته است، اما هنوز برای اهداف ما کافی نیست. به خصوص فقدان تنظیمات رایگان بیشتری از نظر پخش جریانی وجود دارد، لیستی از آدرس‌های IP که می‌توانید به آن‌ها استریم کنید، به دور از راحت‌ترین آنها وجود دارد. البته چندپخشی وجود دارد، اما بهتر است آن را برای تلویزیون بگذارید. محدودیت ها را می توان دور زد، بعداً در مورد آن بیشتر خواهیم شد.

در اینجا، دستگاه در شبکه پیدا شد، سیستم عامل "غلبه شد"، رمزهای عبور بازنشانی شدند. فرستنده تقریباً آماده حرکت به سمت گیرنده است.

گیرنده

بیایید در مورد دستگاه تصمیم بگیریم که تحت کدام سیستم عامل، جریان را منتقل کنیم. من فکر می کنم شما عذاب انتخاب را تجربه نخواهید کرد، فقط دو گزینه وجود دارد:

پنجره ها

برای ویندوز، من چندین پلیر را امتحان کردم، اما نتایج خیلی خوب بود. هنگام ضبط و سپس پخش یک جریان ویدیویی، تاخیری وجود دارد که در درجه اول به پخش کننده ای که جریان را پخش می کند بستگی دارد. در بازیکنان مختلف، تاخیر از یک ثانیه تا پنج یا حتی بیشتر متغیر بود. بهترین از همه، در ویندوز، VLC Player خود را نشان داد.

بریم به کسب و کار برسیم. VLC Player را راه اندازی کنید، مورد "Open URL…" را در منوی کشویی "Media" از بالا انتخاب کنید، udp://@:5004 را در قسمت آدرس شبکه بنویسید، کادر "Show advanced options" را علامت بزنید و تنظیمات خود را تنظیم کنید. مقدار در قسمت "Caching"، این پارامتر به صورت جداگانه تعیین می شود. هرچه مقدار در این زمینه کمتر باشد، تأخیر کمتر است، اما مقدار بسیار کم می تواند منجر به «مصنوعات» و افت فریم شود، همه چیز به زیرساخت شبکه محلی بستگی دارد. بهترین نتیجه ای که می توانستم به دست بیاورم تاخیر در حدود یک ثانیه است. در لینوکس، نتایج در حدود 200-300 میلی ثانیه بسیار بهتر است.

لینوکس

همانطور که تمرین نشان می دهد، بهترین نتایج هنگام استفاده از یکسری برنامه های socat و mplayer به دست می آید. من اوبونتو را روی رایانه خود نصب کرده ام، بنابراین دستور نصب socat به این صورت خواهد بود:

sudo apt-get install socat

Mplayer به طور مشابه نصب شده است:

sudo apt-get نصب mplayer

خوب، بیایید به توصیه Danman توجه کنیم:

sudo iptables -t raw -A PREROUTING -p udp -m طول -طول 28 -j DROP

این دستور به منظور حذف بسته های به اصطلاح "Zero Length UDP Packets" از جریان مورد نیاز است - بسته هایی با اندازه صفر که جریان را "انسداد" می کنند.

بیا بریم زنده!

گیرنده آماده است، می توانید پخش را شروع کنید! در کنسول کامپیوتر گیرنده ifconfig یا ipconfig را تایپ می کنیم، بسته به سیستم عامل، آدرس IP گیرنده را به خاطر می آوریم و به رابط وب فرستنده باز می گردیم. بیایید رابط وب را باز کنیم، اگر به طور ناگهانی آن را بسته بودیم، ورود، رمز عبور را وارد کنید و مستقیماً در نوار آدرس مرورگر بنویسید:

Http://TransmitterIP/dev/info.cgi?action=streaminfo&udp=n&rtp=y&multicast=n&unicast=y&mcastaddr=ReceiverIP&port=5004

آدرس های IP خود را جایگزین کنید و اینتر را فشار دهید. این خط HDMI Extender را پیکربندی می‌کند تا ویدیوی ضبط‌شده را به IP مورد نظر شما پخش کند و چندپخشی را خاموش کند.

VLC را در ویندوز اجرا کنید. یا در ترمینال لینوکس می نویسیم:

Socat UDP-RECV:5004 - | پخش کننده-

ابرا کادابرا! و اینجا دسکتاپ زنده ما است یا نه.


بنابراین، با کمی هک، دستگاه را به انجام کاری که می‌خواستیم رساندیم.

ما انتقال ویدئو را فهمیدیم، به کنترل از راه دور می رویم.

انتقال کنترل

انتخاب لوازم جانبی

زیرا هزینه HDMI Extender "و کم است، حدود 1800 روبل، و همچنین به دلیل نظراتی که می گویند کمی گران است، من این شعار را مطرح کردم:" شما IP KVM را 2000 روبل می دهید! در مورد غم انگیز، من می خواهم برای باور به آینده ای روشن. برای رسیدن به هدف، ما به عناصر بسیار ارزانی نیاز داریم، انتخاب من به عنوان کنترل کننده بر روی ESP8266 و همان Atmega (8/16/32)u2 به عنوان یک محرک افتاد.

البته می توانید برای نقش دستگاه اجرایی (صفحه کلید) نامزدهای دیگری نیز در نظر بگیرید. سفت‌افزاری که کیبورد را شبیه‌سازی می‌کند در کتابخانه LUFA نوشته شده است. این کتابخانه برای کل خانواده AVR با اتصال USB قابل استفاده است. از این نتیجه می شود که یک میکروکنترلر احتمالا ارزانتر را می توان به عنوان شبیه ساز صفحه کلید انتخاب کرد. این جای تفکر است، اما بیایید ادامه دهیم.

می توانید ESP8266 را با قیمت حدود 90 روبل، Atmega (8/16/32)u2 را با حدود 100 روبل، و حتی اگر در دسته های کوچک 5 قطعه یا بیشتر مصرف کنید، ارزان تر خریداری کنید. البته مواد مصرفی برای بستن میکروکنترلرها مورد نیاز خواهد بود، اما هزینه آنها بسیار کم است، بنابراین من آنها را در نظر نمی گیرم.

ESP8266

این شگفتی صنعت چین نیازی به معرفی ندارد، بنابراین فقط می توانم بگویم که در این پروژه از نسخه ESP8266-12e استفاده کردم. البته می توانید از نسخه های دیگر استفاده کنید، فقط باید محل پورت ها را در نظر بگیرید، زیرا. در این نسخه از یکی از پورت های ESP8266 برای روشن کردن پاور Atmega (8/16/32) u2 استفاده می شود که در نمودار زیر نشان داده شده است.

سیستم عامل

سیستم عامل ESP8266 در محیط ArduinoIDE نوشته شده است، بنابراین بیایید آخرین نسخه را از وب سایت توسعه دهنده دانلود کنیم. در مرحله بعد، باید پشتیبانی از ESP8266 را اضافه کنید - ساده ترین راه را می توانید در این پیوند پیدا کنید. در همین صفحه می توانید اطلاعات مفید زیادی مانند منبع تغذیه و نمودار اتصال TTL را بیابید. برای کسانی که نمی دانند از ESP8266 استفاده می کند به شدت 3.3 ولت!اگر به توانایی های خود اطمینان ندارید، بهتر است از یک نسخه سازگار با USB مانند NodeMCU استفاده کنید:


اگر همه چیز آماده است، ArduinoIDE را باز کنید و طرح من را کپی کنید:

طرح

#عبارتند از #عبارتند از #عبارتند از #عبارتند از #عبارتند از #عبارتند از #define MAX_SRV_CLIENTS 3 صفحه کلید HIDKeyboard. const char* host = "esp8266"; const char* ssid = ""; const char* pass = ""; intbootdev=0; intmodeswitch = 0; //اعداد پورت، در اجراهای مختلف ESP8266 ممکن است متفاوت باشند #define Port1 15 #define Port2 14 #define Port3 12 #define Port4 4 #define Port5 5 //رنگ دکمه رشته ColorB1; StringColorB2; StringColorB3; StringColorB4; StringColorB5; سرور ESP8266WebServer(80); WiFiClient serverClients; const char* serverIndex = "

BACK";//به روز رسانی //بازگشت به صفحه اصلی void handleRedirect()( محتوای رشته = " "; server.send(200، "text/html"، محتوا); ) //صفحه مجوز WI-FI void handleLogin()( string msg = ""; if (server.hasArg("SSID") && server.hasArg ("PASSAP"))( if ((server.arg("SSID") != NULL) && (server.arg("PASSAP") != NULL))( سرصفحه رشته = "HTTP/1.1 301 OKrrnمکان: /rnCache -کنترل: no-cachernrn"؛ server.sendContent(header)؛ رشته web_ssid = server.arg ("SSID")؛ رشته web_pass = server.arg ("PASSAP")؛ ssid = web_ssid.c_str();//translate رشته به یک آرایه کاراکتر به سبک C pass = web_pass.c_str(); Serial.println(); Serial.print("SSID"); Serial.println(ssid); Serial.print("Pass"); Serial.println ( pass); WiFi.begin(ssid, pass); digitalWrite(LED_BUILTIN, LOW); ESP.reset(); return; ) msg ​​= "ssid/password اشتباه است! دوباره امتحان کنید."; Serial.println("ورود به سیستم" ناموفق") ;) محتوای رشته = "
نام نقطه دسترسی و رمز عبور را وارد کنید
";//صفحه برای وارد کردن محتوای SSID و رمز عبور += "Name AP:
"; content += "رمز عبور:

"; محتوا +="
"+msg+"
"؛ content += "به روز رسانی سفت افزار"؛ server.send(200، "text/html"، content); ) void handleNotFound()( string message = "File Not Foundnn"; message += "URI: "; message += server.uri(); message += "nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "nArguments: "; message += server .args();message += "n";for(uint8_t i=0;i 0)( int StPort؛ if (digitalRead(UsePin) == 1) (//وضعیت پورت digitalWrite(UsePin، LOW) را بررسی می کند؛ StPort = 0؛ ) دیگری ( digitalWrite(UsePin، HIGH؛ StPort = 1. ) digitalWrite(LED_BUILTIN, HIGH);//نشان دهنده هنگام دریافت داده ها Serial.print("Port"); Serial.print(UsePin); Serial.print("="); Serial.println(StPort)؛ تاخیر(500 ) ؛ digitalWrite(LED_BUILTIN, LOW)؛ return(StPort)؛ ) return(-1); ) //در انتظار اتصال int clientConnect(int Seconds)( Serial.print("connection"); for (int i=0; i<= Seconds; i++){ WiFi.begin(ssid, pass); digitalWrite(LED_BUILTIN, LOW); delay(250); digitalWrite(LED_BUILTIN, HIGH); delay(250); Serial.print(" "); Serial.print("."); if (WiFi.status() == WL_CONNECTED) return(0); } return(1); Serial.println(); } void setup(void){ Serial.begin(115200); delay(1000); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); //uint8_t i = 0; if (modeswitch == 0) WiFi.mode(WIFI_STA);//если переменная modeswitch = 0 преход в режим клиента Serial.println(); Serial.println(); if (clientConnect(30) != 0) modeswitch = 1;//старт подключения с ожиданием если не подключился переход в режим точки доступа if (modeswitch == 1){ Serial.println(""); Serial.println("WiFi switch AP mode"); //WiFi.mode(WIFI_AP_STA);Это для режима клиент + точка доступа. Закоментил потому что притормаживало WiFi.mode(WIFI_AP); WiFi.softAP("TD", "testtest"); Serial.print("AP mode ip adress "); Serial.println(WiFi.softAPIP()); digitalWrite(LED_BUILTIN, LOW); } if (modeswitch != 1){ WiFiServer server(23); Serial.println(); Serial.print("Client mod ip address: "); Serial.println(WiFi.localIP()); digitalWrite(LED_BUILTIN, LOW); } MDNS.begin(host); pinMode(Port1, OUTPUT); pinMode(Port2, OUTPUT); pinMode(Port3, OUTPUT); pinMode(Port4, OUTPUT); pinMode(Port5, OUTPUT); if (modeswitch == 1){ //Действия при переходе по ссылкам server.on("/", handleLogin);//Страница ввода логина(SSID) и пароля //Обновление прошивки server.on("/upload", HTTP_GET, (){ server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); server.on("/update", HTTP_POST, (){ server.sendHeader("Connection", "close"); int uperror = Update.hasError(); Serial.printf("UPERR %unRebooting...n",Update.hasError()); if (uperror == 0) server.send(200, "text/html", "Firmware update successfully BACK"); else server.send(200, "text/html", "Update error BACK"); ESP.restart(); },(){ HTTPUpload& upload = server.upload(); if(upload.status == UPLOAD_FILE_START){ Serial.setDebugOutput(true); WiFiUDP::stopAll(); Serial.printf("Update: %sn", upload.filename.c_str()); if (upload.filename == NULL) { Serial.printf("ERROR: zero file size"); server.send(200, "text/html", "اندازه فایل صفر برگشت")؛ return(-1); ) uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; if(!Update.begin(maxSketchSpace))(//شروع با حداکثر اندازه موجود به روز رسانیSerial.E); ) ) else if(upload.status == UPLOAD_FILE_WRITE)( if(Update.write(upload.buf, upload.currentSize) != upload.currentSize)( Update.printError(Serial); ) ) else if(upload.status = = UPLOAD_FILE_END)( if(Update.end(true))( //true برای تنظیم اندازه روی پیشرفت فعلی Serial.printf("موفقیت به روز رسانی: %unRebooting...n"، upload.totalSize); .printError(Serial); ) Serial.setDebugOutput(false); ) yield(); )); //Manage ports server.on("/PoRt1", ( controlPin(Port1); handleRedirect();//go to main صفحه ))؛ server.on("/PoRt2"، ( controlPin(Port2); handleRedirect(); ))؛ server.on("/PoRt3"، ( controlPin(Port3)؛ handleRedirect(); ))؛ سرور. on("/PoRt4"، ( controlPin(Port4); handleRedirect(); )); server.on("/PoRt5", ( controlPin(Port5); handleRedirect(); ))) server.on("/reboot", ( rebootdev = 1;//reboot هنگام رفتن به صفحه اصلی handleRedirect(); )); server.onNotFound(handleNotFound);//اگر چنین صفحه ای وجود نداشته باشد //server.begin(); MDNS.addService("http"، "tcp"، 80); Serial.println(); Serial.println("سرور HTTP شروع شد"); ) server.begin(); ) void loop(void)(uint8_t i; if (modeswitch == 1) server.handleClient(); delay(100); if (modeswitch != 1)( if (WiFi.status() != WL_CONNECTED) clientConnect(30 else ( digitalWrite(5, HIGH);// power on ATMEGA16U2 digitalWrite(LED_BUILTIN, LOW); ) ) سرور WiFiServer(23); server.setNoDelay(true); server.begin(); keyboard.begin(); while(WiFi.status() == WL_CONNECTED) ( if (server.hasClient())( for(i = 0; i< MAX_SRV_CLIENTS; i++){ //find free/disconnected spot if (!serverClients[i] || !serverClients[i].connected()){ if(serverClients[i]) serverClients[i].stop(); serverClients[i] = server.available(); Serial.println("New client: "); Serial.print(i); continue; } } //no free/disconnected spot so reject WiFiClient serverClient = server.available(); serverClient.stop(); } //check clients for data for(i = 0; i < MAX_SRV_CLIENTS; i++){ if (serverClients[i] && serverClients[i].connected()){ if(serverClients[i].available()){ //get data from the telnet client and push it to the UART String bufkey; while(serverClients[i].available()) bufkey += (serverClients[i].read());//сбор данных в строковую переменную if (bufkey != 0) { bufkey = bufkey.substring(0, 8);//обрезка строки int key = bufkey.toInt();//перевод в целочисленные switch (key){ case 277980: keyboard.pressSpecialKey(F1); break; case 277981: keyboard.pressSpecialKey(F2); break; case 277982: keyboard.pressSpecialKey(F3); break; case 277983: keyboard.pressSpecialKey(F4); break; case 27914953: keyboard.pressSpecialKey(F5); break; case 27914955: keyboard.pressSpecialKey(F6); break; case 27914956: keyboard.pressSpecialKey(F7); break; case 27914957: keyboard.pressSpecialKey(F8); break; case 27915048: keyboard.pressSpecialKey(F9); break; case 27915049: keyboard.pressSpecialKey(F10); break; case 27915051: keyboard.pressSpecialKey(F11); break; case 27915052: keyboard.pressSpecialKey(F12); break; case 1310: keyboard.pressSpecialKey(ENTER); break; case 130: keyboard.pressSpecialKey(ENTER); break; case 27: keyboard.pressSpecialKey(ESCAPE); break; case 8: keyboard.pressSpecialKey(BACKSPACE); break; case 9: keyboard.pressSpecialKey(TAB); break; case 32: keyboard.pressSpecialKey(SPACEBAR); break; case 27915012: keyboard.pressSpecialKey(INSERT); break; case 27914912: keyboard.pressSpecialKey(HOME); break; case 27915312: keyboard.pressSpecialKey(PAGEUP); break; case 27915212: keyboard.pressSpecialKey(END); break; case 27915412: keyboard.pressSpecialKey(PAGEDOWN); break; case 279167: keyboard.pressSpecialKey(RIGHTARROW); break; case 279168: keyboard.pressSpecialKey(LEFTARROW); break; case 279166: keyboard.pressSpecialKey(DOWNARROW); break; case 279165: keyboard.pressSpecialKey(UPARROW); break; case 127: keyboard.pressSpecialKey(DELETE); break; case 27915112: keyboard.pressSpecialKey(DELETE); break; case 4: keyboard.pressSpecialKey((LCTRL | ALT), DELETE); break; //CTRL+ALT+DELETE нажать Ctrl + d case 6: keyboard.pressSpecialKey(ALT, F4); break; //alt+f4 нажать Ctrl + f case 19: keyboard.pressSpecialKey(ALT | SHIFT); break;//смена раскладки нажать Ctrl+s case 2: keyboard.pressSpecialKey(LCTRL | SHIFT); break;//смена раскладки нажать Ctrl+b //управление логическим состоянием портов case 17: controlPin(Port1); break;//Ctrl+q case 23: controlPin(Port2); break;//Ctrl+w case 5: controlPin(Port3); break;//Ctrl+e case 18: controlPin(Port4); break;//Ctrl+r case 20: controlPin(Port5); break;//Ctrl+t default: keyboard.pressKey(key); break;//нажать клавишу } keyboard.releaseKey();//отпустить клавишу Serial.print(" string: "); Serial.print(key);//для отладки Serial.print(" KEY: "); Serial.write(bufkey.toInt()); bufkey = "0";//на всякий случай обнулить } } } } //check UART for data if(Serial.available()){ size_t len = Serial.available(); uint8_t sbuf; Serial.readBytes(sbuf, len); //push UART data to all connected telnet clients for(i = 0; i < MAX_SRV_CLIENTS; i++){ if (serverClients[i] && serverClients[i].connected()){ serverClients[i].write(sbuf, len); delay(1); } } } } }

کتابخانه مورد نیاز را وصل کنید:

برگه «Sketch» ​​→ «Include Library» → «Add.ZIP. Library» را انتخاب کنید. ما سفت افزار را کامپایل و آپلود می کنیم. برای دانلود فریمور، ESP8266 TTL را وصل می کنیم، پورت مورد نظر را در آردوینو آی دی تنظیم می کنیم. تنظیمات باید چیزی شبیه به این باشد:


برای بارگذاری سیستم عامل، باید پورت GPIO0 را به زمین کوتاه کنید و با اتصال کوتاه پورت Reset به زمین، میکروکنترلر را مجددا راه اندازی کنید. من با جزئیات نقاشی نمی کنم، برای اینکه مقاله باد نکنم، گوگل به شما کمک می کند.

منطق ESP8266 به این صورت است: هنگامی که برق اعمال می شود، میکروکنترلر سعی می کند برای حدود سی ثانیه به نقطه دسترسی FI-WI متصل شود:

اگر اتصال موفق شد: پورت 23 را باز می کند که می توانید با استفاده از telnet به آن متصل شوید و با زدن کلید انتقال دهید. علاوه بر کلیدها، می‌توانید ترکیب‌هایی را که بر روی "Ctrl + کلید" ساخته شده‌اند ارسال کنید که ترکیب‌های خاصی را فشار می‌دهد. به عنوان مثال، اگر "Ctrl + d" را پاس کنید، CTRL + ALT + DELETE در رایانه مدیریت شده فشار داده می شود.

همچنین ترکیباتی برای کنترل پورت های ESP8266 وجود دارد، به عنوان مثال، می توانید یک رله وصل کنید و از ترکیب "Ctrl + q" برای روشن و خاموش کردن رله استفاده کنید، در نتیجه کامپیوتر کنترل شده را از راه دور روشن و خاموش کنید. این و ترکیبات دیگر را می توان در کد منبع یافت.

اگر شکست خورد: ESP8266 وارد حالت AP با نام "TD"، رمز عبور "تست تست" می شود و یک رابط وب کوچک را باز می کند که در 192.168.4.1 موجود است، که در آن می توانید تنظیمات اتصال از طریق WI-FI را پیکربندی کنید.


بنابراین، دستگاه را می توان به راحتی به یک نقطه دسترسی دیگر متصل کرد. بله، اینجا یک مگس پنهان شده است، برای اینکه IP KVM ما کار کند، هم به کابل LAN و هم به Wi-Fi نیاز دارید. این بهای ارزانی دستگاه خواهد بود.

ما ESP8266 را فهمیدیم، همه چیز با Atmega16u2 مانند مقالات قبلی است، ما آن را با برنامه Flip فلش می کنیم، سیستم عامل در آرشیو دانلود شده از github است.

اتصال قطعات

من یک نمودار برای اتصال صحیح اجزاء پیوست می کنم. فقط به خاطر داشته باشید که این یک طرح تقریبی است، برای وضوح کار می کند و ادعا نمی کند که ایده آل است. هر کس مختار است آن را هر طور که دوست دارد «تجهیز» کند.


اجازه دهید چند نکته را توضیح دهم: ترانزیستور در نمودار برای روشن شدن Atmega16u2 پس از بارگذاری ESP8266 مورد نیاز است، زیرا با روشن شدن ESP8266 اطلاعات دیباگ به تمام پورت های TX منتقل می شود و اگر Atmega16u2 روشن باشد و متصل به رایانه، یک جریان داده به آن منتقل می شود که با حجم آن درایور از کار می افتد. به طور قطع مشخص نیست که در این لحظه چه اتفاقی می افتد، احتمالاً بافر درایور پر شده است، اثر بسیار ناخوشایند است: صدها کلید فشار داده می شود (نرم افزار)، اگر یک ویرایشگر متن باز شود، دسته ای از چرندیات را در آنجا می ریزد. در حالی که تمام کلیدهای سرویس می چسبند و در نتیجه کار با کیبورد غیرممکن می شود. برای جلوگیری از این امر، پس از بارگذاری ESP8266، باید به Atmega16u2 برق اعمال شود. سیستم عامل این را در نظر می گیرد.

البته جایگزینی برای این طرح وجود دارد، اما این گزینه ای برای افراد ثروتمند یا تنبل است. و به هر حال، این گزینه موارد فوق را لغو نمی کند:


در تصویر، آردوینو UNO بدون تراشه Atmega328p به آنالوگ چینی NodeMCU متصل شده است. خط 3.3 ولت به خط همان سطح ولتاژ آردوینو وصل می شود و زمین نیز وصل می شود و پایه GPIO2 (ESP8266) به پایه RX در آردوینو وصل می شود (خطا باید به TX متصل شود).

بررسی نهایی

ما از طریق telnet به پورت 23 وصل می شویم و عملکرد را بررسی می کنیم. می توانید این کار را انجام دهید: در ویندوز، از دستور telnet استفاده کنید.

در لینوکس کمی دشوارتر خواهد بود:

تلنت $ 192.168.***.*** در حال تلاش 192.168.***... به 192.168.***.*** متصل شد. کاراکتر فرار "^]" است. ^]تلنت>ل

همه چیز آماده است، می توانیم عملکرد دستگاهی را که ایجاد کرده ایم بررسی کنیم. بگذارید ترکیبات احتمالی را برای فشار دادن "Alt + Tab"، "Ctrl + Alt + Del" و غیره به شما یادآوری کنم. می توانید در طرح ببینید. تمام، سومین تجسم IP KVM DIY آماده است.

جمع بندی

طرفداران:

  • احتمالاً مهمترین مزیت آن قیمت است، معلوم شد که 2000 روبل برآورده می شود
  • در حال حاضر هیچ شکایتی در مورد کیفیت ویدیو وجود ندارد، شما می توانید بدون هیچ مشکلی تا Full HD استریم کنید
  • امکان گسترش عملکرد با افزودن تا چهار رله یا سایر محرک ها.

معایب:

  • نیاز به اتصال از طریق Wi-Fi و کابل Lan
  • هنگامی که با VGA استفاده می شود، یک آداپتور مورد نیاز است که به طور طبیعی بر هزینه آن تأثیر می گذارد

به طور کلی، دستگاه قابل توجه است، البته، رقیب سریال IP KVM با تمام "خوبی" آنها نیست، اما از نظر قیمت برنده می شود. و برای استفاده خانگی، و شاید هم نه فقط، کاملا مناسب است.

من می خواهم از این فرصت استفاده کنم و از کاربر DaylightIsBurning تشکر کنم! این مرد مهربان مسیر درست را برای حفاری پیشنهاد کرد.

از توجه شما متشکرم به زودی میبینمت!

این مقاله با این تصور نوشته شده است - با تشکر فراوان از نویسنده! این مقاله تقریباً موفق شد سوئیچ IP KVM خودم را بسازد و بسیار عالی است! اما من تقریباً دلیل آن را توضیح خواهم داد. بله، همانطور که نویسنده نوشته است، همه چیز در آنجا کار می کند ... تا راه اندازی مجدد در بایوس، همه جادو در آنجا از بین می رود و هر چقدر تلاش کنید، هیچ اتفاقی نمی افتد.

تصمیم بر این شد که این سوء تفاهم تاسف بار و تا حد امکان کم هزینه و فشرده اصلاح شود. بیایید با کلیشه های Raspberry Pi و Arduino شروع کنیم و مورد بعدی بر روی سخت افزار دیگری ادامه خواهد یافت.

بنابراین آنچه ما نیاز داریم:

1. یک کارت ضبط ویدیویی باید از درایور UVC پشتیبانی کند، مانند این. گزینه‌ها
کامل در aliexpress و دیگر فروشگاه های چینی.

UVC یک درایور منبع باز استاندارد است که به طور پیش فرض در اکثر توزیع های لینوکس گنجانده شده است، درایورهای دیگر ممکن است مشکل ساز باشند.

2. تبدیل VGA به AV:



توجه داشته باشید! شما دقیقا به VGA به AV نیاز دارید و نه برعکس.

3. آردوینو UNO، یعنی UNO، از آنجایی که دارای تراشه Atmega16u2 است، قبل از هر چیز ما را مورد توجه قرار می دهد. اینجا کنار پورت USB است، آردوین هایی با تراشه Atmega8u2 نیز وجود دارد که با هر دو کار می کند.

4. و البته Raspberry Pi، من نسخه 2 b را داشتم، بنابراین همه چیزهایی که در این مقاله نوشته شده است برای او مرتبط است، اما به طور کلی، فکر می کنم با سایر مدل های تمشک نباید مشکل خاصی وجود داشته باشد.

در حال بارگذاری توزیع

خوب، داده های ورودی داده شده است، بیایید شروع کنیم. من از توزیع 2015-05-05-raspbian-wheezy استفاده کردم، احتمالاً این مهم نیست، دستکاری های بیشتر باید برای هر توزیع مبتنی بر دبیان مناسب باشد.

برد فیلم برداری را به رزبری وصل می کنیم، بهتر است مستقیماً بدون استفاده از کابل های USB به USB وصل شود، مخصوصاً آن که همراه برد است، در غیر این صورت ممکن است ترمز ویدیو، یخ زدگی تمشک و ... رخ دهد.

به کنسول بروید، بسته ها را به روز کنید:

sudo apt-get update && sudo apt-get upgrade -y

انتقال ویدئو

بررسی کنید که آیا تابلو تعیین شده است:

Ls /dev/video*
خروجی آن باید چیزی شبیه به: /dev/video0 باشد.

Motion را نصب کنید، تصویر گرفته شده را از طریق آن پخش خواهیم کرد:

sudo apt-get install motion -y
ویرایش پیکربندی autorun:

سودو نانو /etc/default/motion
start_motion_daemon را روی "بله" تنظیم کنید. ذخیره تغییرات Ctrl + x، y، Enter.

ویرایش خود پیکربندی حرکت (a):

sudo nano /etc/motion/motion.conf
مقادیر پارامترها را به صورت زیر تغییر دهید:

پارامتر راه اندازی برنامه را به عنوان یک سرویس تعریف می کند:

دیمون روشن است
این پارامترها وضوح تصویر ارسال شده را تعیین می کنند، تنظیم وضوح بالاتر منطقی نیست، زیرا. ضبط ویدیو محدود به استانداردهای PAL یا SECAM است که وضوح آن 720x576 است. به هر حال، این یک نقص ناخوشایند است، اما بعداً در مورد آن بیشتر خواهیم کرد.

عرض 800 ارتفاع 600
نرخ فریم:

نرخ فریم 25
غیرفعال کردن ذخیره اسکرین شات ها:

output_normal خاموش است
کیفیت انتقال تصویر:

کیفیت وب کم 100
نرخ فریم:

webcam_maxrate 25
لغو محدودیت در اتصال از IP دیگر

Webcam_localhost خاموش است
ذخیره تغییرات Ctrl + x، y، Enter.

تمشک را دوباره بارگیری کنید:

راه اندازی مجدد sudo
اگر همه چیز به درستی انجام شود، چند دقیقه منتظر می مانیم، LED روی برد فیلمبرداری باید روشن شود.

مرورگر را به پورت رزبری 8081 وصل می کنیم و یک مستطیل خاکستری یا آبی با زمان در حال اجرا از زیر می بینیم.

روند شروع شده است، ما به دنبال قربانی هستیم تا سیگنالی را از پورت VGA بگیرد، آن را به پورت VGA IN مبدل و کارت ضبط ویدیو را به "VIDEO OUT" وصل می کنیم. شما باید چیزی شبیه این عکس بگیرید، نترسید، من کابل بدی دارم، بنابراین تصویر "دوبرابر" می شود، من آن را با یک تصویر دیگر امتحان کردم، بهتر بود، اما وضوح قابل تغییر نیست. 720x576 محدودیت مبدل و کارت فیلمبرداری است که با تمام میل نمی توان بر آن غلبه کرد.

خوب، آنها یاد گرفتند که تصویر را منتقل کنند، تنها چیزی که باقی می ماند انتقال کنترل است.

انتقال کنترل

برای این کار، همانطور که حدس زده اید، از آردوینو استفاده می کنیم. انتخاب به دلیلی روی Arduino UNO افتاد، تراشه ای به نام Atmega16u2 وجود دارد که برای اهداف ما بسیار ضروری است، فقط به لطف آن من توانستم بایوس رایانه را مجبور کنم arduino را به عنوان یک صفحه کلید USB تشخیص دهد. به طور پیش فرض، به عنوان بخشی از برد آردوینو، این تراشه به عنوان مبدل USB به سریال برای آپلود سیستم عامل روی میکروکنترلر Atmega328p، یک تراشه مستطیلی بزرگ در برد آردوینو، عمل می کند. در واقع Atmega16u2 همان میکروکنترلر است اما با یک تفاوت مهم قادر به کار مستقیم با گذرگاه USB است. Atmega16u2 با سیستم عامل مناسب می تواند تقریباً هر دستگاه USB را شبیه سازی کند. میفهمی دارم به چی میرسم؟ ما این معجزه مهندسی را می دوزیم و به نفع جامعه عمل می کنیم.

سیستم عامل Atmega16u2

یک سیستم عامل در اینترنت پیدا شد که Atmega16u2 را به یک صفحه کلید USB تبدیل می کند که دستورات نوع خاصی را از طریق پورت سریال می پذیرد.

دستورالعمل های این مقاله برای ویندوز نوشته شده است، در حالی که کاربران لینوکس می توانند از آن استفاده کنند.

و بنابراین بیایید شروع کنیم، برای سیستم عامل به یک ابزار از سازنده به نام Flip نیاز دارید. دانلود، نصب، اجرا و در اینجا پنجره برنامه را داریم:

در ابتدا، دکمه ها (daws) فعال نیستند، این طبیعی است، ما آردوینو را به کامپیوتر متصل می کنیم و آن را می بندیم - دو کنتاکت شدید را از سمت پورت USB، RESET و GND باز می کنیم.

یک دستگاه جدید باید در سیستم ظاهر شود، به طور عجیبی، ATmega16u2 درایور را نصب کنید (در پوشه برنامه)، برگه "تنظیمات" → "ارتباطات" → "USB" → "باز کردن" را در برنامه تلنگر انتخاب کنید. دکمه ها باید فعال شوند در هر صورت، می توانید یک نسخه پشتیبان از سیستم عامل ایجاد کنید تا بتوانید همه چیز را به جای خود برگردانید. در منوی "File"، روی "Load HEX File" کلیک کنید، برنامه در مسیرهای مورد نیاز است، بهتر است فایل سیستم عامل را در ریشه درایو C: قرار دهید، فایل هگز مورد نظر را با سیستم عامل انتخاب کنید، بررسی کنید که آیا چک باکس های "Erase"، "Program"، "Verify" هستند و روی "Run" کلیک کنید. ما اتصال را قطع می کنیم - آردوینو و voila را وصل می کنیم ... اکنون دیگر نمی توانیم از طریق USB داخلی در آردوینو سیستم عامل آپلود کنیم، اما یک صفحه کلید عالی بدون دکمه دریافت کردیم.

نگران سیستم عامل آردوینو نباشید، دانلود سیستم عامل از Arduino IDE از طریق یک آداپتور جداگانه USB به TTL امکان پذیر خواهد بود، اگرچه باید بگویم که اکنون این کار کمتر راحت خواهد بود.

ما آداپتور USB به TTL را وصل می کنیم، به عنوان مثال این یکی:

ما به مخاطبین سفید، سبز و سیاه نیاز خواهیم داشت، اینها به ترتیب RX، TX و GND هستند، ما آنها را به پین ​​هایی با همان نام گذاری روی آردوینو وصل می کنیم، فقط برعکس RX به TX و TX به RX. کنتاکت قرمز نباید استفاده شود!

ما USB را به TTL به رایانه متصل می کنیم، درایورها را نصب می کنیم، یک پورت COM جدید باید در مدیر دستگاه ظاهر شود. Arduino IDE را باز کنید و تنظیم کنید: Board - Arduino / Genuino Uno، Port - پورت سریال جدید ما.

شروع کار با نرم افزار آردوینو

بیایید کتابخانه مورد نیاز را به آردوینو IDE اضافه کنیم: پیوند github.com/SFE-Chris/UNO-HIDKeyboard-Library را دنبال کنید و روی "Clone or download" → "Download ZIP" کلیک کنید. سپس در arduino IDE، برگه "Sketch" → "Include Library" → "Add.ZIP library" را انتخاب کنید و بایگانی zip را که به تازگی دانلود کرده اید انتخاب کنید.

آماده سازی تمام شده است، مستقیماً به سیستم عامل بروید. کپی کردن نوشته من:

آردوینو - طرح

#عبارتند از صفحه کلید HID؛ مجموعه int; void setup() ( keyboard.begin(); ) void loop() ( while (Serial.available()) (//شروع حلقه زمانی که داده در دسترس است sbor += Serial.read();//خواندن داده، اضافه کردن در اعشاری به شکل if (sbor == 27)(//ظاهر کاراکتر دنباله کنترل برای (int i=0; i<=4; i++){//сложение последовательности if (sbor == 165) {//для определения F1-F12 на разных терминалах могут быть разные значения sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor >صفر شکستن ;مورد 508: صفحه کلید.pressSpecialKey(F4)؛شکستن;مورد 509: صفحه کلید.pressSpecialKey(F5);شکستگی;مورد 511: صفحه کلید.pressSpecialKey(F6);شکست;مورد 512: صفحه کلید.pressSpecialKey(F7); break;case 513: keyboard.pressSpecialKey(F8)؛ break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11)؛ break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER)؛ break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE)؛ break; case 9 : صفحه کلید. pressSpecialKey(TAB)؛ break؛ case 32: keyboard.pressSpecialKey(SPACEBAR)؛ break؛ case 26: keyboard.pressSpecialKey(PAUSE)؛ break؛ case 292: keyboard.pressSpecialKey(INSERT); زنگ تفريح؛ case 456: keyboard.pressSpecialKey(HOME); زنگ تفريح؛ case 295: keyboard.pressSpecialKey(PAGEUP); زنگ تفريح؛ case 294: keyboard.pressSpecialKey(END); زنگ تفريح؛ case 296: keyboard.pressSpecialKey(PAGEDOWN); زنگ تفريح؛ مورد 182: keyboard.pressSpecialKey(RIGHTARROW); زنگ تفريح؛ case 183: keyboard.pressSpecialKey(LEFTARROW); زنگ تفريح؛ مورد 181: keyboard.pressSpecialKey(DOWNARROW); زنگ تفريح؛ مورد 180: keyboard.pressSpecialKey(UPARROW); زنگ تفريح؛ case 293: keyboard.pressSpecialKey(DELETE); زنگ تفريح؛ case 320: keyboard.pressSpecialKey((CTRL | ALT)، DELETE); زنگ تفريح؛ //برای فراخوانی ctl+alt+del case 346، alt + del را فشار دهید: keyboard.pressSpecialKey(ALT, F4); زنگ تفريح؛ //برای فراخوانی alt+f4 shift + F4 پیش فرض را فشار دهید: keyboard.pressKey(sbor); زنگ تفريح؛ ) //Serial.println(sbor);//فقط برای رفع اشکال بدون اتصال به usb keyboard.releaseKey(); مجموعه = NULL; ))


آن را در آردوینو IDE قرار دهید و دکمه چک را فشار دهید. اکنون مهم ترین مرحله آغاز خواهد شد، مهمترین چیز در اینجا این است که لحظه را بگیریم، تعداد کمی از افراد در اولین بار موفق می شوند. ما دکمه دانلود را در آردوینو IDE فشار می دهیم، ابتدا خطوط سفید با لاگ کامپایل اجرا می شود، به دنبال آن خطوط نارنجی، این در حال برقراری ارتباط با پورت سریال است، این همان لحظه ای است که شما نیاز دارید که آن را بگیرید و زمان داشته باشید. برای فشار دادن دکمه RESET روی برد آردوینو. سیستم عامل باید بارگیری شود، اگر همه چیز موفقیت آمیز باشد، کتیبه ای مانند این خواهید دید

Avrdude: خواندن اطلاعات فلش روی تراشه: خواندن | ############################################### # | 100% 0.34s avrdude: تایید ... avrdude: 2934 بایت فلش تایید avrdude انجام شد. متشکرم.
اگر پس از چندین بار تلاش، سیستم عامل باز هم بارگذاری نشد، پین های RX و TX را تعویض کنید و همچنین بررسی کنید که آیا پایه GND به طور ایمن وصل شده است.

خط پایان

کنسول رزبری را باز کنید و بنویسید:

sudo raspi-config
منوی تنظیمات تمشک باز می شود، "گزینه های پیشرفته" → "سریال" را انتخاب کنید و "نه" را انتخاب کنید.

شاید این دستکاری ها مورد نیاز نباشد، پس بیمه اتکایی. این پارامتر تعیین می کند که آیا سیستم عامل رزبری با پورت سریال تعامل خواهد داشت یا خیر، این تعامل عمدتاً برای اشکال زدایی مورد نیاز است، بنابراین با خیال راحت آن را خاموش کنید، این فقط با ما تداخل خواهد داشت، زیرا. ما از طریق این پورت با آردوینو ارتباط برقرار می کنیم و سیستم هوا را مسدود می کند.

برنامه minicom را نصب کنید.

Minicom یک برنامه ساده برای کار با پورت سریال است.

sudo apt-get install minicom -y
ما حقوق دسترسی به دستگاه، / dev / ttyAMA0 را تنظیم کردیم - این همان پورت سریال است.

sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
minicom را شروع کنید:

Sudo minicom -s
منوی برنامه باز می شود، مورد "Serial port setup" را انتخاب کنید، منوی دیگری باز می شود، "Serial Device" را با فشار دادن کلید A انتخاب کنید، بنویسید / dev / ttyAMA0، Enter را فشار دهید، سپس مورد Bps / Par / Bits را در زیر انتخاب کنید. حرف E، یکی دیگر ظاهر می شود منو C و خط Q را فشار دهید. مطمئن شوید که در خطوط F - Hardware Flow Control: و G - Software Flow Control: خیر، به طور کلی همه چیز باید مانند تصویر زیر باشد، Enter را فشار دهید.

این تنظیمات را به عنوان پیش‌فرض «Save setup as dfl» ذخیره کنید و «Exit from Minicom» را ببندید.

ارتباط

ما جلوتر می رویم ، اکنون تقریباً همه چیز را آماده کرده ایم ، فقط می ماند که آردوینو را به پورت سریال رزبری وصل کنیم ، چیزی شبیه به این:

در اینجا یک نکته وجود دارد، آردوینو و رزبری سطوح ولتاژ متفاوتی دارند و از نظر تئوری نیاز به هماهنگی دارند، توصیه می کنم مقاله را بخوانید.

اگرچه همه چیز مستقیماً بدون هماهنگی برای من کار کرد، اما نباید از یک مثال بد تقلید کنید و یک مبدل سطح منطقی بخرید، ساده ترین آن به این صورت است:

یا حداقل یک تقسیم کننده ولتاژ روی مقاومت ها مونتاژ کنید.

راه اندازی

همه چیز آماده است، می توانید شروع کنید.

همه اتصالات را بررسی می کنیم، رزبری پای را روشن می کنیم، به کنسول رزبری می رویم، مینی کام را راه اندازی می کنیم. من فوراً رزرو می کنم، از طریق ssh به تمشک وصل شدم، از KiTTY (نسخه اصلاح شده PuTTY) به عنوان مشتری استفاده کردم، این مهم است. با سایر پایانه ها، مقادیر کلیدهای ارسالی ممکن است متفاوت باشد و بر این اساس، لازم است برای باد هزینه ای در نظر گرفته شود - تعداد انتقال مورد سوئیچ را تغییر دهید.

به طور کلی من به شما تحویل می دهم که می گویند "همانطور که هست". خب، من احتمالاً با این کار تمام خواهم کرد، IP KVM خانگی آماده است.

P.S.

در نهایت، آنچه را که در پسماند خشک اتفاق افتاد را شرح خواهم داد.

طرفداران:

- قیمت
- دستگاه نسبتاً ارزان بود
- Raspberry Pi: حدود 2700 روبل.
- آردوینو UNO: حدود 400 روبل.
- مبدل VGA به AV: حدود 700 روبل.
- کارت فیلمبرداری: 500 روبل.
- مجموع: 4300 روبل.

- تنظیم دقیق
شما می توانید تقریباً هر ترکیبی را رهگیری کنید و تقریباً هر کلیدی را به آنها اختصاص دهید، تا KEYBOARDPOWER و VOLUMEUP، به هر حال، می توانید مقادیر ممکن را در فایل هدر HIDKeyboard.h مشاهده کنید یا می توانید کلیدهای خود را اضافه کنید.

معایب:

- ترمز ویدیو و انتقال کلیک
- دومین و بزرگترین است کیفیت تصویر، یک شکلک غمگین در اینجا به سادگی مورد نیاز است ، وحشتناک است ، حتی اگر وضوح را در رایانه مورد نظر به حداقل برسانید ، حداکثر کاری که می توان انجام داد پیکربندی BIOS و انتخاب یک مورد در بوت لودر است. اما آیا در واقع KVM برای این مورد نیاز نیست؟.. و برای هر چیز دیگری، رادمین و مانند آن وجود دارد.

برچسب ها:

  • مدیریت از راه دور
  • IP kvm
  • چگونه
افزودن برچسب

سلام دوستان! برای اتصال دو کامپیوتر به یک رابط، این سوئیچ ساده KVM VGA را در Aliexpress به قیمت 4 دلار خریدم.

انتخاب روی VGA افتاد، زیرا مانیتور من ورودی HDMI نداشت و ورودی DVI نمی خواست از طریق آداپتور کار کند.



این فرض که فضای کافی روی برد مدار چاپی برای دو سوئیچ دیگر برای تعویض کانکتورهای صوتی و USB وجود دارد کاملاً موجه بود.

البته امکان خرید سوئیچ آماده وجود دارد، اما من یک مدل را پیدا نکردم که کاملاً نیازهای من را برآورده کند. این هم مربوط به محل قرارگیری کابل ها و هم نیاز به استفاده از کابل های مخصوص یا کابل های USB و صدا با دو کانکتور بود.

بنابراین، تصمیم گرفتم که بازسازی این دستگاه خاص برای مطابقت با نیازهای من آسان تر و ارزان تر باشد.


درست است، من مجبور شدم سوئیچ مانیتور را تعویض کنم، زیرا با نسخه کوتاه شده KVM VGA مواجه شدم که در آن یک گروه از مخاطبین وجود نداشت. همانطور که بعدا مشخص شد، لازم بود گزینه ای را انتخاب کنید که در آن وضوح Full HD در داده های فنی مشخص شده است. اما، حتی در اینجا نیز هیچ مشکلی وجود نداشت، زیرا مسیرهای لازم روی تخته گذاشته شد و فقط برای جایگزینی P2K باقی ماند.


من دو سوئیچ اضافی را در کلاهک‌هایی که به برد مدار چاپی فشرده شده بودند لحیم کردم.


برای دکمه های اضافی، مجبور شدم دو سوراخ در پانل جلویی ایجاد کنم.


من شش سوراخ دیگر در دیوار پشتی برای اتصال کابل ها ایجاد کردم.

کابل های USB خودم را هم ساختم.


برای تقویت نخی که نیمه های بدنه را به هم وصل می کند، دو بوش را فشار دادم تا با کمک مربع های اضافی بتوان سوئیچ را به طور ایمن ثابت کرد.


این چیزی است که من در نتیجه گرفتم.


با این سوئیچ KVM، رابط های دو لپ تاپ را که به عنوان دسکتاپ کار می کردند، تغییر دادم.


سوئیچ روی یک قفسه واقع در بالای میز ثابت شد. این عکس نشان می دهد که دکمه های سوئیچ مانیتور تعویض شده اند. دکمه های اصلی خیلی کوتاه و راحت نبودند.

این مقاله تحت تأثیر دیگری نوشته شده است - با تشکر فراوان از نویسنده! این مقاله تقریباً موفق شد سوئیچ IP KVM خودم را بسازد و بسیار عالی است! اما من تقریباً دلیل آن را توضیح خواهم داد. بله، همانطور که نویسنده نوشته است، همه چیز در آنجا کار می کند ... تا راه اندازی مجدد در بایوس، همه جادو در آنجا از بین می رود و هر چقدر تلاش کنید، هیچ اتفاقی نمی افتد.

تصمیم بر این شد که این سوء تفاهم تاسف بار و تا حد امکان کم هزینه و فشرده اصلاح شود. بیایید با کلیشه های Raspberry Pi و Arduino شروع کنیم و مقاله بعدی در مورد یک سخت افزار دیگر ادامه خواهد داشت.

بنابراین آنچه ما نیاز داریم:

1. یک کارت ضبط ویدیویی باید از درایور UVC پشتیبانی کند، مانند این. گزینه‌ها
کامل در aliexpress و دیگر فروشگاه های چینی.

UVC یک درایور منبع باز استاندارد است که به طور پیش فرض در اکثر توزیع های لینوکس گنجانده شده است، درایورهای دیگر ممکن است مشکل ساز باشند.

2. تبدیل VGA به AV:



توجه داشته باشید! شما دقیقا به VGA به AV نیاز دارید و نه برعکس.

3. آردوینو UNO، یعنی UNO، از آنجایی که دارای تراشه Atmega16u2 است، قبل از هر چیز ما را مورد توجه قرار می دهد. اینجا کنار پورت USB است، آردوین هایی با تراشه Atmega8u2 نیز وجود دارد که با هر دو کار می کند.

4. و البته Raspberry Pi، من نسخه 2 b را داشتم، بنابراین همه چیزهایی که در این مقاله نوشته شده است برای او مرتبط است، اما به طور کلی، فکر می کنم با سایر مدل های تمشک نباید مشکل خاصی وجود داشته باشد.

در حال بارگذاری توزیع

خوب، داده های ورودی داده شده است، بیایید شروع کنیم. من از توزیع 2015-05-05-raspbian-wheezy استفاده کردم، احتمالاً این مهم نیست، دستکاری های بیشتر باید برای هر توزیع مبتنی بر دبیان مناسب باشد.

برد فیلم برداری را به رزبری وصل می کنیم، بهتر است مستقیماً بدون استفاده از کابل های USB به USB وصل شود، مخصوصاً آن که همراه برد است، در غیر این صورت ممکن است ترمز ویدیو، یخ زدگی تمشک و ... رخ دهد.

به کنسول بروید، بسته ها را به روز کنید:

sudo apt-get update && sudo apt-get upgrade -y

انتقال ویدئو

بررسی کنید که آیا تابلو تعیین شده است:

Ls /dev/video*
خروجی آن باید چیزی شبیه به: /dev/video0 باشد.

Motion را نصب کنید، تصویر گرفته شده را از طریق آن پخش خواهیم کرد:

sudo apt-get install motion -y
ویرایش پیکربندی autorun:

سودو نانو /etc/default/motion
start_motion_daemon را روی "بله" تنظیم کنید. ذخیره تغییرات Ctrl + x، y، Enter.

ویرایش خود پیکربندی حرکت (a):

sudo nano /etc/motion/motion.conf
مقادیر پارامترها را به صورت زیر تغییر دهید:

پارامتر راه اندازی برنامه را به عنوان یک سرویس تعریف می کند:

دیمون روشن است
این پارامترها وضوح تصویر ارسال شده را تعیین می کنند، تنظیم وضوح بالاتر منطقی نیست، زیرا. ضبط ویدیو محدود به استانداردهای PAL یا SECAM است که وضوح آن 720x576 است. به هر حال، این یک نقص ناخوشایند است، اما بعداً در مورد آن بیشتر خواهیم کرد.

عرض 800 ارتفاع 600
نرخ فریم:

نرخ فریم 25
غیرفعال کردن ذخیره اسکرین شات ها:

output_normal خاموش است
کیفیت انتقال تصویر:

کیفیت وب کم 100
نرخ فریم:

webcam_maxrate 25
لغو محدودیت در اتصال از IP دیگر

Webcam_localhost خاموش است
ذخیره تغییرات Ctrl + x، y، Enter.

تمشک را دوباره بارگیری کنید:

راه اندازی مجدد sudo
اگر همه چیز به درستی انجام شود، چند دقیقه منتظر می مانیم، LED روی برد فیلمبرداری باید روشن شود.

مرورگر را به پورت رزبری 8081 وصل می کنیم و یک مستطیل خاکستری یا آبی با زمان در حال اجرا از زیر می بینیم.

روند شروع شده است، ما به دنبال قربانی هستیم تا سیگنالی را از پورت VGA بگیرد، آن را به پورت VGA IN مبدل و کارت ضبط ویدیو را به "VIDEO OUT" وصل می کنیم. شما باید چیزی شبیه این عکس بگیرید، نترسید، من کابل بدی دارم، بنابراین تصویر "دوبرابر" می شود، من آن را با یک تصویر دیگر امتحان کردم، بهتر بود، اما وضوح قابل تغییر نیست. 720x576 محدودیت مبدل و کارت فیلمبرداری است که با تمام میل نمی توان بر آن غلبه کرد.

خوب، آنها یاد گرفتند که تصویر را منتقل کنند، تنها چیزی که باقی می ماند انتقال کنترل است.

انتقال کنترل

برای این کار، همانطور که حدس زده اید، از آردوینو استفاده می کنیم. انتخاب به دلیلی روی Arduino UNO افتاد، تراشه ای به نام Atmega16u2 وجود دارد که برای اهداف ما بسیار ضروری است، فقط به لطف آن من توانستم بایوس رایانه را مجبور کنم arduino را به عنوان یک صفحه کلید USB تشخیص دهد. به طور پیش فرض، به عنوان بخشی از برد آردوینو، این تراشه به عنوان مبدل USB به سریال برای آپلود سیستم عامل روی میکروکنترلر Atmega328p، یک تراشه مستطیلی بزرگ در برد آردوینو، عمل می کند. در واقع Atmega16u2 همان میکروکنترلر است اما با یک تفاوت مهم قادر به کار مستقیم با گذرگاه USB است. Atmega16u2 با سیستم عامل مناسب می تواند تقریباً هر دستگاه USB را شبیه سازی کند. میفهمی دارم به چی میرسم؟ ما این معجزه مهندسی را می دوزیم و به نفع جامعه عمل می کنیم.

سیستم عامل Atmega16u2

یک سیستم عامل در اینترنت پیدا شد که Atmega16u2 را به یک صفحه کلید USB تبدیل می کند که دستورات نوع خاصی را از طریق پورت سریال می پذیرد.

دستورالعمل های این مقاله برای ویندوز نوشته شده است، در حالی که کاربران لینوکس می توانند از آن استفاده کنند.

و بنابراین بیایید شروع کنیم، برای سیستم عامل به یک ابزار از سازنده به نام Flip نیاز دارید. دانلود، نصب، اجرا و در اینجا پنجره برنامه را داریم:

در ابتدا، دکمه ها (daws) فعال نیستند، این طبیعی است، ما آردوینو را به کامپیوتر متصل می کنیم و آن را می بندیم - دو کنتاکت شدید را از سمت پورت USB، RESET و GND باز می کنیم.

یک دستگاه جدید باید در سیستم ظاهر شود، به طور عجیبی، ATmega16u2 درایور را نصب کنید (در پوشه برنامه)، برگه "تنظیمات" → "ارتباطات" → "USB" → "باز کردن" را در برنامه تلنگر انتخاب کنید. دکمه ها باید فعال شوند در هر صورت، می توانید یک نسخه پشتیبان از سیستم عامل ایجاد کنید تا بتوانید همه چیز را به جای خود برگردانید. در منوی "File"، روی "Load HEX File" کلیک کنید، برنامه در مسیرهای مورد نیاز است، بهتر است فایل سیستم عامل را در ریشه درایو C: قرار دهید، فایل هگز مورد نظر را با سیستم عامل انتخاب کنید، بررسی کنید که آیا چک باکس های "Erase"، "Program"، "Verify" هستند و روی "Run" کلیک کنید. ما اتصال را قطع می کنیم - آردوینو و voila را وصل می کنیم ... اکنون دیگر نمی توانیم از طریق USB داخلی در آردوینو سیستم عامل آپلود کنیم، اما یک صفحه کلید عالی بدون دکمه دریافت کردیم.

نگران سیستم عامل آردوینو نباشید، دانلود سیستم عامل از Arduino IDE از طریق یک آداپتور جداگانه USB به TTL امکان پذیر خواهد بود، اگرچه باید بگویم که اکنون این کار کمتر راحت خواهد بود.

ما آداپتور USB به TTL را وصل می کنیم، به عنوان مثال این یکی:

ما به مخاطبین سفید، سبز و سیاه نیاز خواهیم داشت، اینها به ترتیب RX، TX و GND هستند، ما آنها را به پین ​​هایی با همان نام گذاری روی آردوینو وصل می کنیم، فقط برعکس RX به TX و TX به RX. کنتاکت قرمز نباید استفاده شود!

ما USB را به TTL به رایانه متصل می کنیم، درایورها را نصب می کنیم، یک پورت COM جدید باید در مدیر دستگاه ظاهر شود. Arduino IDE را باز کنید و تنظیم کنید: Board - Arduino / Genuino Uno، Port - پورت سریال جدید ما.

شروع کار با نرم افزار آردوینو

بیایید کتابخانه مورد نیاز را به آردوینو IDE اضافه کنیم: پیوند github.com/SFE-Chris/UNO-HIDKeyboard-Library را دنبال کنید و روی "Clone or download" → "Download ZIP" کلیک کنید. سپس در arduino IDE، برگه "Sketch" → "Include Library" → "Add.ZIP library" را انتخاب کنید و بایگانی zip را که به تازگی دانلود کرده اید انتخاب کنید.

آماده سازی تمام شده است، مستقیماً به سیستم عامل بروید. کپی کردن نوشته من:

آردوینو - طرح

#عبارتند از صفحه کلید HID؛ مجموعه int; void setup() ( keyboard.begin(); ) void loop() ( while (Serial.available()) (//شروع حلقه زمانی که داده در دسترس است sbor += Serial.read();//خواندن داده، اضافه کردن در اعشاری به شکل if (sbor == 27)(//ظاهر کاراکتر دنباله کنترل برای (int i=0; i<=4; i++){//сложение последовательности if (sbor == 165) {//для определения F1-F12 на разных терминалах могут быть разные значения sbor += sbor; } sbor += Serial.read(); delay(1); } } } if (sbor >صفر شکستن ;مورد 508: صفحه کلید.pressSpecialKey(F4)؛شکستن;مورد 509: صفحه کلید.pressSpecialKey(F5);شکستگی;مورد 511: صفحه کلید.pressSpecialKey(F6);شکست;مورد 512: صفحه کلید.pressSpecialKey(F7); break;case 513: keyboard.pressSpecialKey(F8)؛ break; case 340: keyboard.pressSpecialKey(F9); break; case 341: keyboard.pressSpecialKey(F10); break; case 343: keyboard.pressSpecialKey(F11)؛ break; case 344: keyboard.pressSpecialKey(F12); break; case 13: keyboard.pressSpecialKey(ENTER)؛ break; case 22: keyboard.pressSpecialKey(ESCAPE); break; case 127: keyboard.pressSpecialKey(BACKSPACE)؛ break; case 9 : صفحه کلید. pressSpecialKey(TAB)؛ break؛ case 32: keyboard.pressSpecialKey(SPACEBAR)؛ break؛ case 26: keyboard.pressSpecialKey(PAUSE)؛ break؛ case 292: keyboard.pressSpecialKey(INSERT); زنگ تفريح؛ case 456: keyboard.pressSpecialKey(HOME); زنگ تفريح؛ case 295: keyboard.pressSpecialKey(PAGEUP); زنگ تفريح؛ case 294: keyboard.pressSpecialKey(END); زنگ تفريح؛ case 296: keyboard.pressSpecialKey(PAGEDOWN); زنگ تفريح؛ مورد 182: keyboard.pressSpecialKey(RIGHTARROW); زنگ تفريح؛ case 183: keyboard.pressSpecialKey(LEFTARROW); زنگ تفريح؛ مورد 181: keyboard.pressSpecialKey(DOWNARROW); زنگ تفريح؛ مورد 180: keyboard.pressSpecialKey(UPARROW); زنگ تفريح؛ case 293: keyboard.pressSpecialKey(DELETE); زنگ تفريح؛ case 320: keyboard.pressSpecialKey((CTRL | ALT)، DELETE); زنگ تفريح؛ //برای فراخوانی ctl+alt+del case 346، alt + del را فشار دهید: keyboard.pressSpecialKey(ALT, F4); زنگ تفريح؛ //برای فراخوانی alt+f4 shift + F4 پیش فرض را فشار دهید: keyboard.pressKey(sbor); زنگ تفريح؛ ) //Serial.println(sbor);//فقط برای رفع اشکال بدون اتصال به usb keyboard.releaseKey(); مجموعه = NULL; ))


آن را در آردوینو IDE قرار دهید و دکمه چک را فشار دهید. اکنون مهم ترین مرحله آغاز خواهد شد، مهمترین چیز در اینجا این است که لحظه را بگیریم، تعداد کمی از افراد در اولین بار موفق می شوند. ما دکمه دانلود را در آردوینو IDE فشار می دهیم، ابتدا خطوط سفید با لاگ کامپایل اجرا می شود، به دنبال آن خطوط نارنجی، این در حال برقراری ارتباط با پورت سریال است، این همان لحظه ای است که شما نیاز دارید که آن را بگیرید و زمان داشته باشید. برای فشار دادن دکمه RESET روی برد آردوینو. سیستم عامل باید بارگیری شود، اگر همه چیز موفقیت آمیز باشد، کتیبه ای مانند این خواهید دید

Avrdude: خواندن اطلاعات فلش روی تراشه: خواندن | ############################################### # | 100% 0.34s avrdude: تایید ... avrdude: 2934 بایت فلش تایید avrdude انجام شد. متشکرم.
اگر پس از چندین بار تلاش، سیستم عامل باز هم بارگذاری نشد، پین های RX و TX را تعویض کنید و همچنین بررسی کنید که آیا پایه GND به طور ایمن وصل شده است.

خط پایان

کنسول رزبری را باز کنید و بنویسید:

sudo raspi-config
منوی تنظیمات تمشک باز می شود، "گزینه های پیشرفته" → "سریال" را انتخاب کنید و "نه" را انتخاب کنید.

شاید این دستکاری ها مورد نیاز نباشد، پس بیمه اتکایی. این پارامتر تعیین می کند که آیا سیستم عامل رزبری با پورت سریال تعامل خواهد داشت یا خیر، این تعامل عمدتاً برای اشکال زدایی مورد نیاز است، بنابراین با خیال راحت آن را خاموش کنید، این فقط با ما تداخل خواهد داشت، زیرا. ما از طریق این پورت با آردوینو ارتباط برقرار می کنیم و سیستم هوا را مسدود می کند.

برنامه minicom را نصب کنید.

Minicom یک برنامه ساده برای کار با پورت سریال است.

sudo apt-get install minicom -y
ما حقوق دسترسی به دستگاه، / dev / ttyAMA0 را تنظیم کردیم - این همان پورت سریال است.

sudo chown pi /dev/ttyAMA0 sudo chmod 744 /dev/ttyAMA0
minicom را شروع کنید:

Sudo minicom -s
منوی برنامه باز می شود، مورد "Serial port setup" را انتخاب کنید، منوی دیگری باز می شود، "Serial Device" را با فشار دادن کلید A انتخاب کنید، بنویسید / dev / ttyAMA0، Enter را فشار دهید، سپس مورد Bps / Par / Bits را در زیر انتخاب کنید. حرف E، یکی دیگر ظاهر می شود منو C و خط Q را فشار دهید. مطمئن شوید که در خطوط F - Hardware Flow Control: و G - Software Flow Control: خیر، به طور کلی همه چیز باید مانند تصویر زیر باشد، Enter را فشار دهید.

این تنظیمات را به عنوان پیش‌فرض «Save setup as dfl» ذخیره کنید و «Exit from Minicom» را ببندید.

ارتباط

ما جلوتر می رویم ، اکنون تقریباً همه چیز را آماده کرده ایم ، فقط می ماند که آردوینو را به پورت سریال رزبری وصل کنیم ، چیزی شبیه به این:

در اینجا یک نکته وجود دارد، آردوینو و رزبری سطوح ولتاژ متفاوتی دارند و از نظر تئوری نیاز به هماهنگی دارند، توصیه می کنم مقاله را بخوانید.

اگرچه همه چیز مستقیماً بدون هماهنگی برای من کار کرد، اما نباید از یک مثال بد تقلید کنید و یک مبدل سطح منطقی بخرید، ساده ترین آن به این صورت است:

یا حداقل یک تقسیم کننده ولتاژ روی مقاومت ها مونتاژ کنید.

راه اندازی

همه چیز آماده است، می توانید شروع کنید.

همه اتصالات را بررسی می کنیم، رزبری پای را روشن می کنیم، به کنسول رزبری می رویم، مینی کام را راه اندازی می کنیم. من فوراً رزرو می کنم، از طریق ssh به تمشک وصل شدم، از KiTTY (نسخه اصلاح شده PuTTY) به عنوان مشتری استفاده کردم، این مهم است. با سایر پایانه ها، مقادیر کلیدهای ارسالی ممکن است متفاوت باشد و بر این اساس، لازم است برای باد هزینه ای در نظر گرفته شود - تعداد انتقال مورد سوئیچ را تغییر دهید.

به طور کلی من به شما تحویل می دهم که می گویند "همانطور که هست". خب، من احتمالاً با این کار تمام خواهم کرد، IP KVM خانگی آماده است.

P.S.

در نهایت، آنچه را که در پسماند خشک اتفاق افتاد را شرح خواهم داد.

طرفداران:

- قیمت
- دستگاه نسبتاً ارزان بود
- Raspberry Pi: حدود 2700 روبل.
- آردوینو UNO: حدود 400 روبل.
- مبدل VGA به AV: حدود 700 روبل.
- کارت فیلمبرداری: 500 روبل.
- مجموع: 4300 روبل.

- تنظیم دقیق
شما می توانید تقریباً هر ترکیبی را رهگیری کنید و تقریباً هر کلیدی را به آنها اختصاص دهید، تا KEYBOARDPOWER و VOLUMEUP، به هر حال، می توانید مقادیر ممکن را در فایل هدر HIDKeyboard.h مشاهده کنید یا می توانید کلیدهای خود را اضافه کنید.

معایب:

- ترمز ویدیو و انتقال کلیک
- دومین و بزرگترین است کیفیت تصویر، یک شکلک غمگین در اینجا به سادگی مورد نیاز است ، وحشتناک است ، حتی اگر وضوح را در رایانه مورد نظر به حداقل برسانید ، حداکثر کاری که می توان انجام داد پیکربندی BIOS و انتخاب یک مورد در بوت لودر است. اما آیا در واقع KVM برای این مورد نیاز نیست؟.. و برای هر چیز دیگری، رادمین و مانند آن وجود دارد.

برچسب ها: اضافه کردن برچسب

اگر متوجه خطایی شدید، یک متن را انتخاب کنید و Ctrl + Enter را فشار دهید
اشتراک گذاری:
پورتال ساخت و ساز - درب و دروازه.  داخلی.  فاضلاب.  مواد.  مبلمان.  اخبار