2016-01-22 25 views
7

Tôi đã đọc rất nhiều bài đăng ở đây trên diễn đàn và tôi thấy một số ít liên quan đến trường hợp của tôi. Tuy nhiên tôi vẫn không có sự rõ ràng mà tôi đang tìm kiếm.Dòng chảy sẽ như thế nào để kết nối hai thiết bị ngoại vi BLE?

Tôi muốn kết nối với hai CBPeripherals và ghi dữ liệu cho cả hai. Từ những gì tôi đã đọc, tôi có ý tưởng rằng trước khi kết nối với thiết bị thứ hai, tôi phải ngắt kết nối thiết bị ngoại vi hiện tại. Được rồi, vì vậy giả sử tôi đã viết một lệnh vào một trong các thiết bị ngoại vi và sau đó tôi muốn viết một lệnh khác cho một lệnh khác, liệu tôi có phải ngắt kết nối từ thiết bị ngoại vi hiện tại không? Nếu tôi đã ngắt kết nối để kết nối với nhau, lệnh trước sẽ vẫn có hiệu lực? Các phương pháp hay nhất cho việc này trên iOS là gì?

+0

Tôi đã làm việc với hai thiết bị BLE cùng một lúc, vì vậy bạn không cần phải ngắt kết nối từ bất kỳ ai trong số họ – OlDor

Trả lời

2

người bạn bluetooth của tôi, trước hết không cần thiết phải ngắt kết nối Thiết bị ngoại vi hiện tại để kết nối với nhau nếu bạn muốn gửi cả hai tin nhắn. Nhưng nhiều ứng dụng giới hạn số lượng thiết bị kết nối (CBPeripheral) đến 5 - 10, vì hơn 5-10 thiết bị được kết nối, có thể bị mất một cách tự nhiên, tôi biết một chút (tôi chỉ làm việc với 4 thiết bị). Ví dụ:

[[RKCentralManager sharedManager] scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@NO} onUpdated:^(RKPeripheral *peripheral) 
{ 
    //first of all u should start a scan 

    [[RKCentralManager sharedManager] connectPeripheral: peripheral options:nil onFinished:^(RKPeripheral * connectedperipheral, NSError *error) 
    { 
     //after u can connect to Peripheral immediately 

     [connectedperipheral discoverServices:nil onFinish:^(NSError *error) 
     { 
      // services - a collection of data and associated behaviors for accomplishing a function or feature of a device 

       [connectedperipheral discoverCharacteristics:nil forService: [connectedperipheral.services lastObject] onFinish:^(CBService *service, NSError *error) 
       { 
       //after u should take a characteristic - Represents a service's characteristic 
       CBCharacteristic * characteristic = service.characteristics[0]; 

       //and at last u can write value in characteristic in which you are going to write down something 
       NSData * data = [NSData dataWithHexString: newstring]; 
       CBCharacteristicWriteType type = CBCharacteristicWriteWithoutResponse; 
       [connectedperipheral writeValue:data forCharacteristic:characteristic type:type onFinish:nil]; 

       }]; 

     }]; 

    }]; 

}]; 

Đề án gần đúng để gửi tin nhắn cho thiết bị bluetooth, không bắt buộc phải đầu tư phương pháp, chúng có thể được phân phối trên hành động.

Bạn không nên lo lắng về dữ liệu kết nối và gửi cho một số thiết bị vì nó hoạt động với CBCentralManager, nếu U sử dụng chính xác.

Các đối tượng CBCentralManager được sử dụng để quản lý các thiết bị ngoại vi từ xa được phát hiện hoặc kết nối (đại diện bởi các đối tượng CBPeripheral), bao gồm quét tìm, và kết nối với thiết bị ngoại vi quảng cáo.

Bạn có thể kết nối cùng một lúc một số thiết bị và gửi tin nhắn cho họ và tất cả đều ổn. Nếu bạn có thắc mắc, sẽ cố gắng trả lời.

này được ví dụ điển hình, u có thể thấy công việc của mình: https://github.com/ruiking/ble

Về đếm tối đa của thiết bị https://stackoverflow.com/a/17282862/4912496

+0

Cảm ơn anh em trả lời! Tôi hy vọng không sử dụng thư viện mặc dù nó sẽ thêm một lớp khác vào ứng dụng. Phải có một cách để quản lý với các hàm gốc phải không? – Jobs

+0

@Jobs https://github.com/ruiking/ble đây không phải là thư viện, chỉ đơn giản là dự án của nó có thể tiếp tục cho một số thẻ quyết định, tôi chúc bạn may mắn với BLE nó thực sự khó khăn và rất ít người tham gia trong đó. –

+0

Oh okay, hãy để tôi khám phá kỹ hơn! BLE là một miếng bánh khi bạn bị mắc kẹt. Cho đến lúc đó mặc dù, cổ vũ! Tôi sẽ đánh bạn nếu tôi gặp phải bất kỳ vấn đề nào mà tôi không thể giải quyết được. – Jobs

Các vấn đề liên quan