আগের একটি টিউটোরিয়ালে, আপনি শিখেছেন কিভাবে একটি পার্টিকেল জেনন অ্যাপ্লিকেশনে ব্লুটুথ যোগ করতে হয়। এইভাবে আপনি nRF কানেক্ট বা লাইট ব্লু এক্সপ্লোরারের মতো একটি পরীক্ষামূলক অ্যাপ থেকে অনবোর্ড RGB LED নিয়ন্ত্রণ করতে পারবেন।
এই পোস্টে, আমরা এটিকে আরও এক ধাপ এগিয়ে নিতে যাচ্ছি। আমরা একটি কণা মেশ আরজিবি নেতৃত্বে নিয়ন্ত্রণ করতে একটি সুইফ্ট অ্যাপ তৈরি করতে যাচ্ছি। যদি সবকিছু ঠিকঠাক থাকে, তাহলে আপনার প্রায় 20 মিনিটের মধ্যে একটি কার্যকরী অ্যাপ পাওয়া উচিত!
চলুন শুরু করা যাক।
সম্পূর্ণ নিবন্ধটি পড়ার জন্য এখনই সময় নেই?
এখানে PDF সংস্করণ ডাউনলোড করুন।
সেট আপ করা
- এক্সকোড ইনস্টল করুন। আপনি এখানে অ্যাপ স্টোর থেকে এটি ডাউনলোড করতে পারেন।
- আপনার একটি Apple লগইনও প্রয়োজন হবে৷ আমি আমার iCloud ইমেল ব্যবহার করি। আপনার যদি এখনও না থাকে তবে আপনি Xcode-এর মধ্যে একটি নতুন অ্যাকাউন্ট তৈরি করতে পারেন৷ ৷
- একটি পার্টিকেল মেশ বোর্ডে RGB উদাহরণ কোড ইনস্টল করুন।
প্রকল্পটি তৈরি করুন
সবকিছু ইন্সটল হয়ে গেলে, মজার জিনিসে আসা যাক!
Xcode খুলুন এবং ফাইল → নতুন প্রকল্প-এ যান৷
একক দৃশ্য অ্যাপ নির্বাচন করুন৷
তারপর প্রকল্পের নাম আপডেট করুন আপনার পছন্দ হতে হবে। আমি আমার প্রতিষ্ঠানের শনাক্তকারীকে 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-এ ব্লুটুথ লো এনার্জি কার্যকারিতা নিয়ন্ত্রণ করতে দেয়। তারপর CBPeripheralDelegate
দুটোই যোগ করা যাক এবং CBCentralManagerDelegate
ViewController
-এ ক্লাস।
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
কল করি . এটি যে কোনও জায়গায় স্থাপন করা যেতে পারে তবে আমি এটিকে মডেল নামে একটি পৃথক 'গ্রুপ'-এ রেখেছি পরে জন্য।
ভিতরে আমরা কিছু পাবলিক ভেরিয়েবল তৈরি করব যাতে আমাদের পার্টিকেল বোর্ডের জন্য UUID থাকে। তাদের পরিচিত দেখা উচিত!
import UIKit
import CoreBluetooth
class ParticlePeripheral: NSObject {
/// MARK: - Particle LED services and charcteristics Identifiers
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
সংজ্ঞায়িত করব আমাদের পার্টিকেল আরজিবি এলইডি পরিষেবা দিয়ে একটি ডিভাইসের জন্য স্ক্যান করা শুরু করতে। যদি ব্লুটুথ সক্ষম না হয়, তবে এটি কিছুই করবে না৷
// If we're powered on, start scanning
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
প্রক্রিয়ায় আমাদের পরবর্তী ধাপ। আমরা জানি যে এই ঘটনাটি ঘটলে আমরা একটি ডিভাইস খুঁজে পেয়েছি৷
// Handles the result of the scan
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
// We've found it so stop scan
self.centralManager.stopScan()
// Copy the peripheral instance
self.peripheral = peripheral
self.peripheral.delegate = self
// Connect!
self.centralManager.connect(self.peripheral, options: nil)
}
সুতরাং, আমরা self.centralManager.stopScan()
ব্যবহার করে স্ক্যান করা বন্ধ করি . আমরা peripheral
সেট করেছি তাই এটি অ্যাপের মাধ্যমে টিকে থাকে। তারপর আমরা self.centralManager.connect
ব্যবহার করে সেই ডিভাইসের সাথে সংযোগ করি
একবার সংযুক্ত হয়ে গেলে, আমরা সঠিক ডিভাইসের সাথে কাজ করছি কিনা তা আমাদের দুবার চেক করতে হবে৷
// The handler if we do connect succesfully
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
if peripheral == self.peripheral {
print("Connected to your Particle Board")
peripheral.discoverServices([ParticlePeripheral.particleLEDServiceUUID])
}
}
দুটি পেরিফেরালের তুলনা করে আমরা জানতে পারব এটি যে ডিভাইসটি আমরা আগে পেয়েছি। আমরা peripheral.discoverService
ব্যবহার করে একটি পরিষেবা আবিষ্কার শুরু করব . আমরা ParticlePeripheral.particleLEDServiceUUID
ব্যবহার করতে পারি একটি পরামিতি হিসাবে। এইভাবে আমরা এমন কোনও পরিষেবা বাছাই করি না যা আমরা যত্ন করি না৷
একবার আমরা আবিষ্কার পরিষেবাগুলি শেষ করে ফেললে, আমরা একটি didDiscoverServices
পাব৷ ঘটনা আমরা সমস্ত "উপলব্ধ" পরিষেবাগুলির মাধ্যমে পুনরাবৃত্তি করি৷ (যদিও শুধুমাত্র একটি হবে!)
// Handles discovery event
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")
//Now kick off discovery of characteristics
peripheral.discoverCharacteristics([ParticlePeripheral.redLEDCharacteristicUUID,
ParticlePeripheral.greenLEDCharacteristicUUID,
ParticlePeripheral.blueLEDCharacteristicUUID], for: service)
return
}
}
}
}
এই মুহুর্তে এই তৃতীয়বার আমরা সঠিক পরিষেবা আছে কিনা তা নিশ্চিত করতে পরীক্ষা করছি। এটি পরে আরও সহজ হয়ে ওঠে যখন অনেক বৈশিষ্ট্য এবং অনেক পরিষেবা থাকে।
আমরা peripheral.discoverCharacteristics
কল করি আমরা যে বৈশিষ্ট্যগুলি খুঁজছি তার জন্য UUID-এর অ্যারের সাথে। এগুলি হল সমস্ত UUID যা আমরা ParticlePeripheral.swift
এ সংজ্ঞায়িত করেছি .
অবশেষে, আমরা didDiscoverCharacteriscsFor
পরিচালনা করি ঘটনা আমরা সমস্ত উপলব্ধ বৈশিষ্ট্য মাধ্যমে পুনরাবৃত্তি. আমরা পুনরাবৃত্তি করার সাথে সাথে আমরা যাদের খুঁজছি তাদের সাথে তুলনা করি৷
// Handling discovery of characteristics
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");
}
}
}
}
এই মুহুর্তে আমরা আমাদের পার্টিকেল মেশ ডিভাইসের একটি সম্পূর্ণ ডিভাইস আবিষ্কার করতে প্রস্তুত। পরবর্তী বিভাগে আমরা পরীক্ষা করব যে জিনিসগুলি ঠিকঠাক কাজ করছে তা নিশ্চিত করতে আমাদের কী করতে হবে৷
৷আমাদের ন্যূনতম উদাহরণ পরীক্ষা করা হচ্ছে
আমরা শুরু করার আগে, আপনি সমস্যায় পড়লে আমি ফুটনোটে কিছু সমস্যা সমাধানের পদক্ষেপ রেখেছি।
পরীক্ষা করার জন্য, আপনার কাছে ব্লুটুথ লো এনার্জি সহ একটি আইফোন থাকতে হবে৷৷ বেশিরভাগ আধুনিক আইফোনে এটি রয়েছে। আমি বিশ্বাস করি যে শেষ আইফোনটি নেই সেটি আইফোন 4 বা 3Gs ছিল। (তাই আপনি সম্ভবত ভাল)
প্রথমে, এটি আপনার কম্পিউটারে প্লাগ করুন৷
৷প্লে এবং স্টপ বোতাম দ্বারা শীর্ষে যান। আপনার লক্ষ্য ডিভাইস নির্বাচন করুন. আমার ক্ষেত্রে আমি আমার ফোনটি বেছে নিয়েছি (জ্যারদের আইফোন ) আপনি একটি আইপ্যাডও ব্যবহার করতে পারেন৷
৷তারপর আপনি কমান্ড + R টিপতে পারেন অথবা প্লে বোতাম টিপুন আপনার ফোনে অ্যাপটি লোড করতে।
আপনার লগ ট্যাব খোলা আছে তা নিশ্চিত করুন। উপরের ডান কোণায় নীচের ফলক বোতামে ক্লিক করে এটি সক্ষম করুন৷
নিশ্চিত করুন যে আপনার কাছে একটি জাল ডিভাইস সেটআপ আছে এবং উদাহরণ কোড চলছে৷ আপনি এটি পেতে এই পোস্টে যেতে পারেন. মনে রাখবেন ব্লুটুথ কাজ করার জন্য আপনার পার্টিকেল মেশ বোর্ডের ডিভাইস OS 1.3.0 বা তার বেশি চলমান থাকা দরকার!
ফার্মওয়্যার এবং অ্যাপ উভয়ই লোড হয়ে গেলে, আসুন লগ আউটপুট পরীক্ষা করি।
এটি দেখতে এইরকম কিছু হওয়া উচিত:
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
মানে আপনার ফোন কানেক্ট হয়ে গেছে, এলইডি সার্ভিস পাওয়া গেছে! আবিষ্কৃত বৈশিষ্ট্যগুলিও এখানে গুরুত্বপূর্ণ। এগুলি ছাড়া আমরা মেশ ডিভাইসে ডেটা পাঠাতে সক্ষম হব না৷
৷পরবর্তী ধাপ হল কিছু স্লাইডার তৈরি করা যাতে আমরা ফ্লাইতে RGB মান আপডেট করতে পারি।
বাম দিকে স্লাইড করুন৷ ডানদিকে স্লাইড করুন।
এরপর আমরা আমাদের Main.storyboard
এ কিছু উপাদান যোগ করতে যাচ্ছি . Main.storyboard
খুলুন এবং দেখুন-এ ক্লিক করুন নীচে নিয়ন্ত্রক দেখুন৷৷
তারপর লাইব্রেরি-এ ক্লিক করুন বোতাম (এটি বাড়ির বোতামের জন্য ব্যবহৃত পুরানো শিল্প অ্যাপলের মতো দেখাচ্ছে)
আপনি আপনার অ্যাপে সন্নিবেশ করতে পারেন এমন সমস্ত পছন্দগুলির সাথে একটি পপ-আপ পাবেন৷
৷তিনটি লেবেল টেনে আনুন এবং তিনটি স্লাইডার অনুলিপি করুন আপনার দৃষ্টিতে।
আপনি লেবেলগুলিতে ডাবল ক্লিক করতে পারেন এবং যেতে যেতে তাদের নাম পরিবর্তন করতে পারেন৷
৷আপনি ক্লিক করে ধরে রাখলে, কিছু সহজ সারিবদ্ধকরণ সরঞ্জাম পপআপ হবে। তারা এমনকি কেন্দ্রে স্ন্যাপ করবে!
আপনি তাদের সব নির্বাচন করতে পারেন এবং তাদের একসাথে সরাতে পারেন। আমরা তাদের উল্লম্ব এবং অনুভূমিকভাবে সারিবদ্ধ করব।
তাদের মাঝখানে থাকার জন্য, আসুন অটোরাইজিং সম্পত্তিটি সরিয়ে ফেলি। শাসক আইকনে ক্লিক করুন উপরের ডানদিকে। তারপর প্রতিটি লাল বার ক্লিক করুন . এটি নিশ্চিত করবে যে আপনার লেবেল এবং স্লাইডারগুলি স্ক্রিনে থাকবে!
এরপর চলুন সহকারী সম্পাদক দেখান ক্লিক করুন বোতাম (একটি ভেন ডায়াগ্রামের মত দেখাচ্ছে)
দ্রষ্টব্য: নিশ্চিত করুন যে ViewController.swift আপনার সহকারী সম্পাদকে খোলা আছে।
তারপর /properties
এর নিচে বিভাগ, কন্ট্রোল-ক্লিক এবং টেনে আনুন লাল স্লাইডার আপনার কোডে।
অন্য সবগুলির সাথে পুনরাবৃত্তি করুন। আপনি তাদের কিছু ভিন্ন নাম নিশ্চিত করুন. আপনার কাজ শেষ হলে আপনার কোড এইরকম হওয়া উচিত:
// 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!
এটি আমাদের স্লাইডারগুলির মান অ্যাক্সেস করার অনুমতি দেয়৷
এর পরে, আসুন পরিবর্তিত মান সংযুক্ত করি স্লাইডার প্রতিটি ইভেন্ট. ডান ক্লিক করুন ফোল্ডার ভিউতে লাল স্লাইডারে৷৷
এটি আপনাকে ইভেন্টের জন্য কিছু বিকল্প দিতে হবে। মান পরিবর্তিত ক্লিক করুন এবং টেনে আনুন আপনার কোড ইভেন্ট. নিশ্চিত করুন যে আপনি এটিকে এমন কিছু নাম দিয়েছেন যা অর্থপূর্ণ। আমি RedSliderChanged ব্যবহার করেছি লাল স্লাইডারের জন্য।
আরও দুইবার পুনরাবৃত্তি করুন। এই ধাপের শেষে আপনার কোডটি দেখতে এইরকম হওয়া উচিত:
@IBAction func RedSliderChanged(_ sender: Any) {
}
@IBAction func GreenSliderChanged(_ sender: Any) {
}
@IBAction func BlueSliderChanged(_ sender: Any) {
}
আমি প্রতিটি স্লাইডারকে নির্বাচন করেছি এবং সক্ষম করা আন-চেক করা হয়েছে . এইভাবে আপনি তাদের সরাতে পারবেন না। আমরা সেগুলিকে পরে কোডে সক্ষম করব৷
৷এছাড়াও, সর্বোচ্চ মান 255 এ পরিবর্তন করার জন্য এটি একটি দুর্দান্ত সময় . এছাড়াও ডিফল্ট 0.5 থেকে 0 পর্যন্ত মান সেট করুন।
ফাইলের শীর্ষে ফিরে যান। আসুন প্রতিটি বৈশিষ্ট্যের জন্য কিছু স্থানীয় ভেরিয়েবল তৈরি করি। আমরা এগুলি ব্যবহার করব যাতে আমরা স্লাইডার ভেরিয়েবলগুলি পার্টিকেল মেশ বোর্ডে লিখতে পারি৷
// 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
যেহেতু আমরা প্রতিটি বৈশিষ্ট্য খুঁজে পাই, আমরা একই স্থানে প্রতিটি স্লাইডারকেও সক্ষম করতে পারি৷
// Unmask red slider
redSlider.isEnabled = true
শেষ পর্যন্ত আপনার didDiscoverCharacteristicsFor
এর মত দেখতে হবে:
// Handling discovery of characteristics
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) {
// Check if it has the write property
if characteristic.properties.contains(.writeWithoutResponse) && peripheral != nil {
peripheral.writeValue(value, for: characteristic, type: .withoutResponse)
}
}
এখন writeLEDValueToChar
এ একটি কল যোগ করুন Changed
প্রতিটিতে ফাংশন আপনাকে একটি Uint8
মানটি কাস্ট করতে হবে . (পার্টিকেল মেশ ডিভাইসটি একটি স্বাক্ষরবিহীন 8-বিট নম্বর আশা করে।)
@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?) {
ভিতরে, আমাদের স্লাইডারগুলির অবস্থা 0 এ পুনরায় সেট করা উচিত এবং তাদের নিষ্ক্রিয় করা উচিত৷
if peripheral == self.peripheral {
print("Disconnected")
redSlider.isEnabled = false
greenSlider.isEnabled = false
blueSlider.isEnabled = false
redSlider.value = 0
greenSlider.value = 0
blueSlider.value = 0
self.peripheral
রিসেট করা একটি ভাল ধারণা এইভাবে শূন্য করার জন্য আমরা কখনই একটি ফ্যান্টম ডিভাইসে লেখার চেষ্টা করছি না।
self.peripheral = nil
অবশেষে, যেহেতু আমরা সংযোগ বিচ্ছিন্ন করেছি, আবার স্ক্যান করা শুরু করুন!
// Start scanning again
print("Central scanning for", ParticlePeripheral.particleLEDServiceUUID);
centralManager.scanForPeripherals(withServices: [ParticlePeripheral.particleLEDServiceUUID],
options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])
}
ঠিক আছে! আমরা পরীক্ষা করার জন্য প্রস্তুত। আসুন পরবর্তী (এবং চূড়ান্ত) ধাপে এগিয়ে যাই।
স্লাইডার পরীক্ষা করুন৷
কঠোর পরিশ্রম করা হয়। এখন খেলার পালা!
সবকিছু পরীক্ষা করার সবচেয়ে সহজ উপায় হল প্লে বোতামে ক্লিক করা উপরের বাম দিকে বা কমান্ড + আর কীবোর্ড শর্টকাট। Xcode অ্যাপটি আপনার ফোনে লোড করবে। আপনার স্লাইডারগুলির সাথে একটি স্ক্রীন দ্বারা এগিয়ে একটি সাদা পর্দা দেখতে হবে!
আপনার পার্টিকেল মেশ বোর্ডের সাথে সংযুক্ত না হওয়া পর্যন্ত স্লাইডারগুলি ধূসর আউট থাকা উচিত। সংযোগ স্থাপন করা হয়েছে কিনা আপনি আপনার লগ আউটপুট পরীক্ষা করতে পারেন.
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
(পরিচিত দেখাচ্ছে? আমরা সংযুক্ত!)
আপনি যদি সবকিছু নিখুঁতভাবে অনুসরণ করেন তবে আপনি স্লাইডারগুলি সরাতে সক্ষম হবেন। আরও ভাল, পার্টিকেল মেশ বোর্ডে আরজিবি এলইডির রঙ পরিবর্তন করা উচিত।
উপসংহার
এই নিবন্ধে আপনি ব্লুটুথের মাধ্যমে আপনার পার্টিকেল মেশ বোর্ড এবং iOS ডিভাইসকে কীভাবে সংযুক্ত করবেন তা শিখেছেন। আমরা শিখেছি কিভাবে উপলব্ধ প্রতিটি বৈশিষ্ট্যের সাথে সংযোগ করতে হয়। এছাড়াও, সবকিছুর উপরে, এটি সব করার জন্য একটি পরিষ্কার ইন্টারফেস তৈরি করুন।
আপনি যেমন কল্পনা করতে পারেন, আপনি iOS এ ব্লুটুথ দিয়ে খরগোশের গর্তের নিচে যেতে পারেন। আমার আসন্ন গাইডে আরও অনেক কিছু আসছে:কণা জালের চূড়ান্ত নির্দেশিকা৷ আমার তালিকার সদস্যরা প্রি-লঞ্চ কন্টেন্টে অ্যাক্সেস পায় এবং যখন এটি আসে তখন ডিসকাউন্ট! সাইন আপ করতে এখানে ক্লিক করুন৷
কোড
সম্পূর্ণ সোর্স কোড Github এ উপলব্ধ। যদি আপনি এটি দরকারী মনে করেন, তারকা বোতাম টিপুন. ⭐️