একটি পূর্ববর্তী টিউটোরিয়ালে, আপনি শিখেছেন কীভাবে Particle Xenon অ্যাপ্লিকেশনে ব্লুটুথ যোগ করতে হয়। তখন আপনি nRF Connect বা Light Blue Explorer-এর মতো টেস্ট অ্যাপ দিয়ে অনবোর্ড RGB LED কন্ট্রোল করতে পারতেন।
এই পোস্টে, আমরা এক কদম aurr অগ্রসর হব। আমরা একটি Swift অ্যাপ ডেভেলপ করব Particle Mesh RGB LED কন্ট্রোল করতে। সবকিছু ঠিক থাকলে, প্রায় ২০ মিনিটে আপনার একটি ওয়ার্কিং অ্যাপ থাকবে!
চলুন শুরু করি।
আমার পূর্ণ আর্টিকেল পড়ার সময় নেই এখন?
এখান থেকে PDF ভার্সন ডাউনলোড করুন।
সেট আপ করা
- Xcode ইনস্টল করুন। App Store-এ থেকে ডাউনলোড করতে পারেন।
- আপনাকে একটি Apple লগইন প্রয়োজন। আমি আমার iCloud ইমেইল ব্যবহার করি। Xcode-এ নতুন একাউন্ট তৈরি করতে পারেন যদি না থাকে।
- Particle Mesh বোর্ডে RGB উদাহরণ কোড ইনস্টল করুন।
প্রজেক্ট তৈরি করুন
সবকিছু ইনস্টল হলে, চলুন মজার część এ যাই!
Xcode খুলুন এবং File → New Project-এ যান।

Single View App সিলেক্ট করুন।

তারপর Project Name আপনার পছন্দ মতো আপডেট করুন। আমি আমার অর্গানাইজেশন আইডেন্টিফায়ার com.jaredwolff-এ পরিবর্তন করেছি। আপনার ইচ্ছা অনুযায়ী মডিফাই করুন!
একটি লোকেশন সিলেক্ট করুন সেভ করার জন্য।
এখন আপনার Info.plist খুঁজুন।

info.plist আপডেট করুন Privacy - Bluetooth Peripheral Usage Description যোগ করে।
আমি যে ডেসক্রিপশনটি ব্যবহার করেছি: App uses Bluetooth to connect to the Particle Xenon RGB Example
এটি আপনাকে আপনার অ্যাপে ব্লুটুথ ব্যবহার করতে দেবে যদি কখনো রিলিজ করতে চান।
এখন, চলুন সবকিছু মিনিমালি ফাংশনাল করি!
মিনিমালি ফাংশনাল

পরবর্তী, আমরা একটি মিনিমালি ফাংশনাল অ্যাপ পাবো যা কানেক্ট করবে এবং সার্ভিস ডিসকভারি করবে। অধিকাংশ একশন ViewController.swift-এ হবে।
প্রথমে CoreBluetooth ইমপোর্ট করুন
import CoreBluetoothএটি আমাদের iOS-এ Bluetooth Low Energy ফাংশনালিটি কন্ট্রোল করতে দেবে। তারপর ViewController ক্লাসে CBPeripheralDelegate এবং CBCentralManagerDelegate উভয়টি যোগ করুন।
class ViewController: UIViewController, CBPeripheralDelegate, CBCentralManagerDelegate {এখন সেন্ট্রাল ম্যানেজার এবং পেরিফেরাল স্টোর করার জন্য লোকাল প্রাইভেট ভেরিয়েবল তৈরি করুন। আমরা সেগুলো ক সেট আপ করব।
// Properties private var centralManager: CBCentralManager! private var peripheral: CBPeripheral!আপনার viewDidLoad ফাংশনে, centralManager ইনিশিয়ালাইজ করুন
centralManager = CBCentralManager(delegate: self, queue: nil)delegate: self সেট করা গুরুত্বপূর্ণ। অন্যথায় সেন্ট্রাল স্টেট স্টার্টআপে কখনো পরিবর্তন হবে না।
আগে বড় যাওয়ার আগে, একটি আলাদা ফাইল তৈরি করুন এবং নাম দিন ParticlePeripheral.swift। এটি যেকোনো জায়গায় রাখা যায় কিন্তু আমি এটি আলাদা একটি 'গ্রুপ' হিসেবে Models নামে রাখলাম পরবর্তীতে ব্যবহার করার জন্য।
এর ভেতরে আমাদের Particle বোর্ডের UUID-গুলো ধারণ করা কিছু পাবলিক ভেরিয়েবল তৈরি করুন। এগুলো চেনা যাবে!
import UIKit import CoreBluetooth class ParticlePeripheral: NSObject { /// MARK: - Particle LED সার্ভিস এবং ক্যারাক্টারিস্টিক আইডেন্টিফায়ার public static let particleLEDServiceUUID = CBUUID.init(string: "b4250400-fb4b-4746-b2b0-93f0e61122c6") public static let redLEDCharacteristicUUID = CBUUID.init(string: "b4250401-fb4b-4746-b2b0-93f0e61122c6") public static let greenLEDCharacteristicUUID = CBUUID.init(string: "b4250402-fb4b-4746-b2b0-93f0e61122c6") public static let blueLEDCharacteristicUUID = CBUUID.init(string: "b4250403-fb4b-4746-b2b0-93f0e61122c6") }ViewController.swift-এ ফিরে ব্লুটুথের বিটগুলো জোড়া দিন।
ব্লুটুথ বিটস

ব্লুটুথের সাথে সবকিছু ইভেন্ট-ভিত্তিক। আমরা কিছু ফাংশন ডিফাইন করব যা এই ইভেন্টগুলো হ্যান্ডল করবে। গুরুত্বপূর্ণগুলো নিচে:
centralManagerDidUpdateState আপডেট হয় যখন ব্লুটুথ পেরিফেরাল অন বা অফ হয়। অ্যাপ প্রথম শুরু হলে এটি ফায়ার করে যাতে আপনি ব্লুটুথের স্টেট জানেন। আমরা স্ক্যানিংও এখানে শুরু করি।
centralManager didDiscover ইভেন্ট ঘটে যখন স্ক্যান রেজাল্ট পাওয়া যায়। আমরা এটিকে কানেকশন শুরু করতে ব্যবহার করব।
centralManager didConnect ইভেন্ট ফায়ার হয় একবার ডিভাইস কানেক্ট হলে। আমরা এখানে ডিভাইস ডিসকভারি শুরু করব। নোট: ডিভাইস ডিসকভারি হলো পদ্ধতি जिससे আমরা জানি কোন সার্ভিস এবং ক্যারাক্টারিস্টিক উপলব্ধ। এটি নিশ্চিত করার ভালো উপায় যে আমরা কোন টাইপের ডিভাইসের সাথে কানেক্টেড।
peripheral didDiscoverServices ইভেন্ট ফায়ার হয় একবার সব সার্ভিস ডিসকভার হলে। লক্ষ্য করুন, আমরা এখন centralManager- থেকে peripheral-এ স্যুইচ করেছি কারণ আমরা কানেক্টেড। আমরা এখানে ক্যারাক্টারিস্টিক ডিসকভারি শুরু করব। RGB সার্ভিস UUID-কে টার্গেট হিসেবে ব্যবহার করব।
peripheral didDiscoverCharacteristicsFor ইভেন্ট প্রোভাইড করা হয় প্রদত্ত সার্ভিস UUID ব্যবহার করে সকল ক্যারাক্টারিস্টিক। এটি ফুল ডিভাইস ডিসকভারি করার চেইনের শেষ ধাপ। এটি কিছুটা জটিল কিন্তু কানেকশন ফেজে একবারই করতে হয়!
সকল ব্লুটুথ ফাংশন ডিফাইন করা
এখন যেহেতু আমরা জানি কোন ফাংশন ইভেন্টগুলো ট্রিগার হবে। সেগুলো কানেকশন সাইকেলের লজিক্যাল ক্রমে ডিফাইন করি।
প্রথমে, centralManagerDidUpdateState ডিফাইন করি যাতে আমাদের Particle RGB LED সার্ভিসের সাথে একটি ডিভাইস স্ক্যান করা শুরু হয়। যদি ব্লুটুথ সক্ষম না থাকে, তবে কিছুই করবে না।
// যদি পাওয়ার্ড অন থাকে, স্ক্যান শুরু করুন func centralManagerDidUpdateState(_ central: CBCentralManager) { print("Central state update") if central.state != .poweredOn { print("Central is not powered on") } else { print("Central scanning for", ParticlePeripheral.particleLEDServiceUUID); centralManager.scanForPeripherals(withServices: [ParticlePeripheral.particleLEDServiceUUID], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true]) } }centralManager didDiscover ডিফাইন করা আমার প্রক্রিয়ার পরবর্তী ধাপ। আমরা জানি আমরা একটি ডিভাইস খুঁজে পেলাম যদি এই ইভেন্ট ঘটে।
// স্ক্যান রেজাল্ট হ্যান্ডল করুন func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { // পেয়ে গেলে স্ক্যান বন্ধ করুন self.centralManager.stopScan() // পেরিফেরাল ইনস্ট্যান্স কপি করুন self.peripheral = peripheral self.peripheral.delegate = self // কানেক্ট করুন! self.centralManager.connect(self.peripheral, options: nil) }এখানে self.centralManager.stopScan() ব্যবহার করে স্ক্যান বন্ধ করি। peripheral-কে সেট করি যাতে অ্যাপের মধ্যে এটি persists করে। তারপর self.centralManager.connect ব্যবহার করে সেই ডিভাইসের সাথে কানেক্ট করি।
একবার কানেক্ট হলে, আমাদের ডাবল চেক করতে হবে আমরা সঠিক ডিভাইসের সাথে কাজ করছি কিনা।
// সফল কানেকশন হলে হ্যান্ডলার func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { if peripheral == self.peripheral { print("Connected to your Particle Board") peripheral.discoverServices([ParticlePeripheral.particleLEDServiceUUID]) } }দুইটি পেরিফেরাল কমপেয়ার করলে আমরা জানব এটি আগে যে ডিভাইসটি খুঁজে পেয়েছিলাম। আমরা peripheral.discoverServices ব্যবহার করে সার্ভিস ডিসকভারি শুরু করব। আমরা ParticlePeripheral.particleLEDServiceUUID প্যারামিটার হিসেবে ব্যবহার করব। এভাবে আমরা যেসব সার্ভিস চাই না সেগুলো পিক আপ করব না।
সার্ভিস ডিসকভারি শেষ হলে, আমরা didDiscoverServices ইভেন্ট পাব। আমরা সব "উপলব্ধ" সার্ভিসের মাধ্যমে ইটারেট করব। (যদিও শুধু একটিই থাকবে!)
// ডিসকভারি ইভেন্ট হ্যান্ডল করুন func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { if let services = peripheral.services { for service in services { if service.uuid == ParticlePeripheral.particleLEDServiceUUID { print("LED service found") //এখন ক্যারাক্টারিস্টিক ডিসকভারি শুরু করুন peripheral.discoverCharacteristics([ParticlePeripheral.redLEDCharacteristicUUID, ParticlePeripheral.greenLEDCharacteristicUUID, ParticlePeripheral.blueLEDCharacteristicUUID], for: service) return } } } }এই পয়েন্টে আমরা তৃতীয়বার চেক করছি যে সঠিক সার্ভিস আছে কিনা। পরে যখন অনেক ক্যারাক্টারিস্টিক এবং অনেক সার্ভিস থাকবে তখন এটি আরও হ্যান্ডি হবে।
আমরা peripheral.discoverCharacteristics কল করছি UUID-এর একটি অ্যারে দিয়ে যেগুলো আমরা খুঁজছি। সেগুলো সব ParticlePeripheral.swift-এ ডিফাইন করা UUID।
শেষে, didDiscoverCharacteriscsFor ইভেন্ট হ্যান্ডল করি। সব উপলব্ধ ক্যারাক্টারিস্টিকের মাধ্যমে ইটারেট করি। ইটারেট করার সময় আমরা খুঁজছি যেগুলোকে কমপেয়ার করি।
// ক্যারাক্টারিস্টিক ডিসকভারি হ্যান্ডল করুন func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { if let characteristics = service.characteristics { for characteristic in characteristics { if characteristic.uuid == ParticlePeripheral.redLEDCharacteristicUUID { print("Red LED characteristic found") } else if characteristic.uuid == ParticlePeripheral.greenLEDCharacteristicUUID { print("Green LED characteristic found") } else if characteristic.uuid == ParticlePeripheral.blueLEDCharacteristicUUID { print("Blue LED characteristic found"); } } } }এই পয়েন্টে আমরা আমাদের Particle Mesh ডিভাইসের ফুল ডিভাইস ডিসকভারি করার জন্য প্রস্তুত। পরবর্তী সেকশনে আমরা যা আছে সেটি টেস্ট করব নিশ্চিত করতে যে সব ঠিক কাজ করছে।
আমাদের মিনিমাল উদাহরণ টেস্ট করা

শুরু করার আগে, যদি সমস্যা হয় তো ফুটনোটে কিছু ট্রাবলশুটিং স্টেপ দেওয়া আছে।
টেস্ট করার জন্য, আপনার কাছে ব্লুটুথ লো এনার্জি সমৃদ্ধ একটি iPhone থাকতে হবে। অধিকাংশ আধুনিক iPhone-এ এটি থাকে। শেষ iPhone যেটিতে এটি নাই সেটি iPhone 4 বা 3Gs ছিল বলে মনে হয়। (তাই আপনি সম্ভবত ভালো আছেন)
প্রথমে, কম্পিউটারের সাথে প্লাগ ইন করুন।
প্লে এবং স্টপ বাটনের কাছে উপরে যান। আপনার টার্গেট ডিভাইস সিলেক্ট করুন। আমার কেসে আমি আমার ফোন (Jared's iPhone) সিলেক্ট করলাম। iPadও ব্যবহার করতে পারেন।

তারপর Command + R চাপুন বা সে Play button চাপুন অ্যাপটি ফোনে লোড করার জন্য।
নিশ্চিত করুন আপনার লগ ট্যাব খোলা আছে। টপ রাইট কর্নারের বটম পেন বাটনে ক্লিক করে এনেবল করুন।

নিশ্চিত করুন আপনার কাছে একটি মেশ ডিভাইস সেটআপ আছে এবং উদাহরণ কোড রান করছে। আপনি এই পোস্টে যেতে পারেন সেটি পেতে। মনে রাখবেন আপনার Particle Mesh বোর্ডে ডিভাইস OS ১.৩.০ বা তার üzerি থাকতে হবে ব্লুটুথ কাজ করার জন্য!
ফার্মওয়্যার এবং অ্যাপ উভয় লোড হলে, লগ আউটপুট চেক করুন।
এটি নিচের মত দেখাবে:
View loaded Central state update Central scanning for B4250400-FB4B-4746-B2B0-93F0E61122C6 Connected to your Particle Board LED service found Red LED characteristic found Green LED characteristic found Blue LED characteristic foundএর মানে আপনার ফোন কানেক্ট হয়েছে, LED সার্ভিস পেয়েছে! ক্যারাক্টারিস্টিকগুলোর ডিসকভারও হওয়া গুরুত্বপূর্ণ। সেগুলো না থাকলে আমরা মেশ ডিভাইসে ডেটা পাঠাতে পারতাম না।
পরবর্তী ধাপ হলো কিছু স্লাইডার তৈরি করা যাতে RGB ভ্যালু ফ্লাইতে আপডেট করা যায়।
বামে স্লাইড করুন। ডানে স্লাইড করুন।
এখন আমরা Main.storyboard-এ কিছু এলিমেন্ট যোগ করব। Main.storyboard খুলুন এবং View Controller-এর নিচে View-এ ক্লিক করুন।

তারপর Library বাটনে ক্লিক করুন। (পুরানো আপল হোম বাটনের আর্ট जैसा দেখে)

আপনার অ্যাপে ইনসার্ট করার জন্য সব চয়েসের একটি পপ-আপ আসবে।

তিনটি Label এবং তিনটি Slider আপনার ভিউতে ড্র্যাগ করুন।

লেবেলগুলোতে ডাবল ক্লিক করে রিনেম করুন।

আপনি যদি ক্লিক করে ধরে রাখেন, কিছু হ্যান্ডি অ্যালাইনমেন্ট টুল পপ-আপ হবে। সেগুলো সেন্টারে স্ন্যাপও করবে!

আপনি সকল সিলেক্ট করে একসাথে মুভ করাতে পারেন। আমরা ভার্টিক্যালি এবং হরিজন্টালি অ্যালাইন করব।
সেগুলো মাঝপথে থাকতে দেয়ার জন্য, autoresizing প্রপার্টি সরিয়ে ফেলুন। টপ রাইটের Ruler icon-এ ক্লিক করুন। তারপর প্রতিটি লাল বার-এ ক্লিক করুন। এটি নিশ্চিত করবে আপনার লেবেল ও স্লাইডার স্ক্রিনে থাকে!

পরবর্তী Show Assistant Editor বাটনে ক্লিক করুন। (Venn ডায়াগ্রামের মতো দেখে)

নোট: নিশ্চিত করুন ViewController.swift Assistant Editor-এ খোলা আছে।

তারপর /properties সেকশনের নিচে, Control-click and drag করুন Red Slider-কে আপনার কোডে।

বাকি সবके সাথে রিপিট করুন। নিশ্চিত করুন আপনি ভিন্ন নাম দিয়েছেন। শেষে আপনার কোড নিচের মত দেখাবে:
// Properties private var centralManager: CBCentralManager! private var peripheral: CBPeripheral! // Sliders @IBOutlet weak var redSlider: UISlider! @IBOutlet weak var greenSlider: UISlider! @IBOutlet weak var blueSlider: UISlider!এটি আমাদের স্লাইডার মান অ্যাক্সেস করতে দেবে।
পরবর্তী, প্রতিটি স্লাইডারের সাথে Value Changed ইভেন্ট আট্যাচ করুন। ফোল্ডার ভিউতে Red Slider-এ Right click করুন।

এটি ইভেন্টের কিছু অপশন দেবে। Value Changed ইভেন্টকে ক্লিক করে ড্র্যাগ করুন আপনার কোডে। নিশ্চিত করুন এটিকে একটি অর্থবহ নাম দিয়েছেন। আমি Red Slider-এর জন্য RedSliderChanged ব্যবহার করেছি।
আর দুবার রিপিট করুন। এই স্টেপের শেষে আপনার কোড নিচের মত দেখাবে:
@IBAction func RedSliderChanged(_ sender: Any) { } @IBAction func GreenSliderChanged(_ sender: Any) { } @IBAction func BlueSliderChanged(_ sender: Any) { }আমি প্রতিটি স্লাইডার সিলেক্ট করে Enabled আনচেক করেছি। তাহলে আপনি সেগুলো মুভ করতে পারবেন না। পরে কোডে এনেবল করব।

এছাড়া, এখন maximum value ২৫৫ করুন। এবং ডিফল্ট value ০.৫ থেকে ০ করুন।

ফাইলের শীর্ষে। প্রতিটি ক্যারাক্টারিস্টিকের জন্য কিছু লোকাল ভেরিয়েবল তৈরি করুন। আমরা এগুলো ব্যবহার করব স্লাইডার ভ্যালু Particle Mesh বোর্ডে লিখতে।
// Characteristics private var redChar: CBCharacteristic? private var greenChar: CBCharacteristic? private var blueChar: CBCharacteristic?এখন, সবকुछ একসাথে বাঁধা যাক!
didDiscoverCharacteristicsFor কলব্যাক ফাংশনে। সেই ক্যারাক্টারিস্টিকগুলো অ্যাসাইন করুন। উদাহরণস্বরূপ
if characteristic.uuid == ParticlePeripheral.redLEDCharacteristicUUID { print("Red LED characteristic found") redChar = characteristicপ্রতিটি ক্যারাক্টারিস্টিক খুঁজে পাওয়ার সাথে সাথে, আমরা একই জায়গায় প্রতিটি স্লাইডারও এনেবল করতে পারি।
// রেড স্লাইডার আনমাস্ক করুন redSlider.isEnabled = trueশেষে আপনার didDiscoverCharacteristicsFor নিচের মত দেখাবে:
// ক্যারাক্টারিস্টিক ডিসকভারি হ্যান্ডল করুন func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { if let characteristics = service.characteristics { for characteristic in characteristics { if characteristic.uuid == ParticlePeripheral.redLEDCharacteristicUUID { print("Red LED characteristic found") redChar = characteristic redSlider.isEnabled = true } else if characteristic.uuid == ParticlePeripheral.greenLEDCharacteristicUUID { print("Green LED characteristic found") greenChar = characteristic greenSlider.isEnabled = true } else if characteristic.uuid == ParticlePeripheral.blueLEDCharacteristicUUID { print("Blue LED characteristic found"); blueChar = characteristic blueSlider.isEnabled = true } } } }এখন, RedSliderChanged GreenSliderChanged এবং BlueSliderChanged ফাংশনগুলো আপডেট করুন। এখানে আমরা যা করব সেটি হলো Changed ফাংশন সংশ্লিষ্ট ক্যারাক্টারিস্টিক আপডেট করা। আমি একটি আলাদা ফাংশন তৈরি করেছি writeLEDValueToChar নামে। এতে ক্যারাক্টারিস্টিক এবং ডেটা পাস করব।
private func writeLEDValueToChar( withCharacteristic characteristic: CBCharacteristic, withValue value: Data) { // চেক করুন রাইট প্রপার্টি আছে কিনা if characteristic.properties.contains(.writeWithoutResponse) && peripheral != nil { peripheral.writeValue(value, for: characteristic, type: .withoutResponse) } }এখন প্রতিটি Changed ফাংশনে writeLEDValueToChar কল যোগ করুন। আপনাকে ভ্যালুকে UInt8-এ কাস্ট করতে হবে। (Particle Mesh ডিভাইস অনসাইনড ৮-বিট নাম্বার এক্সপেক্ট করে।)
@IBAction func RedSliderChanged(_ sender: Any) { print("red:",redSlider.value); let slider:UInt8 = UInt8(redSlider.value) writeLEDValueToChar( withCharacteristic: redChar!, withValue: Data([slider])) }GreenSliderChanged এবং BlueSliderChanged-এর জন্যও একই করুন। নিশ্চিত করুন প্রতিটিতে red-কে green এবং blue করে পরিবর্তন করা হয়েছে!
শেষে, জিনিসগুলো ক্লিন রাখতে, আমি একটি ফাংশন যোগ করেছি যা ব্লুটুথ ডিসকানেক্ট হ্যান্ডল করে।
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {এর ভেতরে, আমরা স্লাইডারদের স্টেট ০-এ রিসেট করব এবং ডিজেবল করব।
if peripheral == self.peripheral { print("Disconnected") redSlider.isEnabled = false greenSlider.isEnabled = false blueSlider.isEnabled = false redSlider.value = 0 greenSlider.value = 0 blueSlider.value = 0self.peripheral-কে nil-এ রিসেট করা ভালো আইডিয়া যাতে আমরা কখনো ফ্যান্টম ডিভাইসে লিখতে চাই না।
self.peripheral = nilশেষে, যেহেতু ডিসকানেক্ট হয়েছে, আবার স্ক্যানিং শুরু করুন!
// আবার স্ক্যানিং শুরু করুন print("Central scanning for", ParticlePeripheral.particleLEDServiceUUID); centralManager.scanForPeripherals(withServices: [ParticlePeripheral.particleLEDServiceUUID], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true]) }ঠিক আছে! আমরা প্রায় টেস্ট করার জন্য প্রস্তুত। পরবর্তী (এবং চূড়ান্ত) ধাপে যাই।
স্লাইডারগুলো টেস্ট করুন।

কঠিন কাজ শেষ। এখন খেলার পালা!
সবচেয়ে সহজ টেস্ট পদ্ধতি হলো টপ লेफ्टের Play button চাপা বা Command + R কীবোর্ড শর্টকাট। Xcode অ্যাপটি আপনার ফোনে লোড করবে। আপনি একটি সাদা স্ক্রিন দেখবেন যারপর আপনার স্লাইডারগুলোর স্ক্রিন আসবে!
স্লাইডারগুলো গ্রে-আউট থাকবে যতক্ষণ না Particle Mesh বোর্ডের সাথে কানেক্ট হয়। কানেকশন স্থাপন হয়েছে কিনা লগ আউটপুট চেক করে জানতে পারেন।
View loaded Central state update Central scanning for B4250400-FB4B-4746-B2B0-93F0E61122C6 Connected to your Particle Board LED service found Red LED characteristic found Green LED characteristic found Blue LED characteristic found(চেনা যাচ্ছে? আমরা কানেক্টেড!)
আপনি যদি সবকিছু সঠিকভাবে ফলো করেন, তবে আপনি স্লাইডারগুলো মুভ করতে পারবেন। আরো ভালো, Particle Mesh বোর্ডের RGB LED রং পরিবর্তন করবে।

উপসংহার
এই আর্টিকেলে আপনি শিখেছেন কীভাবে আপনার Particle Mesh বোর্ড এবং iOS ডিভাইস ব্লুটুথের মাধ্যমে কানেক্ট করতে হয়। আমরা শিখেছি কীভাবে উপলব্ধ প্রতিটি ক্যারাক্টারিস্টিকের সাথে কানেক্ট করতে হয়। এবং তার উপরে, একটি ক্লিন ইন্টারফেস তৈরি করা যা এতে সবকुछ করে।
আপনি কল্পনা করতে পারেন, iOS-এ ব্লুটুথে আপনি গভীরে যেতে পারেন। আমার আগামী গাইডে আরও আসছে: The Ultimate Guide to Particle Mesh. আমার লিস্টের সাবস্ক্রাইবাররা প্রি-লঞ্চ কন্টেন্ট এবং লঞ্চের সময় ডিসকাউন্ট পাবেন! সাইন আপ করতে এখানে ক্লিক করুন।
কোড
পূর্ণ সোর্স কোড GitHub-এ উপলব্ধ। যদি উপকারী লাগে, স্টার বাটন চাপুন। ⭐️