I am working on a project where I have to discover a bluetooth chip provided by Roving Networks - RN-42. The development kit come with an ios application which shows how to communicate with the chip but first we have to connect/pair (manually) with the chip using iOS settings. It uses EAAccessory Framework and works fine.
What I want is to discover the bluetooth chip from my application and then connect/pair with it automatically but I cannot find a way on how to do that. I am using CoreBluetooth framework to discovery the chip but nothing comes up. Here is how I try to scann for BT devices using CBCentralManager
[self.centralManager scanForPeripheralsWithServices:nil
options:nil];
But I don't get anything back in the callback.
Thanks
CoreBluetooth framework only allows you to discover Bluetooth LE capable devices, and does not show classical Bluetooth (BT3.0 and older) devices at all.
Apple had API calls to discover classical Bluetooth devices, but I think they have been removed lately.
You need a product like this in order to do in App pairing and connections:
http://www.bluegiga.com/BLE113_Bluetooth_Smart_module
Related
I am doing a project that uses BLE(CoreBluetooth).
In the mean time we use a mock in the form of android device.
My question is this:
Why does the CoreBluetooth doesn't recognise the android device? (i read about BLE GATT but still didn't understand it).
Also if i go in the iPhone to settings->bluetooth it recognises it and even connect to the android device ,how can i implement this in my app?
Programming with CoreBluetooth
IMHO, CoreBluetooth is quite cumbersome. I suggest using a library like RxBluetoothKit which takes away a lot of the boilerplating involved with handling the GATT profiles yourself.
Devices, mockups
Cool BLE devices are around 30$ nowadays. I use PuckJS - a JS supporting programmable BLE board.
Apple requires MFI certification for devices that connect to iOS devices via Bluetooth.
The exceptions are:
BLE devices.
Bluetooth devices which exclusively support either of these profiles.
So your Android mockup would have to advertise itself as one of these.
I'd really like to start testing my iOS apps Bluetooth capabilities, but have run into a few problems:
I have a device made with a RN-42 module, but it's not the Apple version and I don't have the Apple authentication module at the moment (I ordered it, but shipping from China can take a while). I know what the messages will look like, but can't send them to my iPhone!
I can use the module with my Macbook, but not in the iOS simulator! Apple has taken down all of the documentation related to getting the iOS < 7.0 to use a separate bluetooth dongle, and my efforts have left my 6.1 simulator endlessly spinning on the bluetooth screen.
I'm new to using Bluetooth, so this may be a dumb question...
Is there a way of getting a bluetooth client device (I have a Mac, another iPhone, and an Android tab) to act as a server module that can send (and receive) Bluetooth data to my iPhone?
Client/Server as per developer.bluetooth.org
Thanks!
Not 100% sure your meaning of "server module". But in CoreBluetooth, you can use CBPeripheralManager to broadcast data to other iOS or Mac apps.
https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBPeripheralManager_Class/Reference/CBPeripheralManager.html
If you're using standard Bluetooth (i.e. not Bluetooth LE or Bluetooth Smart or whatever you want to call it), you'll need to enroll in the MFI program or work with an MFI certified device (such as a Redpark cable) and use the External Accessories library provided by Apple. If you're using Bluetooth LE, you can use the Core Bluetooth library provided by Apple. If you fall into neither of those cases, sorry, you can't use Bluetooth on iOS.
I have a bluetooth barcode scanner whose spec says it's bluetooth 2.0, class 2. It is strange because my iPhone 5 (iOS7) could find and connect it. I thought iOS only connects BLE devices. But in my app I couldn't scan this device. I've no idea if this is because its bluetooth spec. I wish someone could give me some advices about how to connect this device in my app using CoreBluetooth or some other valid libs.
By the way my code is correct because I could find LightBlue app on another iPhone. My code is as following:
// state is PowerOn
[_centeralManager scanForPeripheralsWithServices:nil options:nil];
I guess you detect it via Settings.app/Bluetooth? If that's so, that's a "classical" bluetooth device. It's not a Bluetooth Low-Energy one. If you want to connect to "classical" bluetooth device, you'll have to use ExternalAccessory.Framework.
Bluetooth 4.0 contains two types of Bluetooth : Bluetooth "classical" and Bluetooth Low-Energy (as a fork). So that's why your iPhone can detect it.
I am developing an iOS bluetooth app that needs to pair with a peripheral device.
What frame work do I need to use to interact with a device that has support for the following protocols/profiles:
A2DP
HFP
HSP
Are either of these possible with an iOS device without being a member of the the MFI program?
How do I support these profiles:
https://support.apple.com/kb/HT3647
Do I do that using corebluetooth?
These are standard profiles that are supported inherently by iOS. You don't need to add any software to make the phone work with these. At the same time apps running on the phone will have limited access to what device they can use or are using but for example the audio routing can be obtained.
All in all, as long as the device implements the profiles correctly, any application will be able to use it, not just yours.
There are two completely different methods of doing Bluetooth communications. One is with the classic Bluetooth profiles and the latest is using BLE (Bluetooth Low Energy).
Classic Bluetooth can be used with the ExternalAccessory framework and GameKit framework.
BLE uses CoreBluetooth.
The classic profiles supported are listed here:
http://support.apple.com/kb/HT3647
I have followed the instructions on Technical Note TN2295 to enable testing bluetooth within the iOS Simulator, which includes buying a separate Bluetooth 4 dongle. However, within the Simulator when I go to the iOS Bluetooth settings, I can turn bluetooth on, but it never discovers any other bluetooth device (yes, those devices are discoverable).
I have tried the following to narrow things down:
I can pair the MacBook with the bluetooth device (Pebble watch), but it is not clear if I am doing so with the in-built bluetooth, or the bluetooth dongle.
I can plug the dongle into a Windows PC that doesn't have bluetooth, and then pair it to the Pebble watch. This tells me the dongle is working.
Other questions on SO relate to not being able to turn bluetooth on in the Simulator, but I am getting past this point. Can anybody help with the next step?
According to this ReadMe from ExternalAcccessory (non-LE bluetooth) framework's demo, there's no support to connect to real accessories through simulator.
Also, the technical note you mentioned applies only to the CoreBluetooth framework (LE bluetooth).
So you can only connect to Low-energy (Bluetooth 4.0) devices from your iOS simulator.
As far as i know, Pebble watch is using both Bluetooth 2.1 and Bluetooth 4.0 though. In this case, you can try connecting to it using CoreBluetooth framework.