Computer >> คอมพิวเตอร์ >  >> สมาร์ทโฟน >> iPhone

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ในบทช่วยสอนก่อนหน้านี้ คุณได้เรียนรู้วิธีเพิ่มบลูทูธในแอปพลิเคชัน Particle Xenon ด้วยวิธีนี้ คุณจะสามารถควบคุมไฟ LED RGB ออนบอร์ดจากแอปทดสอบ เช่น nRF Connect หรือ Light Blue Explorer

ในบทความนี้ เราจะก้าวไปอีกขั้นหนึ่ง เราจะพัฒนาแอพ Swift เพื่อควบคุม LED Particle Mesh RGB หากทุกอย่างเป็นไปด้วยดี คุณควรมีแอปที่ใช้งานได้ภายใน 20 นาที!

มาเริ่มกันเลย

ไม่มีเวลาอ่านบทความเต็มตอนนี้ใช่หรือไม่

ดาวน์โหลดเวอร์ชัน PDF ที่นี่

กำลังตั้งค่า

  • ติดตั้ง Xcode. คุณสามารถดาวน์โหลดได้จาก App Store ที่นี่
  • คุณจะต้องเข้าสู่ระบบของ Apple ด้วย ฉันใช้อีเมล iCloud ของฉัน คุณสามารถสร้างบัญชีใหม่ภายใน Xcode หากยังไม่มี
  • ติดตั้งโค้ดตัวอย่าง RGB บนบอร์ด Particle Mesh

สร้างโครงการ

เมื่อทุกอย่างพร้อมแล้ว ไปต่อกันเลย!

เปิด Xcode แล้วไปที่ ไฟล์ → โครงการใหม่

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

เลือก แอปมุมมองเดียว

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

จากนั้นอัปเดต ชื่อโครงการ ให้เป็นที่ชื่นชอบของคุณ ฉันยังเปลี่ยนตัวระบุองค์กรเป็น com.jaredwolff . ปรับเปลี่ยนตามที่เห็นสมควร!

เลือกตำแหน่งที่จะบันทึก

ต่อไปหา Info.plist

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

อัพเดท info.plist โดยเพิ่ม Privacy - Bluetooth Peripheral Usage Description

คำอธิบายที่ฉันใช้คือ App uses Bluetooth to connect to the Particle Xenon RGB Example

วิธีนี้ช่วยให้คุณใช้บลูทูธในแอปได้หากต้องการเปิดตัว

ตอนนี้ มาทำให้ทุกอย่างทำงานได้น้อยที่สุด!

ใช้งานได้น้อยที่สุด

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ต่อไป เราจะมีแอปที่ใช้งานได้น้อยที่สุดเพื่อเชื่อมต่อและค้นหาบริการ การกระทำส่วนใหญ่จะเกิดขึ้นใน ViewController.swift .

ก่อนอื่นให้นำเข้า CoreBluetooth

    import CoreBluetooth

ซึ่งช่วยให้เราควบคุมฟังก์ชัน Bluetooth Low Energy ใน 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 มาประกอบบิตบลูทูธเข้าด้วยกัน

บิตบลูทูธ

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ทุกสิ่งที่เกี่ยวข้องกับ Bluetooth เป็นไปตามเหตุการณ์ เราจะกำหนดฟังก์ชันหลายอย่างที่จัดการเหตุการณ์เหล่านี้ นี่คือสิ่งสำคัญ:

centralManagerDidUpdateState อัปเดตเมื่อเปิดหรือปิดอุปกรณ์ต่อพ่วง Bluetooth มันจะเริ่มทำงานเมื่อแอปเริ่มทำงานครั้งแรก เพื่อให้คุณทราบสถานะของบลูทูธ เรายังเริ่มสแกนที่นี่

centralManager didDiscover เหตุการณ์เกิดขึ้นเมื่อคุณได้รับผลการสแกน เราจะใช้สิ่งนี้เพื่อเริ่มการเชื่อมต่อ

centralManager didConnect เหตุการณ์จะเริ่มทำงานเมื่อเชื่อมต่ออุปกรณ์แล้ว เราจะเริ่มการค้นพบอุปกรณ์ที่นี่ หมายเหตุ: การค้นพบอุปกรณ์เป็นวิธีที่เรากำหนดว่าบริการและคุณลักษณะใดที่พร้อมใช้งาน นี่เป็นวิธีที่ดีในการยืนยันว่าเราเชื่อมต่อกับอุปกรณ์ประเภทใด

The peripheral didDiscoverServices เหตุการณ์ครั้งแรกเมื่อมีการค้นพบบริการทั้งหมด สังเกตว่าเราได้เปลี่ยนจาก centralManager ถึง peripheral ตอนนี้เราเชื่อมต่อกันแล้ว เราจะเริ่มการค้นพบลักษณะเฉพาะที่นี่ เราจะใช้บริการ RGB UUID เป็นเป้าหมาย

peripheral didDiscoverCharacteristicsFor เหตุการณ์จะให้คุณสมบัติทั้งหมดโดยใช้บริการ UUID ที่ให้มา นี่เป็นขั้นตอนสุดท้ายในห่วงโซ่ของการค้นหาอุปกรณ์เต็มรูปแบบ ถึงมีขนดกแต่ต้องทำเพียงครั้งเดียวในช่วงการเชื่อมต่อ!

การกำหนดฟังก์ชันบลูทูธทั้งหมด

ตอนนี้เรารู้แล้วว่าเหตุการณ์ของฟังก์ชันที่ทริกเกอร์คืออะไร เราจะกำหนดตามลำดับตรรกะที่เกิดขึ้นระหว่างรอบการเชื่อมต่อ

อันดับแรก เราจะกำหนด centralManagerDidUpdateState เพื่อเริ่มสแกนหาอุปกรณ์ด้วย Particle RGB LED Service ของเรา หากไม่ได้เปิดใช้งาน Bluetooth จะไม่ทำอะไรเลย

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

ณ จุดนี้ เราพร้อมที่จะทำการค้นหาอุปกรณ์แบบเต็มรูปแบบของอุปกรณ์ Particle Mesh ของเราแล้ว ในส่วนถัดไป เราจะทดสอบสิ่งที่เราต้องทำเพื่อให้แน่ใจว่าทุกอย่างเรียบร้อยดี

การทดสอบตัวอย่างขั้นต่ำของเรา

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ก่อนที่เราจะเริ่มต้น หากคุณประสบปัญหา ฉันได้ระบุขั้นตอนการแก้ปัญหาไว้ในเชิงอรรถแล้ว

ในการทดสอบ คุณจะต้องมี iPhone ที่มีบลูทูธพลังงานต่ำ iPhones ที่ทันสมัยส่วนใหญ่มีมัน iPhone ตัวสุดท้ายที่ไม่มีฉันเชื่อว่าเป็น iPhone 4 หรือ 3Gs (ดังนั้นคุณน่าจะดี)

ขั้นแรก ให้เสียบเข้ากับคอมพิวเตอร์ของคุณ

ไปที่ด้านบนโดยปุ่มเล่นและหยุด เลือกอุปกรณ์เป้าหมายของคุณ ในกรณีของฉัน ฉันเลือกโทรศัพท์ของฉัน (iPhone ของ Jared ). คุณยังสามารถใช้ iPad ได้อีกด้วย

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

จากนั้นคุณสามารถกด Command + R หรือกดปุ่มเล่น เพื่อโหลดแอปลงในโทรศัพท์ของคุณ

ตรวจสอบให้แน่ใจว่าคุณได้เปิดแท็บบันทึกของคุณ เปิดใช้งานโดยคลิกปุ่มบานหน้าต่างด้านล่างที่มุมบนขวา

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ตรวจสอบให้แน่ใจว่าคุณมีการตั้งค่าอุปกรณ์ตาข่ายและเรียกใช้โค้ดตัวอย่าง คุณสามารถไปที่โพสต์นี้เพื่อรับมัน อย่าลืมว่าบอร์ด Particle Mesh ของคุณต้องใช้งานอุปกรณ์ OS 1.3.0 ขึ้นไปเพื่อให้ Bluetooth ทำงานได้!

เมื่อโหลดทั้งเฟิร์มแวร์และแอปแล้ว ให้ตรวจสอบเอาต์พุตบันทึก

ควรมีลักษณะดังนี้:

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 และคลิกที่ ดู ข้างใต้ ดูตัวควบคุม

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

จากนั้นคลิกที่ ห้องสมุด ปุ่ม. (ดูเหมือนอาร์ตแบบเก่าที่ Apple ใช้สำหรับปุ่มโฮม)

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

คุณจะได้รับป๊อปอัปพร้อมตัวเลือกทั้งหมดที่คุณสามารถแทรกลงในแอปของคุณได้

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ลากป้ายกำกับสามรายการ และคัดลอก ตัวเลื่อน three สามตัว ในมุมมองของคุณ

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

คุณสามารถดับเบิลคลิกที่ป้ายกำกับและเปลี่ยนชื่อได้ทันที

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

หากคุณคลิกค้างไว้ เครื่องมือจัดตำแหน่งที่มีประโยชน์บางอย่างจะปรากฏขึ้น พวกมันจะชิดตรงกลาง!

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

คุณยังสามารถเลือกทั้งหมดและย้ายเข้าด้วยกัน เราจะจัดแนวพวกมันในแนวตั้งและแนวนอน

เพื่อให้อยู่ตรงกลาง ให้เอาคุณสมบัติการปรับขนาดอัตโนมัติออก คลิก ไอคอนไม้บรรทัด ที่ด้านบนขวา จากนั้นคลิกแต่ละ แถบสีแดง . เพื่อให้แน่ใจว่าป้ายกำกับและตัวเลื่อนของคุณอยู่บนหน้าจอ!

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ต่อไป ให้คลิก แสดงตัวแก้ไขผู้ช่วย ปุ่ม. (ดูเหมือนแผนภาพเวนน์)

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

หมายเหตุ: ตรวจสอบให้แน่ใจว่า ViewController.swift เปิดอยู่ใน Assistant Editor

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

แล้วอยู่ใต้ /properties ส่วน ควบคุมแล้วคลิกแล้วลาก ตัวเลื่อนสีแดง ลงในรหัสของคุณ

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 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!

ทำให้เราสามารถเข้าถึงค่าของแถบเลื่อนได้

ต่อไป มาแนบ ค่าที่เปลี่ยนแปลง เหตุการณ์สำหรับตัวเลื่อนแต่ละอัน คลิกขวา บน แถบเลื่อนสีแดงในมุมมองโฟลเดอร์

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

ควรให้ตัวเลือกบางอย่างแก่คุณสำหรับกิจกรรม คลิกและลาก ค่าที่เปลี่ยนแปลง เหตุการณ์ไปยังรหัสของคุณ ตรวจสอบให้แน่ใจว่าคุณตั้งชื่อสิ่งที่สมเหตุสมผล ฉันใช้ RedSliderChanged สำหรับสไลเดอร์สีแดง

ทำซ้ำอีกสองครั้ง รหัสของคุณควรมีลักษณะดังนี้เมื่อสิ้นสุดขั้นตอนนี้:

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

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

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

ฉันยังเลือกแต่ละแถบเลื่อนและ ยกเลิกการเลือก เปิดใช้งาน . ด้วยวิธีนี้คุณจะไม่สามารถเคลื่อนย้ายได้ เราจะเปิดใช้งานในภายหลังในโค้ด

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

นอกจากนี้ นี่เป็นเวลาที่ดีในการเปลี่ยน ค่าสูงสุดเป็น 255 . ตั้งค่า ค่าดีฟอลต์จาก 0.5 เป็น 0

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

กลับมาที่ด้านบนของไฟล์ มาสร้างตัวแปรโลคัลสำหรับคุณลักษณะแต่ละอย่างกัน เราจะใช้สิ่งเหล่านี้เพื่อเขียนตัวแปรตัวเลื่อนไปที่บอร์ด 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

ขณะที่เราพบคุณลักษณะแต่ละอย่าง เรายังสามารถเปิดใช้งานตัวเลื่อนแต่ละตัวในจุดเดียวกันได้

    		// 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 . (อุปกรณ์ Particle Mesh ต้องการหมายเลข 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])
            }

ไม่เป็นอะไร! เราเพิ่งจะพร้อมที่จะทดสอบ ไปที่ขั้นตอนต่อไป (และขั้นตอนสุดท้าย)

ทดสอบตัวเลื่อน

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

งานหนักเสร็จแล้ว ตอนนี้ได้เวลาเล่นแล้ว!

วิธีที่ง่ายที่สุดในการทดสอบทุกอย่างคือ คลิกปุ่มเล่น ที่ด้านบนซ้ายหรือ 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

(ดูคุ้นๆ นะ เราคบกันแล้ว!)

หากคุณปฏิบัติตามทุกอย่างถูกต้อง คุณจะสามารถเลื่อนแถบเลื่อนได้ ยิ่งไปกว่านั้น ไฟ LED RGB บนบอร์ด Particle Mesh ควรเปลี่ยนสี

สุดยอด How-to:สร้างแอป Bluetooth Swift ด้วยฮาร์ดแวร์ใน 20 นาที

บทสรุป

ในบทความนี้ คุณได้เรียนรู้วิธีเชื่อมต่อบอร์ด Particle Mesh และอุปกรณ์ iOS ผ่านบลูทูธแล้ว เราได้เรียนรู้วิธีเชื่อมต่อกับคุณลักษณะแต่ละอย่างที่มี ยิ่งไปกว่านั้น ให้สร้างอินเทอร์เฟซที่สะอาดตาเพื่อทำทุกอย่าง

อย่างที่คุณสามารถจินตนาการได้ คุณสามารถลงไปยังโพรงกระต่ายด้วยบลูทูธบน iOS คู่มือฉบับต่อไปกำลังจะมีมาเพิ่มอีก:The Ultimate Guide to Particle Mesh สมาชิกในรายการของฉันจะสามารถเข้าถึงเนื้อหาก่อนการเปิดตัวและรับส่วนลดเมื่อเปิดตัว! คลิกที่นี่เพื่อลงทะเบียน

รหัส

ซอร์สโค้ดแบบเต็มมีอยู่ใน Github หากคุณพบว่ามีประโยชน์ ให้กดปุ่มดาว ⭐️