paint-brush
আপনার কম্পিউটার মনিটরকে অ্যাম্বিয়েন্ট মনিটরে রূপান্তর করতে পাইথনের সাথে বিপরীত প্রকৌশলী এলইডি লাইটদ্বারা@reaminated
2,352 পড়া
2,352 পড়া

আপনার কম্পিউটার মনিটরকে অ্যাম্বিয়েন্ট মনিটরে রূপান্তর করতে পাইথনের সাথে বিপরীত প্রকৌশলী এলইডি লাইট

দ্বারা Reaminated12m2023/03/31
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

আপনার সাধারণ মনিটরটিকে একটি পরিবেষ্টিত মনিটরে রূপান্তর করুন যেখানে বর্তমানে স্ক্রিনে থাকা রঙের সাথে আলো পরিবর্তন করুন। পাইথন এবং আরজিবি লাইট ব্যবহার করে, কীভাবে আপনার ফিল্ম এবং গেমিং অভিজ্ঞতা উন্নত করবেন তা দেখানোর জন্য এটি একটি টিউটোরিয়াল।
featured image - আপনার কম্পিউটার মনিটরকে অ্যাম্বিয়েন্ট মনিটরে রূপান্তর করতে পাইথনের সাথে বিপরীত প্রকৌশলী এলইডি লাইট
Reaminated HackerNoon profile picture
0-item

ভূমিকা

যারা অ্যাম্বিয়েন্ট টিভির সাথে পরিচিত নন তাদের জন্য, এটি একটি আরও নিমগ্ন অভিজ্ঞতা প্রদানের জন্য টিভি স্ক্রিনের প্রান্ত থেকে লাফানো এবং এর আশেপাশের পরিবেশকে নরম করার একটি উপায়। আমার চারপাশে কিছু এলইডি লাইট পড়ে ছিল এবং কোডের মাধ্যমে লাইটগুলি নিয়ন্ত্রণ করা সম্ভব কিনা তা দেখার সিদ্ধান্ত নিয়েছিলাম এবং ফলস্বরূপ, আমার কম্পিউটারের স্ক্রীনকে একটি পরিবেষ্টিত মনিটর বানিয়েছিলাম। যদিও আমি আমার মনিটরের জন্য এটি ব্যবহার করতে চেয়েছিলাম, এটি যে কোনও জায়গায় ব্যবহার করা যেতে পারে এবং যে কোনও রঙের সাথে আপনি এটি পাঠাতে পারেন, আপনার লাইটের অন্যান্য বৈশিষ্ট্যগুলি সহ, যেমন অডিও প্রতিক্রিয়া বা এলোমেলো প্যাটার্ন। আমি কিছু সময়ের জন্য এই পোস্টটি লিখতে চাচ্ছিলাম কারণ আমি এটি একটি আগের মনিটরে ব্যবহার করছি, কিন্তু আমি এটিকে আমার নতুন মনিটরে যোগ করতে পারিনি, তাই আমি এটিকে নথিভুক্ত করেছি যখন আমি এটি খুঁজে পেতে পারি তাদের জন্য এটা দরকারী। সুতরাং এর এটি পেতে দেওয়া যাক! (অনুগ্রহ করে মনে রাখবেন, LED লাইটগুলি সম্ভবত ব্লুটুথ লো এনার্জি (BLE), তাই তাদের সাথে যোগাযোগ করার জন্য আপনার কম্পিউটারকে BLE সমর্থন করতে হবে)। সম্পূর্ণ কোড GitHub এ রয়েছে।

উচ্চ স্তরের পদক্ষেপ

  • এলইডি লাইটের ব্লুটুথ রিসিভার কী কমান্ড গ্রহণ করে তা খুঁজে বের করুন
  • আমার কম্পিউটারের ব্লুটুথের মাধ্যমে LED লাইটে কমান্ড পাঠান
  • বর্তমান পর্দার প্রভাবশালী রঙ প্রাপ্ত
  • এলইডি লাইটে প্রভাবশালী রঙ পাঠান

পূর্বশর্ত

  • ব্লুটুথ-সমর্থিত আরজিবি এলইডি লাইট এবং সহগামী অ্যাপ (আমি অ্যান্ড্রয়েড ব্যবহার করছি, আইওএস সম্ভবত এখানে বর্ণিত একটির চেয়ে বিকল্প পদ্ধতির প্রয়োজন হবে, তবে ব্লুটুথ ট্র্যাফিক নিরীক্ষণ করতে সরাসরি ওয়্যারশার্ক ব্যবহার করা সম্ভব হবে)। আমি আমার মনিটরের পিছনে এই লাইট সংযুক্ত করেছি
  • ওয়্যারশার্ক
  • অ্যান্ড্রয়েডের SDK টুল (বিশেষভাবে adb.exe)
  • বিকাশকারী সরঞ্জামগুলি (আমি পাইথন 3.10 ব্যবহার করব, যদিও যে কোনও 3.x সংস্করণ কাজ করা উচিত, তবে আপনি যে ভাষা পছন্দ করেন তার জন্য নীতিগুলি একই হওয়া উচিত)
  • একটি ডিভাইস থেকে BLE কমান্ড পাঠানোর জন্য (যেমন একটি ল্যাপটপ যা BLE সমর্থন করে)


ব্লুটুথ ডেটা পাওয়া যাচ্ছে

আমাদের প্রথম পদক্ষেপটি নিশ্চিত করতে হবে যে আলোর সাথে আসা অ্যাপটি প্রত্যাশা অনুযায়ী কাজ করছে। আলোর আসল অ্যাপটি চালানোর মাধ্যমে এবং আপনি আপনার অ্যাপে যে অন/অফ/লাইটিং বোতাম টিপছেন তার উপর নির্ভর করে আলোগুলি সেই অনুযায়ী প্রতিক্রিয়া করছে কিনা তা নিশ্চিত করে এটি সহজেই পরীক্ষা করা যেতে পারে। আমরা এটি করি কারণ আমরা শীঘ্রই লাইটে ব্লুটুথ রিসিভারে পাঠানো নির্দিষ্ট কোডগুলি টিপে এবং সনাক্ত করব৷


আমি নিতে পারে যে দুটি পন্থা আছে. একটি হল অ্যাপের JAR ফাইলটি ডিকম্পাইল করা এবং যে কোডগুলি পাঠানো হচ্ছে তা খুঁজে বের করা, কিন্তু আমি ব্লুটুথ প্রোটোকল সম্পর্কে আরও জানতে চেয়েছিলাম, তাই আমি আমার অ্যান্ড্রয়েডে সমস্ত ব্লুটুথ অ্যাক্টিভিটি লগ করতে বেছে নিয়েছিলাম এবং সেখান থেকে এটি বের করেছিলাম। এখানে কিভাবে:


  1. আপনার অ্যান্ড্রয়েড ডিভাইসে বিকাশকারী বিকল্পগুলি সক্ষম করুন৷


  2. ব্লুটুথ HCI স্নুপ লগ সক্ষম করুন (HCI হল হোস্ট-কন্ট্রোলার ইন্টারফেস)। আপনি সেটিংস > সিস্টেম > বিকাশকারীতে এই বিকল্পটি খুঁজে পেতে পারেন বা নীচের চিত্রের মতো সেটিংসে এটি অনুসন্ধান করতে পারেন।


HCI স্নুপ লগ সক্রিয় করা হচ্ছে


  1. আমাদের এখন নির্দিষ্ট ক্রিয়া সম্পাদন করতে হবে যাতে প্রতিটি ক্রিয়া আলোর ব্লুটুথ রিসিভারে কী পাঠায় তা আমরা সনাক্ত করতে পারি। আমি সেই ক্রমে এটিকে চালু/লাল/সবুজ/নীল/বন্ধে সহজ রাখতে যাচ্ছি, তবে যদি আপনার লাইট অন্যান্য বৈশিষ্ট্যগুলিকে সমর্থন করে তবে আপনি সেগুলির সাথেও খেলতে পারেন।


  2. অ্যাপটি চালান এবং চালু, লাল, সবুজ, নীল এবং বন্ধ টিপুন। আপনার ডিভাইসে প্রচুর ব্লুটুথ অ্যাক্টিভিটি থাকলে ফিল্টার করা সহজ করার জন্য আনুমানিক সময়ের উপর নজর রাখাও কার্যকর হতে পারে।


পাঠানোর জন্য রেকর্ডিং কমান্ড


  1. ব্লুটুথ বন্ধ করুন যাতে আমরা আর কোন আওয়াজ না পাই। নিম্নলিখিত ধাপে, আমরা ব্লুটুথ কমান্ডগুলি বিশ্লেষণ করব এবং, আমরা কী টিপেছি তার ক্রম আমরা জানি, আমরা খুঁজে পেতে পারি কোন মানগুলি কোন বোতাম প্রেসের সাথে সামঞ্জস্যপূর্ণ।


  2. আমাদের এখন ফোনে ব্লুটুথ লগ অ্যাক্সেস করতে হবে। এটি করার বিভিন্ন উপায় আছে, কিন্তু আমি একটি বাগ রিপোর্ট তৈরি এবং রপ্তানি করব। এটি করতে, ফোনের সেটিংসে USB ডিবাগিং সক্ষম করুন, ফোনটিকে কম্পিউটারের সাথে সংযুক্ত করুন এবং adb.exe কমান্ড লাইন টুল ব্যবহার করুন৷


     adb bugreport led_bluetooth_report


  3. এটি " led_bluetooth_report.zip " ফাইলের নাম সহ আপনার কম্পিউটারের স্থানীয় ডিরেক্টরিতে একটি জিপ ফাইল তৈরি করবে৷ আপনি চাইলে একটি পথ নির্দিষ্ট করতে পারেন (যেমন C:\MyPath\led_bluetooth_report")


  4. এই জিপের মধ্যে আমাদের প্রয়োজন যে লগ আছে. এটি ডিভাইস থেকে ডিভাইসে পরিবর্তিত হতে পারে (আপনি আপনার ডিভাইসে অন্য কোথাও এটি খুঁজে পেলে মন্তব্য করুন)। আমার Google Pixel ফোনে, এটি FS\data\misc\bluetooth\logs\btsnoop_hci.log এ ছিল


  5. এখন আমাদের কাছে লগ ফাইল আছে, আসুন সেগুলো বিশ্লেষণ করি! এটি করার জন্য, আমি Wireshark ব্যবহার করার সিদ্ধান্ত নিয়েছি তাই Wireshark শুরু করুন এবং File...Open...এ যান এবং btsnoop_hci লগ ফাইলটি নির্বাচন করুন।


যদিও এটি দুঃসাধ্য মনে হতে পারে, আসুন আমরা 0x0004-BTL2CAP ফিল্টার করে যা খুঁজছি তা খুঁজে পাওয়া সহজ করে দেই, যা Wireshark সোর্স কোডের অ্যাট্রিবিউট প্রোটোকল। অ্যাট্রিবিউট প্রোটোকল দুটি BLE ডিভাইস একে অপরের সাথে কীভাবে কথা বলে তা সংজ্ঞায়িত করে, তাই অ্যাপটি কীভাবে আলোর সাথে কথা বলে তা খুঁজে বের করতে আমাদের সাহায্য করতে হবে। আপনি ওয়্যারশার্কের লগগুলিকে ফিল্টার করতে পারেন btl2cap.cid == 0x0004 টাইপ করে উপরের দিকে অবস্থিত “ একটি প্রদর্শন ফিল্টার প্রয়োগ করুন ” বারে এবং এন্টার টিপুন


এটি সহজ করতে লগগুলি ফিল্টার করুন৷


এখন আমরা লগ ফিল্টার করেছি; এটি কমান্ডের সন্ধান করা সহজ করে তুলতে হবে। আমরা টাইমস্ট্যাম্পগুলি দেখতে পারি (দেখতে যান...টাইম ডিসপ্লে ফরম্যাট...দিনের সময় ভুল ফরম্যাট হলে সময়কে রূপান্তর করতে)। আমরা সেন্ট রাইট কমান্ড লগগুলি দেখতে চাই কারণ সেইগুলিই যেখানে আমরা আলোতে একটি মান পাঠিয়েছি। আপনার সাম্প্রতিক সময়টি নীচের দিকে রয়েছে বলে ধরে নিয়ে, শেষ পাঁচটি ইভেন্টে নিচে স্ক্রোল করুন। এইগুলি অন, লাল, সবুজ, নীল এবং বন্ধ হওয়া উচিত, সেই ক্রমে অফ শেষ।


BS_ADDR এবং মান - আমাদের প্রয়োজনীয় তথ্য!


গন্তব্য বিডি_এডিডিআর নোট করুন, কারণ শীঘ্রই আমাদের এটির প্রয়োজন হবে এবং আপনার শার্লক হোমস টুপি পরুন, কারণ এখানেই আমাদের বার্তার মধ্যে রঙ এবং অন/অফ কমান্ডগুলি কীভাবে এনকোড করা হয় তার প্যাটার্নটি আনলক করতে হবে। এটি আলো প্রস্তুতকারকের উপর নির্ভর করে পরিবর্তিত হবে তবে আমার ডিভাইসের জন্য আমি যে মানগুলি পেয়েছি তা এখানে রয়েছে:


  • অন: 7e0404f00001ff00ef
  • লাল: 7e070503ff000010ef
  • সবুজ: 7e07050300ff0010ef
  • নীল: 7e0705030000ff10ef
  • বন্ধ: 7e0404000000ff00ef


এগুলি স্পষ্টভাবে হেক্সাডেসিমেল মান এবং আপনি যদি মনোযোগ সহকারে দেখেন তবে আপনি কিছু নির্দিষ্ট নিদর্শন দেখতে পাবেন। আসুন নিদর্শনগুলিকে বিভক্ত করি কারণ এটি জিনিসগুলিকে আরও পরিষ্কার করে তুলবে৷


  • অন: 7e0404 f00001 ff00ef
  • লাল: 7e070503 ff0000 10ef
  • সবুজ: 7e070503 00ff00 10ef
  • নীল: 7e070503 0000ff 10ef
  • বন্ধ: 7e0404 000000 ff00ef


যারা বিশুদ্ধ লাল, সবুজ এবং নীল রঙের হেক্সাডেসিমেল মানগুলির সাথে পরিচিত, আপনি জানতে পারবেন যে মানগুলি যথাক্রমে #FF000, #00FF00 এবং #0000FF, যা আমরা উপরে দেখতে পাচ্ছি। এর মানে আমরা এখন যা চাই তা রং পরিবর্তন করতে ফরম্যাট জানি! (অথবা অন্তত লাইট নিজেরা কী করতে সক্ষম)। আমরা এটাও দেখতে পাচ্ছি যে On এবং Off-এর রঙের থেকে আলাদা ফরম্যাট রয়েছে এবং একে অপরের সাথে মিল রয়েছে, যার অন আছে f00001 এবং Off আছে 00000।

এটাই! কোডিং এবং আলোর সাথে ইন্টারঅ্যাক্ট শুরু করার জন্য আমাদের কাছে এখন যথেষ্ট তথ্য রয়েছে।

LED লাইটের সাথে সংযোগ করা হচ্ছে

আমাদের প্রয়োজন তিনটি মূল জিনিস আছে:


  • ডিভাইসের ঠিকানা (এটি উপরে থেকে গন্তব্য BD_ADDR)

  • ডিভাইসে পাঠানোর মান (উপরে প্রাপ্ত হেক্সাডেসিমেল মান)

  • আমরা যে বৈশিষ্ট্য পরিবর্তন করতে চাই। একটি ব্লুটুথ LE বৈশিষ্ট্য একটি ডেটা কাঠামো যা মূলত ডেটা সংজ্ঞায়িত করে যা হোস্ট এবং ক্লায়েন্ট ব্লুটুথ ডিভাইসগুলির মধ্যে পাঠানো যেতে পারে। আমাদের বৈশিষ্ট্য খুঁজে বের করতে হবে (একটি 16-বিট বা 128-বিট UUID) যা আলোকে বোঝায়। কিছু সাধারণভাবে ব্যবহৃত নির্দিষ্ট নম্বর রয়েছে যা এখানে পাওয়া যাবে কিন্তু ডিভাইসটি সেগুলির সাথে সামঞ্জস্য না করলে, তারা একটি কাস্টম UUID ব্যবহার করতে পারে। যেহেতু আমার লাইটগুলি নির্ধারিত নম্বর তালিকায় নেই, আসুন কোডের মাধ্যমে এটি খুঁজে বের করি৷


আমি পাইথন 3.10 এবং Bleak 0.20.1 ব্যবহার করছি। আপনার কম্পিউটারে ব্লুটুথ চালু আছে তা নিশ্চিত করুন (ডিভাইসের সাথে পেয়ার করার দরকার নেই, আমরা কোডের মাধ্যমে এটির সাথে সংযোগ করব)।


 # Function to create a BleakClient and connect it to the address of the light's Bluetooth reciever async def init_client(address: str) -> BleakClient: client = BleakClient(address) print("Connecting") await client.connect() print(f"Connected to {address}") return client # Function we can call to make sure we disconnect properly otherwise there could be caching and other issues if you disconnect and reconnect quickly async def disconnect_client(client: Optional[BleakClient] = None) -> None: if client is not None : print("Disconnecting") if characteristic_uuid is not None: print(f"charUUID: {characteristic_uuid}") await toggle_off(client, characteristic_uuid) await client.disconnect() print("Client Disconnected") print("Exited") # Get the characteristic UUID of the lights. You don't need to run this every time async def get_characteristics(client: BleakClient) -> None: # Get all the services the device (lights in this case) services = await client.get_services() # Iterate the services. Each service will have characteristics for service in services: # Iterate and subsequently print the characteristic UUID for characteristic in service.characteristics: print(f"Characteristic: {characteristic.uuid}") print("Please test these characteristics to identify the correct one") await disconnect_client(client)


আমি কোডটিতে মন্তব্য করেছি, তাই এটি স্ব-ব্যাখ্যামূলক হওয়া উচিত তবে মূলত, আমরা আলোর সাথে সংযোগ করি এবং এটি প্রকাশ করে এমন সমস্ত বৈশিষ্ট্য খুঁজে পাই। আমার আউটপুট ছিল:


চরিত্রগত: 00002a00-0000-1000-8000-00805f9b34fb চরিত্রগত: 00002a01-0000-1000-8000-00805f9b34fb বৈশিষ্ট্য: 0000fb34fb বৈশিষ্ট্য: 0000fb-0008-34fb 4fb বৈশিষ্ট্য: 0000fff4-0000-1000-8000-00805f9b34fb


প্রথম দুটি UUID-এর একটি দ্রুত Google দেখায় যে এটি পরিষেবাটির নাম এবং চেহারা বোঝায়, যা আমাদের জন্য অপ্রাসঙ্গিক। যাইহোক, তৃতীয় এবং চতুর্থটি সবচেয়ে উপযুক্ত বলে মনে হচ্ছে তৃতীয়টি ( 0000fff3-0000-1000-8000-00805f9b34fb ) এই পৃষ্ঠা অনুসারে লেখার বৈশিষ্ট্য। চমৎকার, আমাদের কাছে এখন এই নির্দিষ্ট ডিভাইসটির জন্য একটি মান (রঙ হেক্সাডেসিমেল) লেখার জন্য প্রয়োজনীয় বৈশিষ্ট্য রয়েছে।

LED লাইট নিয়ন্ত্রণ

আমরা অবশেষে এই আমাদের প্রয়োজন সব টুকরা আছে. এই পর্যায়ে, আপনি কোন রঙের ইনপুট ব্যবহার করতে চান তা দিয়ে আপনি সৃজনশীল হতে পারেন। আপনি, উদাহরণস্বরূপ, আপনার পোর্টফোলিও কীভাবে কাজ করছে সে অনুযায়ী রঙ পরিবর্তন করতে একটি ট্রেডিং মার্কেট API-এর সাথে লাইট সংযুক্ত করতে পারেন। এই ক্ষেত্রে, আমরা আমাদের মনিটরকে পরিবেষ্টিত সচেতন করতে চাই, তাই আমাদের পর্দার প্রভাবশালী রঙ পেতে হবে এবং এটি পাঠাতে হবে।


এটি করার অনেক উপায় আছে, তাই আপনি যে অ্যালগরিদম চান তা নিয়ে নির্দ্বিধায় পরীক্ষা করুন৷ সবচেয়ে সহজ পন্থাগুলির মধ্যে একটি হল স্ক্রীন জুড়ে প্রতিটি X সংখ্যার পিক্সেল পুনরাবৃত্তি করা এবং একটি গড় নেওয়া যখন আরও জটিল সমাধানগুলি মানুষের চোখকে আরও প্রভাবশালী বলে মনে করা রঙগুলি সন্ধান করবে। আপনি শেয়ার করতে চান যে কোনো ফলাফল মন্তব্য নির্দ্বিধায়!

এই ব্লগ পোস্টের জন্য, আমি fast_colorthief লাইব্রেরির get_dominant_color পদ্ধতি ব্যবহার করে এটিকে সহজ রাখতে যাচ্ছি।


 ''' Instead of taking the whole screensize into account, I'm going to take a 640x480 resolution from the middle. This should make it faster but you can toy around depending on what works for you. You may, for example, want to take the outer edge colours instead so it the ambience blends to the outer edges and not the main screen colour ''' screen_width, screen_height = ImageGrab.grab().size #get the overall resolution size region_width = 640 region_height = 480 region_left = (screen_width - region_width) // 2 region_top = (screen_height - region_height) // 2 screen_region = (region_left, region_top, region_left + region_width, region_top + region_height) screenshot_memory = io.BytesIO(b"") # Method to get the dominant colour on screen. You can change this method to return whatever colour you like def get_dominant_colour() -> str: # Take a screenshot of the region specified earlier screenshot = ImageGrab.grab(screen_region) ''' The fast_colorthief library doesn't work directly with PIL images but we can use an in memory buffer (BytesIO) to store the picture This saves us writing then reading from the disk which is costly ''' # Save screenshot region to in-memory bytes buffer (instead of to disk) # Seeking and truncating fo performance rather than using "with" and creating/closing BytesIO object screenshot_memory.seek(0) screenshot_memory.truncate(0) screenshot.save(screenshot_memory, "PNG") # Get the dominant colour dominant_color = fast_colorthief.get_dominant_color(screenshot_memory, quality=1) # Return the colour in the form of hex (without the # prefix as our Bluetooth device doesn't use it) return '{:02x}{:02x}{:02x}'.format(*dominant_color)


কোডটি মন্তব্য করা হয়েছে, তাই আশা করি, কী ঘটছে তা পরিষ্কার হওয়া উচিত, তবে আমরা মাঝখান থেকে পর্দার একটি ছোট অঞ্চল নিচ্ছি এবং তারপর সেই অঞ্চল থেকে প্রভাবশালী রঙ পাচ্ছি। আমি একটি ছোট অঞ্চল নিচ্ছি কারণ কর্মক্ষমতা জন্য; কম পিক্সেল বিশ্লেষণ করা প্রয়োজন হবে.


আমরা প্রায় সেখানে! আমরা এখন জানি এটি কী পাঠাতে হবে এবং কোথায় পাঠাতে হবে। আসুন এই চ্যালেঞ্জের শেষ বড় অংশটি শেষ করি যা আসলে এটি প্রেরণ করা। সৌভাগ্যক্রমে, ব্লেক লাইব্রেরির সাথে, এটি বেশ সোজা।


 async def send_colour_to_device(client: BleakClient, uuid: str, value: str) -> None: #write to the characteristic we found, in the format that was obtained from the Bluetooth logs await client.write_gatt_char(uuid, bytes.fromhex(f"7e070503{value}10ef")) async def toggle_on(client: BleakClient, uuid: str) -> None: await client.write_gatt_char(uuid, bytes.fromhex(ON_HEX)) print("Turned on") async def toggle_off(client: BleakClient, uuid: str) -> None: await client.write_gatt_char(uuid, bytes.fromhex(OFF_HEX)) print("Turned off")


আমরা যেমন লগগুলি থেকে আবিষ্কার করেছি, প্রতিটি রঙের একটি নির্দিষ্ট টেমপ্লেট আছে, তাই আমরা সাধারণ অংশটিকে হার্ডকোড করতে f-স্ট্রিং ব্যবহার করতে পারি এবং মাঝখানে মানের জন্য একটি রঙের হেক্সাডেসিমেল পাস করতে পারি। এই আমাদের লুপ থেকে বলা যেতে পারে. অন এবং অফের অনন্য হেক্সাডেমিকাল ছিল তাই আমি পৃথক ফাংশন তৈরি করেছি এবং একটি ধ্রুবক মান দিয়ে পাস করেছি যাতে প্রাসঙ্গিক হেক্স রয়েছে।


 while True: # send the dominant colour to the device await send_colour_to_device(client, characteristic_uuid, get_dominant_colour()) # allow a small amount of time before update time.sleep(0.1)


এবং সেখানে আমরা এটা আছে; আমাদের ব্লুটুথ LED লাইটগুলি এখন স্ক্রিনের রঙ দ্বারা নিয়ন্ত্রিত হয়, আমাদের নিজস্ব অ্যাম্বিয়েন্ট মনিটর তৈরি করে৷


আপনি GitHub- এ সম্পূর্ণ কোড দেখতে পারেন, যেটিতে অল্প পরিমাণে অবকাঠামো কোড রয়েছে যা এই পোস্টের জন্য নির্দিষ্ট ছিল না। আমি স্ব-ব্যাখ্যামূলক হতে কোড মন্তব্য করার চেষ্টা করেছি কিন্তু কোনো প্রশ্ন জিজ্ঞাসা বা পরামর্শ দিতে নির্দ্বিধায়.


আশা করি, এটি আপনাকে একটি ধারণা দেয় যে আপনি কীভাবে আপনার LED লাইটের সাথে সৃজনশীল হওয়া শুরু করতে পারেন।

ভবিষ্যতের উন্নতি

  • মাল্টি-কালার - আমার হালকা স্ট্রিপগুলিতে একবারে শুধুমাত্র একটি রঙ থাকতে পারে, তবে আমার কাছে আরেকটি সেট আছে যার চারটি চতুর্ভুজ থাকতে পারে, প্রতিটির নিজস্ব রঙ। এর মানে হল যে মনিটরের অংশগুলি স্ক্রিনের চারটি বিভাগের সাথে মেলে এবং আরও সঠিক পরিবেশের সেটিং দেওয়া সম্ভব। এই লাইটগুলি ব্লুটুথের পরিবর্তে ওয়াইফাইতে চলে এবং এটি ভবিষ্যতের প্রকল্প হতে পারে।
  • উজ্জ্বলতা - এটি সহজ রাখার জন্য, আমি শুধু রঙ পরিবর্তন এবং অন-অফ কমান্ডের সন্ধান করেছি। যাইহোক, উজ্জ্বলতা নিয়ন্ত্রণ কমান্ড সনাক্ত করে এবং রঙ অ্যালগরিদমে এটি নিক্ষেপ করে এটি সহজেই উন্নত করা যেতে পারে।
  • পারফরম্যান্স - যেহেতু আমরা রিয়েলটাইমে আলোগুলি পরিবর্তন করতে চাই, তাই কর্মক্ষমতা গুরুত্বপূর্ণ। কোন রঙটি সবচেয়ে প্রভাবশালী বলে বিবেচিত হবে তা সনাক্ত করার জন্য কিছু জটিল অ্যালগরিদম রয়েছে, বিশেষ করে যখন মানুষ অনুভূত হয় (যা রঙ রূপান্তরের পুরো বিশ্বে নিয়ে যায়)। যাইহোক, যেহেতু এটি বেশ দ্রুত চালানো দরকার, তাই কর্মক্ষমতা এবং নির্ভুলতার মধ্যে একটি ভারসাম্য থাকা দরকার। একটি ভবিষ্যত উন্নতি হতে পারে সরাসরি স্ক্রীনে পিক্সেল বিশ্লেষণ করার পরিবর্তে বাফার থেকে পড়ার জন্য সরাসরি গ্রাফিক্স কার্ডটি অ্যাক্সেস করার চেষ্টা করা এবং অ্যাক্সেস করা। যদি এটি সম্ভব হয়, আপনি গ্রাফিক্স বাফার থেকে স্ক্রীনে নেওয়া সময়ও দূর করবেন যা আলোর প্রতিক্রিয়াকে অপ্টিমাইজ করতে পারে।


আপনার কোন প্রতিক্রিয়া বা প্রশ্ন থাকলে নীচে মন্তব্য করতে দ্বিধা বোধ করুন।


এছাড়াও এখানে প্রকাশিত