Computer >> कंप्यूटर >  >> स्मार्टफोन्स >> iPhone

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

पिछले ट्यूटोरियल में, आपने सीखा कि कण क्सीनन एप्लिकेशन में ब्लूटूथ कैसे जोड़ा जाता है। इस तरह आप एनआरएफ कनेक्ट या लाइट ब्लू एक्सप्लोरर जैसे परीक्षण ऐप से ऑनबोर्ड आरजीबी एलईडी को नियंत्रित कर सकते हैं।

इस पोस्ट में, हम इसे एक कदम आगे ले जाने जा रहे हैं। हम पार्टिकल मेश RGB एलईडी को नियंत्रित करने के लिए एक स्विफ्ट ऐप विकसित करने जा रहे हैं। यदि सब कुछ ठीक रहा, तो आपके पास लगभग 20 मिनट में एक कार्यशील ऐप होना चाहिए!

आइए शुरू करें।

पूरा लेख पढ़ने के लिए अभी समय नहीं है?

पीडीएफ संस्करण यहां डाउनलोड करें।

सेट अप करना

  • एक्सकोड इंस्टॉल करें। आप इसे यहां ऐप स्टोर से डाउनलोड कर सकते हैं।
  • आपको Apple लॉगिन की भी आवश्यकता होगी। मैं अपने iCloud ईमेल का उपयोग करता हूं। यदि आपके पास अभी तक Xcode में नया खाता नहीं है तो आप एक नया खाता बना सकते हैं।
  • कण जाल बोर्ड पर RGB उदाहरण कोड स्थापित करें।

प्रोजेक्ट बनाएं

एक बार सब कुछ स्थापित हो जाने के बाद, चलिए मज़ेदार चीज़ों पर चलते हैं!

Xcode खोलें और फ़ाइल → नई परियोजना पर जाएं

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

सिंगल व्यू ऐप चुनें।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

फिर प्रोजेक्ट का नाम अपडेट करें अपनी पसंद का होना। मैंने अपने संगठन के पहचानकर्ता को भी com.jaredwolff . में बदल दिया है . जैसा आप ठीक समझें इसे संशोधित करें!

इसे सहेजने के लिए किसी स्थान का चयन करें।

इसके बाद अपनी Info.plist. खोजें

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

अपडेट करें info.plist Privacy - Bluetooth Peripheral Usage Description . जोड़कर

मैंने जिस विवरण का उपयोग किया वह App uses Bluetooth to connect to the Particle Xenon RGB Example . था

यदि आप कभी भी इसे जारी करना चाहते हैं तो यह आपको अपने ऐप में ब्लूटूथ का उपयोग करने की अनुमति देता है।

अब, सब कुछ न्यूनतम रूप से कार्यात्मक हो जाए!

न्यूनतम रूप से कार्यात्मक

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

इसके बाद, हम कनेक्ट करने और सेवाओं की खोज करने के लिए एक न्यूनतम कार्यात्मक ऐप प्राप्त करेंगे। अधिकांश कार्रवाई ViewController.swift . में होगी ।

आइए पहले आयात करें CoreBluetooth

    import CoreBluetooth

यह हमें आईओएस में ब्लूटूथ कम ऊर्जा कार्यक्षमता को नियंत्रित करने की अनुमति देता है। तो चलिए दोनों को जोड़ते हैं 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 कहते हैं . इसे कहीं भी रखा जा सकता है लेकिन मैंने इसे मॉडल . नामक एक अलग 'समूह' में रखा है बाद के लिए।

अंदर हम कुछ सार्वजनिक चर बनाएंगे जिनमें हमारे कण बोर्ड के लिए यूयूआईडी शामिल हैं। उन्हें परिचित दिखना चाहिए!

    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 में वापस जाएं आइए ब्लूटूथ बिट्स को एक साथ जोड़ते हैं।

ब्लूटूथ बिट्स

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

ब्लूटूथ के साथ करने के लिए सब कुछ घटना आधारित है। हम इन घटनाओं को संभालने वाले कई कार्यों को परिभाषित करेंगे। यहाँ महत्वपूर्ण हैं:

centralManagerDidUpdateState ब्लूटूथ पेरिफेरल के चालू या बंद होने पर अपडेट होता है। जब कोई ऐप पहली बार शुरू होता है तो यह आग लग जाएगा ताकि आप ब्लूटूथ की स्थिति जान सकें। हम यहां स्कैन करना भी शुरू करते हैं।

centralManager didDiscover घटना तब होती है जब आप स्कैन परिणाम प्राप्त करते हैं। हम इसका उपयोग कनेक्शन शुरू करने के लिए करेंगे।

centralManager didConnect डिवाइस कनेक्ट होने के बाद ईवेंट सक्रिय हो जाता है। हम यहां डिवाइस की खोज शुरू करेंगे। नोट: डिवाइस की खोज वह तरीका है जिससे हम यह निर्धारित करते हैं कि कौन सी सेवाएं और विशेषताएं उपलब्ध हैं। यह पुष्टि करने का एक अच्छा तरीका है कि हम किस प्रकार के डिवाइस से जुड़े हैं।

peripheral didDiscoverServices एक बार सभी सेवाओं की खोज हो जाने के बाद पहली घटना। ध्यान दें कि हमने centralManager . से स्विच किया है करने के लिए peripheral अब जब हम जुड़े हुए हैं। हम यहां विशेषता खोज शुरू करेंगे। हम लक्ष्य के रूप में RGB सेवा UUID का उपयोग करेंगे।

peripheral didDiscoverCharacteristicsFor घटना प्रदान की गई सेवा यूयूआईडी का उपयोग करके सभी विशेषताओं को प्रदान करेगी। यह पूर्ण उपकरण खोज करने की श्रृंखला का अंतिम चरण है। यह बालों वाली है लेकिन इसे केवल एक बार कनेक्शन चरण के दौरान किया जाना है!

सभी ब्लूटूथ फ़ंक्शन को परिभाषित करना।

अब जब हम जानते हैं कि ट्रिगर होने वाले फंक्शन इवेंट क्या हैं। हम उन्हें तार्किक क्रम में परिभाषित करेंगे कि वे एक कनेक्शन चक्र के दौरान होते हैं।

सबसे पहले, हम 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 . पर कॉल करते हैं हम जिन विशेषताओं की तलाश कर रहे हैं, उनके लिए UUIDs की एक सरणी के साथ। वे सभी यूयूआईडी हैं जिन्हें हमने 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");
                    }
                }
            }
        }

इस बिंदु पर हम अपने पार्टिकल मेश डिवाइस की पूरी डिवाइस खोज करने के लिए तैयार हैं। अगले भाग में हम परीक्षण करेंगे कि हमें यह सुनिश्चित करने के लिए क्या करना है कि चीजें ठीक से काम कर रही हैं।

हमारे न्यूनतम उदाहरण का परीक्षण करना

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

इससे पहले कि हम शुरू करें, यदि आप किसी समस्या का सामना करते हैं, तो मैंने फ़ुटनोट में कुछ समस्या निवारण चरण दिए हैं।

परीक्षण करने के लिए, आपके पास ब्लूटूथ कम ऊर्जा वाला iPhone होना चाहिए। अधिकांश आधुनिक iPhones में यह होता है। मेरा मानना ​​​​है कि आखिरी आईफोन नहीं था या तो आईफोन 4 या 3 जी था। (इसलिए आप शायद अच्छे हैं)

सबसे पहले, इसे अपने कंप्यूटर में प्लग करें।

प्ले और स्टॉप बटन द्वारा शीर्ष पर जाएं। अपने लक्ष्य डिवाइस का चयन करें। मेरे मामले में मैंने अपना फ़ोन चुना (Jared's iPhone ) आप iPad का भी उपयोग कर सकते हैं।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

फिर आप Command + R . दबा सकते हैं या उस चलाएं बटन hit दबाएं ऐप को अपने फोन में लोड करने के लिए।

सुनिश्चित करें कि आपका लॉग टैब खुला है। ऊपरी दाएं कोने में निचले फलक बटन पर क्लिक करके इसे सक्षम करें।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

सुनिश्चित करें कि आपके पास एक मेश डिवाइस सेटअप है और उदाहरण कोड चला रहा है। इसे पाने के लिए आप इस पोस्ट पर जा सकते हैं। याद रखें कि ब्लूटूथ के काम करने के लिए आपके पार्टिकल मेश बोर्ड पर डिवाइस 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

इसका मतलब है कि आपका फोन कनेक्ट हो गया है, एलईडी सेवा मिल गई है! खोजी जा रही विशेषताएँ भी यहाँ महत्वपूर्ण हैं। इनके बिना हम मेश डिवाइस पर डेटा नहीं भेज पाएंगे।

अगला कदम कुछ स्लाइडर बनाना है ताकि हम तुरंत आरजीबी मूल्यों को अपडेट कर सकें।

बाईं ओर स्लाइड करें। दाईं ओर स्लाइड करें।

आगे हम अपने Main.storyboard . में कुछ तत्व जोड़ने जा रहे हैं . Main.storyboardखोलें और देखें . पर क्लिक करें नीचे नियंत्रक देखें.

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

फिर लाइब्रेरी . पर क्लिक करें बटन। (ऐसा लगता है कि ऐप्पल होम बटन के लिए इस्तेमाल की जाने वाली पुरानी कला की तरह है)

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

आपको उन सभी विकल्पों के साथ एक पॉप-अप मिलेगा, जिन्हें आप अपने ऐप में सम्मिलित कर सकते हैं।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

तीन लेबलखींचें और तीन स्लाइडर को कॉपी करें आपके विचार में।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

आप लेबल पर डबल क्लिक कर सकते हैं और जाते ही उनका नाम बदल सकते हैं।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

यदि आप क्लिक और होल्ड करते हैं, तो कुछ आसान संरेखण उपकरण पॉपअप होंगे। वे बीच में भी झपटेंगे!

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

आप उन सभी का चयन भी कर सकते हैं और उन्हें एक साथ स्थानांतरित कर सकते हैं। हम उन्हें लंबवत और क्षैतिज रूप से संरेखित करेंगे।

उनके बीच में बने रहने के लिए, आइए ऑटोरेसाइज़िंग प्रॉपर्टी को हटा दें। शासक आइकन पर क्लिक करें ऊपर दाईं ओर। फिर प्रत्येक लाल बार . पर क्लिक करें . यह सुनिश्चित करेगा कि आपके लेबल और स्लाइडर स्क्रीन पर बने रहें!

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

इसके बाद सहायक संपादक दिखाएं . क्लिक करें बटन। (वेन आरेख जैसा दिखता है)

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

नोट: सुनिश्चित करें कि ViewController.swift आपके Assistant Editor में खुला है।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

फिर /properties . के नीचे अनुभाग, कंट्रोल-क्लिक करें और खींचें लाल स्लाइडर आपके कोड में।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

अन्य सभी के साथ दोहराएं। सुनिश्चित करें कि आप उन्हें कुछ अलग नाम दें। काम पूरा करने के बाद आपका कोड इस तरह दिखना चाहिए:

        // 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!

यह हमें स्लाइडर के मूल्य तक पहुंचने की अनुमति देता है।

इसके बाद, मान परिवर्तित संलग्न करते हैं प्रत्येक स्लाइडर के लिए घटना। राइट क्लिक फ़ोल्डर दृश्य में लाल स्लाइडर पर।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

यह आपको घटनाओं के लिए कुछ विकल्प देना चाहिए। क्लिक करें और खींचें मान परिवर्तित आपके कोड के लिए घटना। सुनिश्चित करें कि आप इसे कुछ ऐसा नाम दें जो समझ में आए। मैंने RedSliderChanged . का उपयोग किया लाल स्लाइडर के लिए।

दो बार और दोहराएं। इस चरण के अंत में आपका कोड इस तरह दिखना चाहिए:

        @IBAction func RedSliderChanged(_ sender: Any) {
        }

        @IBAction func GreenSliderChanged(_ sender: Any) {
        }

        @IBAction func BlueSliderChanged(_ sender: Any) {
        }

मैंने प्रत्येक स्लाइडर को अनचेक सक्षम . में भी चुना है . इस तरह आप उन्हें स्थानांतरित नहीं कर सकते। हम उन्हें बाद में कोड में सक्षम करेंगे।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

साथ ही, अधिकतम मान को 255 . में बदलने का यह एक अच्छा समय है . साथ ही डिफ़ॉल्ट मान को 0.5 से 0 पर सेट करें।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

फ़ाइल के शीर्ष पर वापस। आइए प्रत्येक विशेषता के लिए कुछ स्थानीय चर बनाएं। हम इनका उपयोग करेंगे ताकि हम पार्टिकल मेश बोर्ड पर स्लाइडर वेरिएबल लिख सकें।

        // 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 reset को रीसेट करना एक अच्छा विचार है इस तरह से शून्य करने के लिए हम कभी भी एक प्रेत डिवाइस पर लिखने की कोशिश नहीं कर रहे हैं।

                self.peripheral = nil

अंत में, क्योंकि हमने डिस्कनेक्ट कर दिया है, फिर से स्कैन करना शुरू करें!

                // Start scanning again
                print("Central scanning for", ParticlePeripheral.particleLEDServiceUUID);
                centralManager.scanForPeripherals(withServices: [ParticlePeripheral.particleLEDServiceUUID],
                                                  options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])
            }

ठीक है! हम अभी परीक्षण के लिए तैयार हैं। आइए अगले (और अंतिम) चरण पर चलते हैं।

स्लाइडर का परीक्षण करें।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

मेहनत तो की जाती है। अब खेलने का समय है!

सब कुछ जांचने का सबसे आसान तरीका है चलाएं बटन पर क्लिक करें ऊपर बाईं ओर या कमांड + आर कुंजीपटल संक्षिप्त रीति। 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

(परिचित लग रहे हैं? हम जुड़े हुए हैं!)

यदि आपने सब कुछ पूरी तरह से पालन किया है, तो आपको स्लाइडर्स को स्थानांतरित करने में सक्षम होना चाहिए। बेहतर अभी तक, कण जाल बोर्ड पर आरजीबी एलईडी रंग बदलना चाहिए।

अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

निष्कर्ष

इस लेख में आपने ब्लूटूथ पर अपने पार्टिकल मेश बोर्ड और आईओएस डिवाइस को कनेक्ट करना सीखा है। हमने सीखा है कि प्रत्येक उपलब्ध विशेषताओं से कैसे जुड़ना है। साथ ही, इन सबसे ऊपर, यह सब करने के लिए एक स्वच्छ इंटरफ़ेस बनाएं।

जैसा कि आप कल्पना कर सकते हैं, आप आईओएस पर ब्लूटूथ के साथ खरगोश के छेद के नीचे जा सकते हैं। मेरी आने वाली गाइड में और भी बहुत कुछ है:द अल्टीमेट गाइड टू पार्टिकल मेश। मेरी सूची के सदस्यों को प्री-लॉन्च सामग्री तक पहुंच मिलती है और जब यह बाहर आती है तो छूट मिलती है! साइन अप करने के लिए यहां क्लिक करें।

कोड

पूर्ण स्रोत कोड Github पर उपलब्ध है। यदि आप इसे उपयोगी पाते हैं, तो स्टार बटन दबाएं। ️


  1. स्विफ्ट का उपयोग करके आईओएस सीआरयूडी ऐप में रीयलम डेटाबेस कैसे जोड़ें

    सभी को नमस्कार! इस लेख में हम सीखेंगे कि आईओएस ऐप में रियलम डेटाबेस कैसे जोड़ा जाए। हम एक सरल टूडू ऐप बनाएंगे ताकि आप सीख सकें कि रियलम डेटाबेस में सीआरयूडी (क्रिएट, रीड, अपडेट, डिलीट) ऑपरेशन कैसे करें। रियलम क्या है? Realm एक ओपन-सोर्स मोबाइल डेटाबेस है जो डेवलपर के अनुकूल और उपयोग में आसान है।

  1. अंतिम कैसे करें:20 मिनट में हार्डवेयर के साथ एक ब्लूटूथ स्विफ्ट ऐप बनाएं

    पिछले ट्यूटोरियल में, आपने सीखा कि कण क्सीनन एप्लिकेशन में ब्लूटूथ कैसे जोड़ा जाता है। इस तरह आप एनआरएफ कनेक्ट या लाइट ब्लू एक्सप्लोरर जैसे परीक्षण ऐप से ऑनबोर्ड आरजीबी एलईडी को नियंत्रित कर सकते हैं। इस पोस्ट में, हम इसे एक कदम आगे ले जाने जा रहे हैं। हम पार्टिकल मेश RGB एलईडी को नियंत्रित करने के

  1. ऐप्स के साथ विलंब से कैसे बचें?

    हम अक्सर खुद को किसी न किसी सोशल मीडिया ऐप में पाते हैं। यह हमारे जीवन का एक अभिन्न अंग बन गया है और कभी-कभी यह सभी आवश्यक कार्यों पर हावी हो जाता है। देखें कि अगर आप स्मार्टफोन को उनके जीवन से हटा दें तो लोग कैसे दिखेंगे। चीजों को टालना या टालना एक बड़ी समस्या है और इस आदत से लक्ष्य हासिल करना नाम