ওয়েবে ব্লুটুথের মাধ্যমে সিরিয়াল

ফ্রাঁসোয়া বিউফোর্ট
François Beaufort

ওয়েব ব্লুটুথ এপিআই এবং ওয়েব সিরিয়াল এপিআই ওয়েব অ্যাপগুলিকে যথাক্রমে ব্লুটুথ লো এনার্জি (BLE) ডিভাইস এবং সিরিয়াল ডিভাইসগুলির সাথে যোগাযোগ করার অনুমতি দেয়। যদিও অনেক ওয়েব ডেভেলপার ইতিমধ্যেই এই APIগুলিকে দারুণ সাফল্যের জন্য ব্যবহার করছে, ব্লুটুথ ক্লাসিক ডিভাইসগুলির জন্যও সমর্থনের চাহিদা বাড়ছে৷

এখন, ওয়েব সিরিয়াল API ডেস্কটপে Chrome 117-এ সিরিয়াল পোর্ট প্রোফাইল (SPP) সহ পেয়ার করা ব্লুটুথ ক্লাসিক ডিভাইসে RFCOMM পরিষেবার সাথে যোগাযোগ সমর্থন করে। এটি ওয়েব ডেভেলপার এবং ব্যবহারকারীদের জন্য একইভাবে নতুন সম্ভাবনা উন্মুক্ত করে। এখানে কিছু বাস্তব-বিশ্বের ডিভাইস রয়েছে যা এটি থেকে উপকৃত হতে পারে:

  • Pixel Buds Pro এবং অন্যান্য ওয়্যারলেস ইয়ারবাডগুলি অডিও সেটিংস এবং ফার্মওয়্যার আপডেটগুলি পরিচালনা করতে RFCOMM ব্যবহার করে।
  • মোবাইল পয়েন্ট-অফ-সেল সিস্টেমগুলি রসিদ প্রিন্টারের সাথে যোগাযোগ করতে ব্লুটুথ এসপিপি ব্যবহার করে।
  • লাইভস্টক RFID ট্যাগ রিডাররা পশুর গতিবিধি লগ করতে ব্লুটুথ এসপিপি ব্যবহার করে।

ব্লুটুথ RFCOMM প্রোটোকল

নিজেকে 90 এর দশকের শেষ দিকে নিয়ে যান। পরের দিনের জন্য আপনার ক্যালেন্ডার সিঙ্ক করার জন্য আপনি শুধু আপনার পাম পাইলটকে এর ক্র্যাডেল রাখুন। এটা ভাল হবে না যদি আপনি তার পরিবর্তে যে করতে পারে? এই নতুন "ব্লুটুথ" প্রযুক্তির সাহায্যে আপনি সেই সমস্ত অগোছালো কর্ড থেকে মুক্তি পেতে পারেন। বেতার ভবিষ্যৎ! শুধুমাত্র একটি সমস্যা আছে, বিদ্যমান সবকিছু একটি RS-232 তারের সাথে সংযোগ করার জন্য ডিজাইন করা হয়েছে। সুতরাং, ব্লুটুথ রেডিও ফ্রিকোয়েন্সি কমিউনিকেশন (RFCOMM) প্রোটোকল ব্যবহার করে বিদ্যমান সমস্ত সফ্টওয়্যার এবং হার্ডওয়্যারে সেই ইন্টারফেসটি প্রদান করে।

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

ওয়েব সিরিয়াল API পরিবর্তন

ডেস্কটপে Chrome 117 থেকে শুরু করে, ওয়েব ডেভেলপাররা এখন ওয়েব সিরিয়াল API ব্যবহার করে RFCOMM পরিষেবার মাধ্যমে যুক্ত ব্লুটুথ ক্লাসিক ডিভাইসগুলির সাথে নির্ভরযোগ্যভাবে যোগাযোগ করতে পারে। ওয়েব সিরিয়াল API-তে নিম্নলিখিত আপডেটগুলি দ্বারা এটি সম্ভব হয়েছে:

  • ক্রোম এখন পেয়ার করা ব্লুটুথ ডিভাইসগুলিকে গণনা করে যা প্রমিত ব্লুটুথ ক্লাসিক সিরিয়াল পোর্ট প্রোফাইল ব্যবহার করে একটি সিরিয়াল ইন্টারফেস প্রকাশ করে৷
  • ক্রোম এখন সিরিয়াল ইন্টারফেসের সাথে যোগাযোগ করতে পারে এমনকি যদি অপারেটিং সিস্টেম বিশেষভাবে এমুলেটেড সিরিয়াল পোর্টের মাধ্যমে ডিভাইস নোড তৈরি না করে থাকে।
  • Chrome এখন একটি নন-সিরিয়াল পোর্ট পরিষেবার সাথে যোগাযোগ করতে পারে যা একটি RFCOMM সিরিয়াল ইন্টারফেস প্রকাশ করে ( নন-স্ট্যান্ডার্ড সার্ভিস ক্লাস আইডি দেখুন)।

আপনি একটি সিরিয়াল পোর্ট নিবন্ধ থেকে Read from এবং লিখতে ওয়েব সিরিয়াল API কীভাবে ব্যবহার করবেন সে সম্পর্কে শিখতে পারেন। এই নিবন্ধটি অনুমান করে যে আপনার ব্লুটুথ সম্পর্কে প্রাথমিক জ্ঞান রয়েছে এবং ব্লুটুথ পরিবর্তনের উপর সিরিয়ালের উপর ফোকাস করে।

কোনো ফিল্টার উল্লেখ না করে, navigator.serial.requestPort() কল করলে ব্যবহারকারীরা নন-ব্লুটুথ সিরিয়াল পোর্ট, ইতিমধ্যে ম্যাপ করা হয়েছে এমন ব্লুটুথ সিরিয়াল পোর্ট এবং প্রমিত ব্লুটুথ ক্লাসিক সিরিয়াল পোর্ট প্রোফাইল দ্বারা প্রদত্ত যেকোনও আনম্যাপ করা সিরিয়াল পোর্ট নির্বাচন করতে পারবেন।

// Prompt user to select any serial port.
const port = await navigator.serial.requestPort();

যদিও বেশিরভাগ ডিভাইস প্রমিত ব্লুটুথ ক্লাসিক সিরিয়াল পোর্ট প্রোফাইলের মাধ্যমে SPP-ভিত্তিক যোগাযোগ প্রকাশ করে, কিছু কাস্টম RFCOMM-ভিত্তিক পরিষেবা ব্যবহার করে। এই ডিভাইসগুলির একটি সার্ভিস ক্লাস আইডি রয়েছে যা স্ট্যান্ডার্ড ব্লুটুথ UUID পরিসরে নেই।

নীচের উদাহরণে দেখানো এই কাস্টম RFCOMM-ভিত্তিক পরিষেবাগুলি অ্যাক্সেস করার জন্য আপনাকে navigator.serial.requestPort() এ অনুমোদিত allowedBluetoothServiceClassIds তালিকা পাস করতে হবে।

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt user to select any serial port.
// Access to the custom Bluetooth RFCOMM service above will be allowed.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
});

মনে রাখবেন যে সমস্ত পরিষেবা ক্লাস আইডি যেগুলি ব্লুটুথ SIG বেস UUID ব্যবহার করে (অর্থাৎ, "-0000-1000-8000-00805f9b34fb" এ শেষ হওয়া সমস্ত UUID) ব্লক করা হয়েছে সিরিয়াল পোর্ট প্রোফাইল আইডি ছাড়া কারণ Chrome ব্লুটুথ ক্লাসিক পরিষেবাগুলি সমর্থন করে না অডিও এবং ভিডিও হিসাবে।

সার্ভিস ক্লাস আইডি দ্বারা চিহ্নিত ফিল্টার করা ব্লুটুথ সিরিয়াল পোর্টগুলির একটি তালিকা সহ ব্যবহারকারীকে প্রম্পট করতে navigator.serial.requestPort() কল করার সময় আপনি bluetoothServiceClassId ফিল্টার কী ব্যবহার করতে পারেন৷ নীচের উদাহরণ দেখুন.

const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";

// Prompt the user to select Bluetooth serial ports with
// the custom Bluetooth RFCOMM service above.
const port = await navigator.serial.requestPort({
  allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
  filters: [{ bluetoothServiceClassId: myBluetoothServiceUuid }],
});

যদি সিরিয়াল পোর্টটি একটি ব্লুটুথ ডিভাইসের অংশ হয়, তাহলে একটি নতুন bluetoothServiceClassId কী যেটি RFCOMM চ্যানেলের সাথে যুক্ত সার্ভিস ক্লাস আইডি ধারণ করে সেটি port.getInfo() এ কল করে ফেরত আসা সিরিয়াল পোর্ট তথ্যে পাওয়া যায়। সিরিয়াল পোর্ট ম্যাপ করা হলে, এটি "00001101-0000-1000-8000-00805f9b34fb" বা 0x1101 এর সংক্ষিপ্ত আকারে ফেরত দেয়।

const { bluetoothServiceClassId } = port.getInfo();

কেস উদাহরণ ব্যবহার করুন: কন্ট্রোল পিক্সেল বাডস প্রো

Pixel Buds Pro Web Companion অ্যাপ হল একটি নতুন ওয়েব অ্যাপ যা ব্যবহারকারীদের একটি ওয়েব ব্রাউজার সহ যেকোনো ডিভাইস থেকে তাদের Pixel Buds Pro নিয়ন্ত্রণ করতে দেয়। এটি একটি তাত্ক্ষণিক লোড অভিজ্ঞতার জন্য প্রগ্রেসিভ ওয়েব অ্যাপস প্রযুক্তি ব্যবহার করে তৈরি করা হয়েছে এবং অন্যান্য অপারেটিং সিস্টেম অ্যাপগুলির সাথে ঐচ্ছিকভাবে ইনস্টল করা যেতে পারে৷

অ্যাপটি Pixel Buds Pro-এর সাথে যোগাযোগ করতে ওয়েব সিরিয়াল API ব্যবহার করে। এটি ব্যবহারকারীদের তাদের Pixel Buds Pro-তে বিভিন্ন সেটিংস নিয়ন্ত্রণ করতে দেয়, যেমন সক্রিয় নয়েজ কন্ট্রোল, ইকুয়ালাইজার, ইন-কানে সনাক্তকরণ এবং ফার্মওয়্যার আপডেট।

Pixel Buds Pro Web Companion অ্যাপ ব্যবহার করে দেখতে, একটি ChromeOS ডিভাইসে mypixelbuds.google.com এ যান (অন্যান্য প্ল্যাটফর্ম শীঘ্রই আসছে)।

Pixel Buds Pro ওয়েব কম্প্যানিয়ন অ্যাপের স্ক্রিনশট।
Pixel Buds Pro ওয়েব কম্প্যানিয়ন অ্যাপ।

সম্পদ

স্বীকৃতি

রিলি গ্রান্ট, থমাস স্টেইনার, বেন মরস এবং ভিনসেন্ট শেইবকে তাদের পর্যালোচনার জন্য ধন্যবাদ। আনস্প্ল্যাশে মিকা বাউমিস্টারের হিরো ছবি।