জাভাস্ক্রিপ্টের মাধ্যমে ব্লুটুথ ডিভাইসের সাথে যোগাযোগ করা

ওয়েব ব্লুটুথ এপিআই ওয়েবসাইটগুলিকে ব্লুটুথ ডিভাইসের সাথে যোগাযোগ করার অনুমতি দেয়।

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

যদি আমি তোমাকে বলি যে ওয়েবসাইটগুলি নিরাপদ এবং গোপনীয়তা রক্ষাকারী উপায়ে কাছাকাছি ব্লুটুথ ডিভাইসগুলির সাথে যোগাযোগ করতে পারে? এইভাবে, হার্ট রেট মনিটর, গান গাওয়া আলোর বাল্ব এবং এমনকি কচ্ছপগুলিও সরাসরি একটি ওয়েবসাইটের সাথে যোগাযোগ করতে পারে।

এখন পর্যন্ত, ব্লুটুথ ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা শুধুমাত্র প্ল্যাটফর্ম-নির্দিষ্ট অ্যাপগুলির জন্যই সম্ভব ছিল। ওয়েব ব্লুটুথ API এর লক্ষ্য এটি পরিবর্তন করা এবং এটি ওয়েব ব্রাউজারগুলিতেও নিয়ে আসা।

আমরা শুরু করার আগে

এই ডকুমেন্টটি ধরে নিচ্ছে যে ব্লুটুথ লো এনার্জি (BLE) এবং জেনেরিক অ্যাট্রিবিউট প্রোফাইল কীভাবে কাজ করে সে সম্পর্কে আপনার কিছু প্রাথমিক জ্ঞান আছে।

যদিও ওয়েব ব্লুটুথ এপিআই স্পেসিফিকেশন এখনও চূড়ান্ত হয়নি, তবুও স্পেক লেখকরা সক্রিয়ভাবে এই এপিআইটি চেষ্টা করে দেখার জন্য এবং স্পেক সম্পর্কে প্রতিক্রিয়া এবং বাস্তবায়ন সম্পর্কে প্রতিক্রিয়া জানাতে উৎসাহী ডেভেলপারদের খুঁজছেন।

ওয়েব ব্লুটুথ API-এর একটি উপসেট ChromeOS, Android 6.0 এর জন্য Chrome, Mac (Chrome 56) এবং Windows 10 (Chrome 70) এ উপলব্ধ। এর অর্থ হল আপনি কাছাকাছি ব্লুটুথ লো এনার্জি ডিভাইসগুলির জন্য অনুরোধ করতে এবং সংযোগ করতে, ব্লুটুথ বৈশিষ্ট্যগুলি পড়তে / লিখতে , GATT বিজ্ঞপ্তিগুলি গ্রহণ করতে , একটি ব্লুটুথ ডিভাইস সংযোগ বিচ্ছিন্ন হয়ে গেলে জানতে এবং এমনকি ব্লুটুথ বর্ণনাকারীদের পড়তে এবং লিখতে সক্ষম হবেন। আরও তথ্যের জন্য MDN-এর ব্রাউজার সামঞ্জস্যতা টেবিলটি দেখুন।

লিনাক্স এবং উইন্ডোজের পূর্ববর্তী সংস্করণগুলির জন্য, about://flags#experimental-web-platform-features পতাকা সক্ষম করুন।

উৎপত্তি পরীক্ষার জন্য উপলব্ধ

ওয়েব ব্লুটুথ এপিআই ব্যবহার করে ডেভেলপারদের কাছ থেকে যতটা সম্ভব প্রতিক্রিয়া পেতে, Chrome পূর্বে ChromeOS, Android এবং Mac এর জন্য একটি অরিজিন ট্রায়াল হিসাবে Chrome 53 এ এই বৈশিষ্ট্যটি যুক্ত করেছে।

২০১৭ সালের জানুয়ারিতে বিচার সফলভাবে শেষ হয়েছে।

নিরাপত্তার প্রয়োজনীয়তা

নিরাপত্তার লেনদেন বোঝার জন্য, আমি ওয়েব ব্লুটুথ এপিআই স্পেসিফিকেশন নিয়ে কাজ করা ক্রোম টিমের একজন সফটওয়্যার ইঞ্জিনিয়ার জেফ্রি ইয়াসকিনের ওয়েব ব্লুটুথ সিকিউরিটি মডেল পোস্টটি সুপারিশ করছি।

শুধুমাত্র HTTPS

যেহেতু এই পরীক্ষামূলক API ওয়েবে যোগ করা একটি শক্তিশালী নতুন বৈশিষ্ট্য, এটি শুধুমাত্র সুরক্ষিত প্রসঙ্গগুলির জন্য উপলব্ধ করা হয়েছে। এর অর্থ হল আপনাকে TLS মাথায় রেখে তৈরি করতে হবে।

ব্যবহারকারীর অঙ্গভঙ্গি প্রয়োজন

নিরাপত্তা বৈশিষ্ট্য হিসেবে, navigator.bluetooth.requestDevice ব্যবহার করে ব্লুটুথ ডিভাইস আবিষ্কার করতে হলে ব্যবহারকারীর অঙ্গভঙ্গি যেমন স্পর্শ বা মাউস ক্লিকের মাধ্যমে ট্রিগার করতে হবে। আমরা pointerup , click এবং touchend ইভেন্ট শোনার কথা বলছি।

button.addEventListener('pointerup', function(event) {
  // Call navigator.bluetooth.requestDevice
});

কোডে প্রবেশ করুন

ওয়েব ব্লুটুথ এপিআই জাভাস্ক্রিপ্ট প্রমিসেসের উপর অনেক বেশি নির্ভর করে। যদি আপনি এগুলোর সাথে পরিচিত না হন, তাহলে এই দুর্দান্ত প্রমিসেস টিউটোরিয়ালটি দেখুন। আরও একটি জিনিস, () => {} হল ECMAScript 2015 Arrow ফাংশন

ব্লুটুথ ডিভাইসের জন্য অনুরোধ করুন

ওয়েব ব্লুটুথ এপিআই স্পেসিফিকেশনের এই সংস্করণটি কেন্দ্রীয় ভূমিকায় চলমান ওয়েবসাইটগুলিকে একটি BLE সংযোগের মাধ্যমে দূরবর্তী GATT সার্ভারের সাথে সংযোগ স্থাপনের অনুমতি দেয়। এটি ব্লুটুথ 4.0 বা তার পরবর্তী সংস্করণ বাস্তবায়নকারী ডিভাইসগুলির মধ্যে যোগাযোগ সমর্থন করে।

যখন কোনও ওয়েবসাইট navigator.bluetooth.requestDevice ব্যবহার করে কাছাকাছি ডিভাইসগুলিতে অ্যাক্সেসের অনুরোধ করে, তখন ব্রাউজার ব্যবহারকারীকে একটি ডিভাইস চয়নকারীর সাথে অনুরোধ করে যেখানে তারা একটি ডিভাইস বেছে নিতে বা অনুরোধটি বাতিল করতে পারে।

ব্লুটুথ ডিভাইস ব্যবহারকারীর প্রম্পট।

navigator.bluetooth.requestDevice() ফাংশনটি একটি বাধ্যতামূলক বস্তু গ্রহণ করে যা ফিল্টারগুলিকে সংজ্ঞায়িত করে। এই ফিল্টারগুলি কেবলমাত্র কিছু বিজ্ঞাপনিত ব্লুটুথ GATT পরিষেবা এবং/অথবা ডিভাইসের নামের সাথে মেলে এমন ডিভাইসগুলি ফেরত দিতে ব্যবহৃত হয়।

পরিষেবা ফিল্টার

উদাহরণস্বরূপ, ব্লুটুথ GATT ব্যাটারি পরিষেবার বিজ্ঞাপনের জন্য ব্লুটুথ ডিভাইসগুলির অনুরোধ করতে:

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => { /* … */ })
.catch(error => { console.error(error); });

যদি আপনার ব্লুটুথ GATT পরিষেবাটি প্রমিত ব্লুটুথ GATT পরিষেবার তালিকায় না থাকে, তাহলে আপনি সম্পূর্ণ ব্লুটুথ UUID অথবা একটি সংক্ষিপ্ত 16- বা 32-বিট ফর্ম প্রদান করতে পারেন।

navigator.bluetooth.requestDevice({
  filters: [{
    services: [0x1234, 0x12345678, '99999999-0000-1000-8000-00805f9b34fb']
  }]
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

নাম ফিল্টার

আপনি name ফিল্টার কী ব্যবহার করে বিজ্ঞাপনে থাকা ডিভাইসের নামের উপর ভিত্তি করে ব্লুটুথ ডিভাইসের অনুরোধ করতে পারেন, অথবা এমনকি namePrefix ফিল্টার কী ব্যবহার করে এই নামের একটি প্রিফিক্সও ব্যবহার করতে পারেন। মনে রাখবেন যে এই ক্ষেত্রে, পরিষেবা ফিল্টারে অন্তর্ভুক্ত নয় এমন কোনও পরিষেবা অ্যাক্সেস করার জন্য আপনাকে optionalServices পরিষেবা কী নির্ধারণ করতে হবে। যদি আপনি তা না করেন, তাহলে সেগুলি অ্যাক্সেস করার চেষ্টা করার সময় পরে আপনি একটি ত্রুটি দেখতে পাবেন।

navigator.bluetooth.requestDevice({
  filters: [{
    name: 'Francois robot'
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

প্রস্তুতকারকের ডেটা ফিল্টার

manufacturerData filters কী দিয়ে বিজ্ঞাপন দেওয়া নির্মাতার নির্দিষ্ট ডেটার উপর ভিত্তি করে ব্লুটুথ ডিভাইসের অনুরোধ করাও সম্ভব। এই কী হল companyIdentifier নামক একটি বাধ্যতামূলক ব্লুটুথ কোম্পানি শনাক্তকারী কী সহ অবজেক্টের একটি অ্যারে। আপনি একটি ডেটা প্রিফিক্সও প্রদান করতে পারেন যা ব্লুটুথ ডিভাইস থেকে প্রস্তুতকারকের ডেটা ফিল্টার করে যা এটি দিয়ে শুরু হয়। মনে রাখবেন যে পরিষেবা ফিল্টারে অন্তর্ভুক্ত নয় এমন কোনও পরিষেবা অ্যাক্সেস করতে সক্ষম হওয়ার জন্য আপনাকে optionalServices কীটিও সংজ্ঞায়িত করতে হবে। যদি আপনি তা না করেন, তাহলে সেগুলি অ্যাক্সেস করার চেষ্টা করার সময় পরে আপনি একটি ত্রুটি পাবেন।

// Filter Bluetooth devices from Google company with manufacturer data bytes
// that start with [0x01, 0x02].
navigator.bluetooth.requestDevice({
  filters: [{
    manufacturerData: [{
      companyIdentifier: 0x00e0,
      dataPrefix: new Uint8Array([0x01, 0x02])
    }]
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

প্রস্তুতকারকের ডেটার কিছু প্যাটার্ন মেলানোর জন্য একটি মাস্ক ডেটা প্রিফিক্স সহও ব্যবহার করা যেতে পারে। আরও জানতে ব্লুটুথ ডেটা ফিল্টার ব্যাখ্যাকারীটি দেখুন।

বর্জন ফিল্টার

navigator.bluetooth.requestDevice() এর exclusionFilters অপশনটি আপনাকে ব্রাউজার পিকার থেকে কিছু ডিভাইস বাদ দিতে দেয়। এটি এমন ডিভাইস বাদ দিতে ব্যবহার করা যেতে পারে যা একটি বৃহত্তর ফিল্টারের সাথে মেলে কিন্তু অসমর্থিত।

// Request access to a bluetooth device whose name starts with "Created by".
// The device named "Created by Francois" has been reported as unsupported.
navigator.bluetooth.requestDevice({
  filters: [{
    namePrefix: "Created by"
  }],
  exclusionFilters: [{
    name: "Created by Francois"
  }],
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

কোনও ফিল্টার নেই

পরিশেষে, filters পরিবর্তে আপনি acceptAllDevices কী ব্যবহার করে কাছাকাছি সমস্ত ব্লুটুথ ডিভাইস দেখাতে পারেন। কিছু পরিষেবা অ্যাক্সেস করতে সক্ষম হওয়ার জন্য আপনাকে optionalServices কীটিও সংজ্ঞায়িত করতে হবে। যদি আপনি তা না করেন, তাহলে সেগুলি অ্যাক্সেস করার চেষ্টা করার সময় পরে আপনি একটি ত্রুটি পাবেন।

navigator.bluetooth.requestDevice({
  acceptAllDevices: true,
  optionalServices: ['battery_service'] // Required to access service later.
})
.then(device => { /* … */ })
.catch(error => { console.error(error); });

একটি ব্লুটুথ ডিভাইসের সাথে সংযোগ করুন

তাহলে এখন আপনার একটি BluetoothDevice আছে, তাহলে আপনি কী করবেন? আসুন ব্লুটুথ রিমোট GATT সার্ভারের সাথে সংযোগ স্থাপন করি যা পরিষেবা এবং বৈশিষ্ট্যগত সংজ্ঞা ধারণ করে।

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => {
  // Human-readable name of the device.
  console.log(device.name);

  // Attempts to connect to remote GATT Server.
  return device.gatt.connect();
})
.then(server => { /* … */ })
.catch(error => { console.error(error); });

একটি ব্লুটুথ বৈশিষ্ট্য পড়ুন

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

সামনের উদাহরণে, battery_level হল স্ট্যান্ডার্ডাইজড ব্যাটারি লেভেল ক্যারেক্টারিস্টিক

navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => device.gatt.connect())
.then(server => {
  // Getting Battery Service…
  return server.getPrimaryService('battery_service');
})
.then(service => {
  // Getting Battery Level Characteristic…
  return service.getCharacteristic('battery_level');
})
.then(characteristic => {
  // Reading Battery Level…
  return characteristic.readValue();
})
.then(value => {
  console.log(`Battery percentage is ${value.getUint8(0)}`);
})
.catch(error => { console.error(error); });

যদি আপনি একটি কাস্টম ব্লুটুথ GATT বৈশিষ্ট্য ব্যবহার করেন, তাহলে আপনি service.getCharacteristic এ সম্পূর্ণ ব্লুটুথ UUID অথবা একটি ছোট 16- বা 32-বিট ফর্ম প্রদান করতে পারেন।

মনে রাখবেন যে আপনি একটি বৈশিষ্ট্যের উপর একটি characteristicvaluechanged ইভেন্ট লিসেনার যোগ করতে পারেন যাতে এর মান পড়া যায়। আসন্ন GATT বিজ্ঞপ্তিগুলি কীভাবে ঐচ্ছিকভাবে পরিচালনা করবেন তা দেখতে Read Characteristic Value Changed Sample দেখুন।


.then(characteristic => {
  // Set up event listener for when characteristic value changes.
  characteristic.addEventListener('characteristicvaluechanged',
                                  handleBatteryLevelChanged);
  // Reading Battery Level…
  return characteristic.readValue();
})
.catch(error => { console.error(error); });

function handleBatteryLevelChanged(event) {
  const batteryLevel = event.target.value.getUint8(0);
  console.log('Battery percentage is ' + batteryLevel);
}

একটি ব্লুটুথ বৈশিষ্ট্যে লিখুন

ব্লুটুথ GATT ক্যারেক্টারিস্টিকে লেখা যতটা সহজ, ততটাই সহজ। এবার, হার্ট রেট কন্ট্রোল পয়েন্ট ব্যবহার করে হার্ট রেট মনিটর ডিভাইসে এনার্জি এক্সপেন্ডেড ফিল্ডের মান 0 তে রিসেট করা যাক।

আমি প্রতিশ্রুতি দিচ্ছি যে এখানে কোন জাদু নেই। হার্ট রেট কন্ট্রোল পয়েন্ট ক্যারেক্টারিস্টিক পৃষ্ঠায় সবকিছু ব্যাখ্যা করা হয়েছে।

navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('heart_rate'))
.then(service => service.getCharacteristic('heart_rate_control_point'))
.then(characteristic => {
  // Writing 1 is the signal to reset energy expended.
  const resetEnergyExpended = Uint8Array.of(1);
  return characteristic.writeValue(resetEnergyExpended);
})
.then(_ => {
  console.log('Energy expended has been reset.');
})
.catch(error => { console.error(error); });

GATT বিজ্ঞপ্তি পান

এখন, দেখা যাক ডিভাইসে হার্ট রেট পরিমাপের বৈশিষ্ট্য পরিবর্তন হলে কীভাবে বিজ্ঞপ্তি পাবেন:

navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('heart_rate'))
.then(service => service.getCharacteristic('heart_rate_measurement'))
.then(characteristic => characteristic.startNotifications())
.then(characteristic => {
  characteristic.addEventListener('characteristicvaluechanged',
                                  handleCharacteristicValueChanged);
  console.log('Notifications have been started.');
})
.catch(error => { console.error(error); });

function handleCharacteristicValueChanged(event) {
  const value = event.target.value;
  console.log('Received ' + value);
  // TODO: Parse Heart Rate Measurement value.
  // See https://github.com/WebBluetoothCG/demos/blob/gh-pages/heart-rate-sensor/heartRateSensor.js
}

নোটিফিকেশন স্যাম্পল আপনাকে দেখায় কিভাবে stopNotifications() দিয়ে নোটিফিকেশন বন্ধ করতে হয় এবং যোগ করা characteristicvaluechanged ইভেন্ট লিসেনার সঠিকভাবে মুছে ফেলতে হয়।

একটি ব্লুটুথ ডিভাইস থেকে সংযোগ বিচ্ছিন্ন করুন

আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদানের জন্য, আপনি সংযোগ বিচ্ছিন্ন করার ঘটনাগুলি শুনতে এবং ব্যবহারকারীকে পুনরায় সংযোগ স্থাপনের জন্য আমন্ত্রণ জানাতে পারেন:

navigator.bluetooth.requestDevice({ filters: [{ name: 'Francois robot' }] })
.then(device => {
  // Set up event listener for when device gets disconnected.
  device.addEventListener('gattserverdisconnected', onDisconnected);

  // Attempts to connect to remote GATT Server.
  return device.gatt.connect();
})
.then(server => { /* … */ })
.catch(error => { console.error(error); });

function onDisconnected(event) {
  const device = event.target;
  console.log(`Device ${device.name} is disconnected.`);
}

আপনি ব্লুটুথ ডিভাইস থেকে আপনার ওয়েব অ্যাপ সংযোগ বিচ্ছিন্ন করতে device.gatt.disconnect() কল করতে পারেন। এটি বিদ্যমান gattserverdisconnected ইভেন্ট লিসেনারের সাথে সংযোগ স্থাপন করবে। মনে রাখবেন যে অন্য কোনও অ্যাপ যদি ইতিমধ্যেই ব্লুটুথ ডিভাইসের সাথে যোগাযোগ করে থাকে তবে এটি ব্লুটুথ ডিভাইস যোগাযোগ বন্ধ করবে না। আরও গভীরে যেতে Device Disconnect Sample এবং Automatic Reconnect Sample দেখুন।

ব্লুটুথ বর্ণনাকারী পড়ুন এবং লিখুন

ব্লুটুথ GATT বর্ণনাকারী হল এমন বৈশিষ্ট্য যা একটি বৈশিষ্ট্যগত মান বর্ণনা করে। আপনি ব্লুটুথ GATT বৈশিষ্ট্যের মতো একইভাবে এগুলি পড়তে এবং লিখতে পারেন।

উদাহরণস্বরূপ, ডিভাইসের স্বাস্থ্য থার্মোমিটারের পরিমাপ ব্যবধানের ব্যবহারকারীর বিবরণ কীভাবে পড়তে হয় তা দেখা যাক।

নিচের উদাহরণে, health_thermometer হল Health Thermometer পরিষেবা , measurement_interval Measurement Interval বৈশিষ্ট্য , এবং gatt.characteristic_user_description হল Characteristic User Description বর্ণনাকারী

navigator.bluetooth.requestDevice({ filters: [{ services: ['health_thermometer'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('health_thermometer'))
.then(service => service.getCharacteristic('measurement_interval'))
.then(characteristic => characteristic.getDescriptor('gatt.characteristic_user_description'))
.then(descriptor => descriptor.readValue())
.then(value => {
  const decoder = new TextDecoder('utf-8');
  console.log(`User Description: ${decoder.decode(value)}`);
})
.catch(error => { console.error(error); });

এখন যেহেতু আমরা ডিভাইসের স্বাস্থ্য থার্মোমিটারের পরিমাপ ব্যবধানের ব্যবহারকারীর বিবরণ পড়েছি, আসুন দেখি কিভাবে এটি আপডেট করতে হয় এবং একটি কাস্টম মান লিখতে হয়।

navigator.bluetooth.requestDevice({ filters: [{ services: ['health_thermometer'] }] })
.then(device => device.gatt.connect())
.then(server => server.getPrimaryService('health_thermometer'))
.then(service => service.getCharacteristic('measurement_interval'))
.then(characteristic => characteristic.getDescriptor('gatt.characteristic_user_description'))
.then(descriptor => {
  const encoder = new TextEncoder('utf-8');
  const userDescription = encoder.encode('Defines the time between measurements.');
  return descriptor.writeValue(userDescription);
})
.catch(error => { console.error(error); });

নমুনা, ডেমো এবং কোডল্যাব

নীচের সমস্ত ওয়েব ব্লুটুথ নমুনা সফলভাবে পরীক্ষা করা হয়েছে। এই নমুনাগুলি সম্পূর্ণরূপে উপভোগ করার জন্য, আমি আপনাকে [BLE পেরিফেরাল সিমুলেটর অ্যান্ড্রয়েড অ্যাপ] ইনস্টল করার পরামর্শ দিচ্ছি যা একটি ব্যাটারি পরিষেবা, একটি হার্ট রেট পরিষেবা, অথবা একটি স্বাস্থ্য থার্মোমিটার পরিষেবা সহ একটি BLE পেরিফেরালকে অনুকরণ করে।

শিক্ষানবিস

  • ডিভাইসের তথ্য - একটি BLE ডিভাইস থেকে মৌলিক ডিভাইসের তথ্য পুনরুদ্ধার করুন।
  • ব্যাটারি লেভেল - একটি BLE ডিভাইস থেকে ব্যাটারি তথ্য উদ্ধার করুন যা ব্যাটারি তথ্যের বিজ্ঞাপন দেয়।
  • শক্তি রিসেট করুন - হার্ট রেট বিজ্ঞাপনের জন্য BLE ডিভাইস থেকে ব্যয়িত শক্তি রিসেট করুন।
  • বৈশিষ্ট্যগত বৈশিষ্ট্য - একটি BLE ডিভাইস থেকে একটি নির্দিষ্ট বৈশিষ্ট্যের সমস্ত বৈশিষ্ট্য প্রদর্শন করুন।
  • বিজ্ঞপ্তি - একটি BLE ডিভাইস থেকে বৈশিষ্ট্যযুক্ত বিজ্ঞপ্তি শুরু এবং বন্ধ করুন।
  • ডিভাইস সংযোগ বিচ্ছিন্ন করুন - সংযোগ বিচ্ছিন্ন করুন এবং সংযোগ স্থাপনের পরে কোনও BLE ডিভাইস সংযোগ বিচ্ছিন্ন হয়ে গেলে বিজ্ঞপ্তি পান।
  • বৈশিষ্ট্যগুলি পান - একটি BLE ডিভাইস থেকে একটি বিজ্ঞাপনিত পরিষেবার সমস্ত বৈশিষ্ট্য পান।
  • বর্ণনাকারী পান - একটি BLE ডিভাইস থেকে একটি বিজ্ঞাপনিত পরিষেবার সমস্ত বৈশিষ্ট্যের বর্ণনাকারী পান।
  • প্রস্তুতকারকের ডেটা ফিল্টার - একটি BLE ডিভাইস থেকে মৌলিক ডিভাইস তথ্য পুনরুদ্ধার করুন যা প্রস্তুতকারকের ডেটার সাথে মেলে।
  • এক্সক্লুশন ফিল্টার - মৌলিক এক্সক্লুশন ফিল্টার সমন্বিত একটি BLE ডিভাইস থেকে মৌলিক ডিভাইস তথ্য পুনরুদ্ধার করুন।

একাধিক ক্রিয়াকলাপ একত্রিত করা

আমাদের কিউরেটেড ওয়েব ব্লুটুথ ডেমো এবং অফিসিয়াল ওয়েব ব্লুটুথ কোডল্যাবগুলিও দেখুন।

লাইব্রেরি

  • web-bluetooth-utils হল একটি npm মডিউল যা API-তে কিছু সুবিধাজনক ফাংশন যোগ করে।
  • একটি ওয়েব ব্লুটুথ API শিম noble তে পাওয়া যায়, যা সবচেয়ে জনপ্রিয় Node.js BLE কেন্দ্রীয় মডিউল। এটি আপনাকে WebSocket সার্ভার বা অন্যান্য প্লাগইন ছাড়াই noble ওয়েবপ্যাক/ব্রাউজারফি করতে দেয়।
  • অ্যাঙ্গুলার-ওয়েব-ব্লুটুথ হল অ্যাঙ্গুলারের জন্য একটি মডিউল যা ওয়েব ব্লুটুথ এপিআই কনফিগার করার জন্য প্রয়োজনীয় সমস্ত বয়লারপ্লেটকে বিমূর্ত করে।

যন্ত্র

  • ওয়েব দিয়ে শুরু করুন ব্লুটুথ একটি সহজ ওয়েব অ্যাপ যা একটি ব্লুটুথ ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার জন্য সমস্ত জাভাস্ক্রিপ্ট বয়লারপ্লেট কোড তৈরি করবে। একটি ডিভাইসের নাম, একটি পরিষেবা, একটি বৈশিষ্ট্য লিখুন, এর বৈশিষ্ট্যগুলি সংজ্ঞায়িত করুন এবং আপনি যেতে প্রস্তুত।
  • আপনি যদি ইতিমধ্যেই একজন ব্লুটুথ ডেভেলপার হন, তাহলে ওয়েব ব্লুটুথ ডেভেলপার স্টুডিও প্লাগইন আপনার ব্লুটুথ ডিভাইসের জন্য ওয়েব ব্লুটুথ জাভাস্ক্রিপ্ট কোডও তৈরি করবে।

পরামর্শ

Chrome-এ about://bluetooth-internals এ একটি ব্লুটুথ ইন্টার্নাল পৃষ্ঠা পাওয়া যায় যাতে আপনি কাছাকাছি ব্লুটুথ ডিভাইসগুলি সম্পর্কে সবকিছু পরীক্ষা করতে পারেন: অবস্থা, পরিষেবা, বৈশিষ্ট্য এবং বর্ণনাকারী।

Chrome-এ ব্লুটুথ ডিবাগ করার জন্য অভ্যন্তরীণ পৃষ্ঠার স্ক্রিনশট
ব্লুটুথ ডিভাইস ডিবাগ করার জন্য Chrome-এ অভ্যন্তরীণ পৃষ্ঠা।

ব্লুটুথ ডিবাগিং কখনও কখনও কঠিন হতে পারে বলে আমি অফিসিয়াল "ওয়েব ব্লুটুথ বাগ ফাইল করবেন" পৃষ্ঠাটি দেখার পরামর্শ দিচ্ছি।

এরপর কি?

ওয়েব ব্লুটুথ API-এর কোন অংশগুলি বর্তমানে বাস্তবায়িত হচ্ছে তা জানতে প্রথমে ব্রাউজার এবং প্ল্যাটফর্ম বাস্তবায়নের অবস্থা পরীক্ষা করুন।

যদিও এটি এখনও অসম্পূর্ণ, অদূর ভবিষ্যতে কী আশা করা যায় তার এক ঝলক এখানে দেওয়া হল:

  • কাছাকাছি BLE বিজ্ঞাপনগুলির জন্য স্ক্যানিং navigator.bluetooth.requestLEScan() ব্যবহার করে করা হবে।
  • একটি নতুন serviceadded ইভেন্ট নতুন আবিষ্কৃত Bluetooth GATT পরিষেবাগুলি ট্র্যাক করবে এবং serviceremoved ইভেন্টটি সরানো পরিষেবাগুলি ট্র্যাক করবে। একটি নতুন servicechanged ইভেন্ট তখন কার্যকর হবে যখন কোনও বৈশিষ্ট্য এবং/অথবা বর্ণনাকারী একটি Bluetooth GATT পরিষেবা থেকে যোগ করা বা সরানো হবে।

API এর জন্য সমর্থন দেখান

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

#WebBluetooth হ্যাশট্যাগ ব্যবহার করে @ChromiumDev- এ একটি টুইট পাঠান এবং আপনি এটি কোথায় এবং কীভাবে ব্যবহার করছেন তা আমাদের জানান।

রিসোর্স

স্বীকৃতি

পর্যালোচনা করার জন্য কেইস বাস্কসকে ধন্যবাদ।