2012-10-23 6 views
6

मैं सोच रहा था कि मैं अपने आईफोन की सीमा के भीतर ब्लूटूथ उपकरणों की सिग्नल शक्ति को माप सकता हूं। असल में मैं जो करना चाहता हूं वह सीमा के भीतर उपकरणों की सूची के लिए स्कैन है, और फिर देखें कि किसके पास उच्चतम सिग्नल शक्ति है। क्या यह आईओएस में संभव है और यदि ऐसा है तो मैं इसे कैसे करूँगा?क्या मैं आईओएस में ब्लूटूथ सिग्नल की शक्ति को माप सकता हूं?

उत्तर

5

हां ब्लूटूथ लो एनर्जी (4.0) के लिए सिग्नल शक्ति को मापने का एक तरीका है यह आरएसएसआई नंबर है। आप के रूप में नीचे दिखाया गया है हाँ करने के लिए ध्वज CBCentralManagerScanOptionAllowDuplicatesKey सेट हो जाएगा आप बाह्य उपकरणों के लिए स्कैन जब:

NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@YES, CBCentralManagerScanOptionAllowDuplicatesKey, nil]; 

// Start scanning for peripherals 
[cmanager scanForPeripheralsWithServices:nil options:dictionary]; 

क्या आप iTunes में एप्लिकेशन LightBlue की जांच करनी चाहिए किसी भी कोड लिखने के बिना RSSI संख्या काम देखना चाहते हैं। जब आप एक परिधीय से कनेक्ट होते हैं तो यह आपको कनेक्ट होने पर हर सेकेंड में अद्यतन आरएसएसआई नंबर दिखाएगा।

- (void)centralManager:(CBCentralManager *)central 
didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
        RSSI:(NSNumber *)RSSI 
{ ... } 

RSSI आप के लिए क्या देख रहे है:

2

CoreBluetooth documentation को देखें। अस्वीकरण: कोर ब्लूटूथ केवल ब्लूटूथ 4 LE के लिए बनाया गया है।

यदि सटीक सीमा कोई फर्क नहीं पड़ता है, लेकिन आप सामान्य रूप से उपलब्ध डिवाइस स्कैन करने में रुचि रखते हैं, तो आप github प्रोजेक्ट BeeTee पर एक नज़र डाल सकते हैं, जो आपको अपने आस-पास के सभी ब्लूटूथ डिवाइसों को स्कैन करने की अनुमति देता है (न केवल ब्लूटूथ ली)। फिर अस्वीकरण: मैं बीटी के लेखक हूं। ;-)

0

जब आप CBCentralManager का उपयोग करके अपना 'केंद्रीय' कोड कोडिंग कर रहे हैं, तो आप अंततः सीबीपीरफेरल से कनेक्ट हो जाएंगे जिसे आप ढूंढ रहे हैं। एक बार जब आप परिधीय से जुड़े हों, तो इसका संदर्भ रखें, परिधीय प्रतिनिधि के रूप में अपनी वस्तु को सेट करें और परिधीय पर 'readRSSI' का आह्वान करें। आपको एक प्रतिनिधि कॉलबैक मिलेगा peripheral: didReadRSSI: error: यदि आप 'readRSSI' को आमंत्रित करने वाली कोई विधि लिखते हैं, तो आप इसे performSelector: withObject: afterDelay: का उपयोग करके आमंत्रित कर सकते हैं।

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

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