JavaScript पर ब्लूटूथ डिवाइसों से संपर्क करना

वेब ब्लूटूथ एपीआई की मदद से, वेबसाइटें ब्लूटूथ डिवाइसों से कम्यूनिकेट कर सकती हैं.

François Beaufort
François Beaufort

अगर हम आपसे कहें कि वेबसाइटें, आस-पास मौजूद ब्लूटूथ डिवाइसों से सुरक्षित तरीके से और निजता बनाए रखते हुए कम्यूनिकेट कर सकती हैं, तो क्या होगा? इस तरह, हार्ट रेट मॉनिटर, गाने वाले लाइटबल्ब, और यहां तक कि कछुए भी सीधे किसी वेबसाइट से इंटरैक्ट कर सकते हैं.

अब तक, ब्लूटूथ डिवाइसों से इंटरैक्ट करने की सुविधा सिर्फ़ प्लैटफ़ॉर्म के हिसाब से बनाए गए ऐप्लिकेशन के लिए उपलब्ध थी. वेब ब्लूटूथ एपीआई का मकसद, इस समस्या को हल करना है. साथ ही, इसे वेब ब्राउज़र पर भी उपलब्ध कराना है.

शुरू करने से पहले

इस दस्तावेज़ में यह माना गया है कि आपको Bluetooth Low Energy (BLE) और Generic Attribute Profile के काम करने के तरीके के बारे में बुनियादी जानकारी है.

वेब ब्लूटूथ एपीआई स्पेसिफ़िकेशन को अब तक फ़ाइनल नहीं किया गया है. हालांकि, स्पेसिफ़िकेशन बनाने वाले लोग, इस एपीआई को आज़माने के लिए उत्साही डेवलपर की तलाश कर रहे हैं. साथ ही, वे स्पेसिफ़िकेशन के बारे में सुझाव/राय और एपीआई को लागू करने के बारे में सुझाव/राय चाहते हैं.

Web Bluetooth API का एक सबसेट, ChromeOS, Android 6.0 के लिए Chrome, Mac (Chrome 56), और Windows 10 (Chrome 70) में उपलब्ध है. इसका मतलब है कि आपके पास आस-पास मौजूद ब्लूटूथ स्मार्ट डिवाइसों से कनेक्ट करने का अनुरोध करने और कनेक्ट करने का विकल्प होना चाहिए. साथ ही, ब्लूटूथ की सुविधाओं को पढ़ने/लिखने, GATT सूचनाएं पाने, ब्लूटूथ डिवाइस के डिसकनेक्ट होने की जानकारी पाने, और ब्लूटूथ डिस्क्रिप्टर को पढ़ने और लिखने का विकल्प होना चाहिए. ज़्यादा जानकारी के लिए, MDN की ब्राउज़र के साथ काम करने की सुविधा टेबल देखें.

Linux और Windows के पुराने वर्शन के लिए, about://flags में #experimental-web-platform-features फ़्लैग चालू करें.

ओरिजिन ट्रायल के लिए उपलब्ध है

ChromeOS, Android, और Mac पर Web Bluetooth API का इस्तेमाल करने वाले डेवलपर से ज़्यादा से ज़्यादा सुझाव/राय पाने या शिकायत करने के लिए, Chrome ने इस सुविधा को Chrome 53 में ऑरिजिन ट्रायल के तौर पर जोड़ा था.

यह ट्रायल जनवरी 2017 में खत्म हो गया है.

सुरक्षा से जुड़ी ज़रूरी शर्तें

सुरक्षा से जुड़े फ़ायदों और नुकसानों के बारे में जानने के लिए, मैं आपको Chrome टीम के सॉफ़्टवेयर इंजीनियर जेफ़्री यास्किन का वेब ब्लूटूथ सुरक्षा मॉडल पोस्ट पढ़ने का सुझाव देता हूं. वे वेब ब्लूटूथ एपीआई स्पेसिफ़िकेशन पर काम करते हैं.

सिर्फ़ एचटीटीपीएस

यह एक्सपेरिमेंटल एपीआई, वेब में जोड़ी गई एक नई और दमदार सुविधा है. इसलिए, इसे सिर्फ़ सुरक्षित कॉन्टेक्स्ट के लिए उपलब्ध कराया गया है. इसका मतलब है कि आपको TLS को ध्यान में रखकर काम करना होगा.

उपयोगकर्ता के जेस्चर की ज़रूरत है

सुरक्षा से जुड़ी सुविधा के तौर पर, navigator.bluetooth.requestDevice की मदद से ब्लूटूथ डिवाइसों का पता लगाने की सुविधा को उपयोगकर्ता के जेस्चर से ट्रिगर किया जाना चाहिए. जैसे, टच करना या माउस से क्लिक करना. हम pointerup, click, और touchend इवेंट को सुनने के बारे में बात कर रहे हैं.

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

कोड के बारे में जानकारी

Web Bluetooth API, JavaScript Promises पर काफ़ी हद तक निर्भर करता है. अगर आपको इनके बारे में नहीं पता है, तो Promises ट्यूटोरियल देखें. एक और बात, () => {} ECMAScript 2015 के ऐरो फ़ंक्शन हैं.

ब्लूटूथ डिवाइसों का अनुरोध करना

Web Bluetooth API स्पेसिफ़िकेशन के इस वर्शन की मदद से, सेंट्रल भूमिका में काम करने वाली वेबसाइटें, बीएलई कनेक्शन के ज़रिए रिमोट GATT सर्वर से कनेक्ट हो सकती हैं. यह उन डिवाइसों के बीच कम्यूनिकेशन की सुविधा देता है जिनमें ब्लूटूथ 4.0 या उसके बाद का वर्शन इस्तेमाल किया जाता है.

जब कोई वेबसाइट, navigator.bluetooth.requestDevice का इस्तेमाल करके आस-पास मौजूद डिवाइसों को ऐक्सेस करने का अनुरोध करती है, तो ब्राउज़र उपयोगकर्ता को डिवाइस चुनने का विकल्प देता है. यहां उपयोगकर्ता, कोई डिवाइस चुन सकता है या अनुरोध रद्द कर सकता है.

ब्लूटूथ डिवाइस के उपयोगकर्ता को प्रॉम्प्ट.

navigator.bluetooth.requestDevice() फ़ंक्शन, एक ज़रूरी ऑब्जेक्ट लेता है. यह ऑब्जेक्ट फ़िल्टर तय करता है. इन फ़िल्टर का इस्तेमाल, सिर्फ़ उन डिवाइसों को वापस लाने के लिए किया जाता है जो विज्ञापन में शामिल की गई कुछ ब्लूटूथ GATT सेवाओं और/या डिवाइस के नाम से मेल खाते हैं.

सेवाओं का फ़िल्टर

उदाहरण के लिए, Bluetooth GATT Battery Service का विज्ञापन करने वाले ब्लूटूथ डिवाइसों का अनुरोध करने के लिए:

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

अगर आपकी Bluetooth GATT सेवा, स्टैंडर्ड Bluetooth GATT सेवाओं की सूची में नहीं है, तो आपके पास पूरा Bluetooth 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 फ़िल्टर कुंजी के साथ विज्ञापन दिखाए जा रहे, मैन्युफ़ैक्चरर के हिसाब से तय किए गए डेटा के आधार पर भी ब्लूटूथ डिवाइसों का अनुरोध किया जा सकता है. यह कुंजी, ऑब्जेक्ट का कलेक्शन है. इसमें 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); });

मास्क का इस्तेमाल, डेटा प्रीफ़िक्स के साथ भी किया जा सकता है. इससे मैन्युफ़ैक्चरर के डेटा में कुछ पैटर्न मैच किए जा सकते हैं. ज़्यादा जानने के लिए, Bluetooth डेटा फ़िल्टर के बारे में जानकारी देने वाला लेख पढ़ें.

बाहर रखने वाले फ़िल्टर

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); });

Bluetooth उपकरण से कनेक्‍ट करना

अब आपके पास 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); });

अगर कस्टम ब्लूटूथ जीएटीटी विशेषता का इस्तेमाल किया जाता है, तो service.getCharacteristic को पूरा ब्लूटूथ यूयूआईडी या 16 या 32 बिट वाला छोटा फ़ॉर्म दिया जा सकता है.

ध्यान दें कि किसी विशेषता की वैल्यू को पढ़ने के लिए, characteristicvaluechanged इवेंट लिसनर भी जोड़ा जा सकता है. Read Characteristic Value Changed Sample देखें. इससे आपको यह पता चलेगा कि आने वाली GATT सूचनाओं को भी कैसे हैंडल किया जा सकता है.


.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 इवेंट लिसनर ट्रिगर हो जाएंगे. ध्यान दें कि अगर कोई दूसरा ऐप्लिकेशन पहले से ही ब्लूटूथ डिवाइस से कम्यूनिकेट कर रहा है, तो यह सुविधा ब्लूटूथ डिवाइस से कम्यूनिकेट करना बंद नहीं करेगी. ज़्यादा जानकारी के लिए, डिवाइस डिसकनेक्ट करने का सैंपल और अपने-आप फिर से कनेक्ट होने का सैंपल देखें.

ब्लूटूथ डिस्क्रिप्टर को पढ़ने और उनमें बदलाव करने की अनुमति

ब्लूटूथ जीएटीटी डिस्क्रिप्टर, ऐसे एट्रिब्यूट होते हैं जो किसी विशेषता की वैल्यू के बारे में बताते हैं. इन्हें ब्लूटूथ GATT की विशेषताओं की तरह ही पढ़ा और लिखा जा सकता है.

उदाहरण के लिए, आइए देखते हैं कि डिवाइस के हेल्थ थर्मामीटर के मेज़रमेंट इंटरवल के उपयोगकर्ता के ब्यौरे को कैसे पढ़ा जाता है.

यहां दिए गए उदाहरण में, health_thermometer हेल्थ थर्मामीटर सेवा है, measurement_interval मेज़रमेंट इंटरवल की विशेषता है, और gatt.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 Peripheral Simulator Android App] इंस्टॉल करें. यह ऐप्लिकेशन, बैटरी सेवा, हार्ट रेट सेवा या हेल्थ थर्मामीटर सेवा के साथ BLE पेरिफ़ेरल को सिम्युलेट करता है.

बिगिनर लेवल

  • डिवाइस की जानकारी - BLE डिवाइस से डिवाइस की बुनियादी जानकारी वापस पाएं.
  • बैटरी लेवल - बैटरी की जानकारी देने वाले बीएलई डिवाइस से बैटरी की जानकारी वापस पाएं.
  • रीसेट एनर्जी - इससे, बीएलई डिवाइस से दिल की धड़कन की दर का विज्ञापन दिखाने के दौरान खर्च की गई ऊर्जा को रीसेट किया जाता है.
  • खासियत वाली प्रॉपर्टी - बीएलई डिवाइस की किसी खास खासियत की सभी प्रॉपर्टी दिखाती है.
  • सूचनाएं - BLE डिवाइस से सूचनाएं पाने की सुविधा को चालू और बंद करें.
  • डिवाइस डिसकनेक्ट करें - इससे बीएलई डिवाइस से कनेक्ट होने के बाद, उसे डिसकनेक्ट किया जा सकता है. साथ ही, डिसकनेक्ट होने पर सूचना भी मिलती है.
  • Get Characteristics - BLE डिवाइस से, विज्ञापन में दिखाई गई सेवा की सभी विशेषताएं पाएं.
  • डिसक्रिप्टर पाएं - BLE डिवाइस से, विज्ञापन में दिखाई गई सेवा की सभी विशेषताओं के डिसक्रिप्टर पाएं.
  • मैन्युफ़ैक्चरर डेटा फ़िल्टर - मैन्युफ़ैक्चरर के डेटा से मेल खाने वाले बीएलई डिवाइस से डिवाइस की बुनियादी जानकारी वापस पाएं.
  • बाहर रखने वाले फ़िल्टर - बुनियादी तौर पर बाहर रखने वाले फ़िल्टर की सुविधा वाले बीएलई डिवाइस से, डिवाइस की बुनियादी जानकारी पाएं.

कई कार्रवाइयों को एक साथ जोड़ना

Web Bluetooth के हमारे चुने हुए डेमो और Web Bluetooth के आधिकारिक कोडलैब भी देखें.

लाइब्रेरी

  • web-bluetooth-utils एक npm मॉड्यूल है. यह एपीआई में कुछ सुविधाजनक फ़ंक्शन जोड़ता है.
  • वेब ब्लूटूथ एपीआई शिम, noble में उपलब्ध है. यह Node.js का सबसे लोकप्रिय बीएलई सेंट्रल मॉड्यूल है. इससे आपको WebSocket सर्वर या अन्य प्लगिन की ज़रूरत के बिना, noble को वेबपैक/ब्राउज़राइफ़ाई करने की अनुमति मिलती है.
  • angular-web-bluetooth, Angular के लिए एक मॉड्यूल है. यह वेब ब्लूटूथ एपीआई को कॉन्फ़िगर करने के लिए ज़रूरी सभी बॉयलरप्लेट को अलग कर देता है.

टूल

  • Web Bluetooth का इस्तेमाल शुरू करें एक सामान्य वेब ऐप्लिकेशन है. यह ब्लूटूथ डिवाइस के साथ इंटरैक्ट करने के लिए, सभी JavaScript बॉयलरप्लेट कोड जनरेट करेगा. डिवाइस का नाम, सेवा, और सुविधा डालें. इसके बाद, इसकी प्रॉपर्टी तय करें. बस हो गया.
  • अगर आप पहले से ही ब्लूटूथ डेवलपर हैं, तो Web Bluetooth Developer Studio प्लगिन आपके ब्लूटूथ डिवाइस के लिए, Web Bluetooth JavaScript कोड भी जनरेट करेगा.

सलाह

Chrome में ब्लूटूथ इंटरनल पेज about://bluetooth-internals पर उपलब्ध है. इससे आपको आस-पास के ब्लूटूथ डिवाइसों के बारे में पूरी जानकारी मिल सकती है. जैसे, उनकी स्थिति, सेवाएं, विशेषताएं, और डिस्क्रिप्टर.

Chrome में ब्लूटूथ को डीबग करने के लिए, इंटरनल पेज का स्क्रीनशॉट
ब्लूटूथ डिवाइसों को डीबग करने के लिए, Chrome में मौजूद इंटरनल पेज.

हमारा सुझाव है कि आप आधिकारिक वेब ब्लूटूथ से जुड़ी गड़बड़ियों की शिकायत करने का तरीका पेज भी देखें. ऐसा इसलिए, क्योंकि कभी-कभी ब्लूटूथ को डीबग करना मुश्किल हो सकता है.

लेख पढ़ें.

आगे क्या करना है

सबसे पहले, ब्राउज़र और प्लैटफ़ॉर्म पर लागू करने की स्थिति देखें. इससे आपको पता चलेगा कि Web Bluetooth API के कौनसे हिस्से फ़िलहाल लागू किए जा रहे हैं.

हालांकि, यह अब भी अधूरा है. यहां आने वाले समय में मिलने वाली सुविधाओं की झलक दी गई है:

  • आस-पास मौजूद बीएलई विज्ञापनों को स्कैन करने की सुविधा, navigator.bluetooth.requestLEScan() के साथ काम करेगी.
  • serviceadded इवेंट, नई Bluetooth GATT सेवाओं को ट्रैक करेगा. वहीं, serviceremoved इवेंट, हटाई गई सेवाओं को ट्रैक करेगा. जब किसी ब्लूटूथ GATT सेवा में कोई विशेषता और/या डिस्क्रिप्टर जोड़ा या हटाया जाता है, तब एक नया servicechanged इवेंट ट्रिगर होगा.

एपीआई के लिए अपना सपोर्ट दिखाना

क्या आपको Web Bluetooth API का इस्तेमाल करना है? आपकी सार्वजनिक तौर पर दी गई राय से, Chrome टीम को सुविधाओं को प्राथमिकता देने में मदद मिलती है. साथ ही, इससे ब्राउज़र बनाने वाली अन्य कंपनियों को यह पता चलता है कि इन सुविधाओं को उपलब्ध कराना कितना ज़रूरी है.

@ChromiumDev को ट्वीट करें. इसके लिए, हैशटैग #WebBluetooth का इस्तेमाल करें. साथ ही, हमें बताएं कि इसका इस्तेमाल कहां और कैसे किया जा रहा है.

संसाधन

Acknowledgements

समीक्षा करने के लिए Kayce Basques का धन्यवाद.