iOS passing WIFI settings to Bluetooth (BLE) device? - ios

based on this old question
does iOS10 SDK supports passing/sending Wifi setting/credential to a Bluetooth device? "over BLE maybe?"
I'm thinking about creating an app that will pass the current connected Wifi username/password to a Raspberry PI! is it possible?

Since every mobile devices from Apple supporting iOS10, also support Bluetooth Low Energy, yes, you can send credentials from the phone to a Bluetooth Smart peripheral device, such as a Raspberry Pi equipped with a Bluetooth 4.0 dongle for instance.
See the list of devices supporting iOS 10
See the list of Apple devices supporting Bluetooth 4.0
You simply require a custom service and characteristic on the peripheral, on which your iOS device will write the Wi-Fi credentials to store.
You can further add up security by encrypting the Wi-Fi credentials using a pre-shared key (a unique symetric key per users for instance) before sending it to the Raspberry Pi.

Related

swift how to develop an app performing an actual bluetooth pair

The actual bluetooth pair I am talking about is: let the app shows up in the searching list of Bluetooth of System Settings and other devices can pair to it (like we pair our device to Apple Air Pods).
But all articles I find online are talking about BLE/CoreBluetooth, I don't think these methods could make a device name shows up in the Bluetooth of System Settings.So how to develop an app performing an actual bluetooth pair? Any ideas?
The Bluetooth preferences screen only shows legacy Bluetooth peripherals. Devices advertising BLE services do not appear.
Apps on iOS do not have the ability to create and advertise legacy Bluetooth services.
If you create an app that acts as a BLE peripheral, using Core Bluetooth, and specify that encryption is required for a characteristic then you will trigger a pairing process when an app acting as a Bluetooth central on the other device connects and attempts to read/write that characteristic. Note that this requires cooperating apps on both devices.

HM-10 bluetooth pairing with iPhone

I am using a HM-10 bluetooth to pair with my iPhone but I noticed that HM-10 can't be paired with iPhone using the "settings". It just won't show up in my bluetooth list. I will need a special app like "Lightblue" or "Bluecap" to pair it.
My question is, if I need a certain app to pair the bluetooth module with my iPhone, why is that many devices such as bluetooth speakers could be paired using the "settings" even without having an app?
Are there any bluetooth modules that could be paired without having an app like "Lightblue" or "Bluecap"?
Pairing through settings is only available for devices that use legacy profiles such as handsfree or A2DP.
Bluetooth Low Energy devices, such as the HM-10 are discoverable by any app using Core Bluetooth. Apps, like LightBlue, are just general purpose BLE apps that let you explore available BLE devices.
BLE devices only require pairing if they are using encryption on their characteristics. In this case, iOS will show the pairing dialog and complete the pairing process when the app attempts to read the encrypted characteristic.
To use the HM-10 you will need to write your own app to perform whatever communication task you are trying to achieve.
You can use nrf52832 as Bluetooth module.
If you are not making hobby project hm10 is very bad choice
I shifted from hm10 to nrf52832 before 6 months

Ios BT Connectivity & Raspberry Pi

I have a idea that requires connecting an ios device to a Raspberry Pi without the end user having to do anything special. The device will not be connected to an existing wifi network so BT or wifi hotspot seem to be my only options, BT preferred.
I'm aware that Apple does require some sort of BT hardware approval which I wont have I'll be using generic BT hardware. Once a connection is established I then want to be able to request data or call API's running on the Raspberry PI.
Does any of this sound achievable and are there any links that may help.
There are two flavours of Bluetooth: the so-called Bluetooth Classic, and the newer Bluetooth Low Energy (also called Smart Bluetooth or Bluetooth 4.0, though this is actually incorrect as BT 4.0 includes both Classic and Low Energy).
On iOS, Bluetooth Classic devices do indeed need to go through specific processes (MFi), or use an existing BT protocol supported by iOS to be used.
However, you can connect to any Bluetooth Low Energy (BLE) device, without any need for MFi, approval, or support by iOS. This is done though the Core Bluetooth framework.
As long as Bluetooth is enable in the iDevice, you can connect to a BLE device without any user interaction (though UX usually dictates doing so, so a user can actually select a specific device if there are many "matching" devices in range).

iOS BLE Supported Connection Types

I'm working on a BLE device that part of its requirements is that it'll only use connect mode between the iPhone and the peripheral (no pairing nor bonding).
According to Apple documentation Bluetooth Accessory
Design Guidelines for
Apple Products
section 3.7 Apple is using Random device address. As much as I know, when using Random device address one need to pair (in order to get the IRK).
Is there a way to have a BLE device who works with iOS and only does connect with no pairing or bonding?

Can you obtain WiFi settings from iOS and pass it to a BLE device (similar to Withings)?

The Withings iOS app has the ability to obtain your wifi settings and pass it to the body scale via Classic Bluetooth (see screenshot below). From what I learnt it's a feature only available through the MFi program, which the Withings Scale is.
I'm building an app that talks to external BLE devices. Since MFi is not required for BLE devices, I'm wondering if there's a way to do the same thing with CoreBluetooth or other frameworks?
From Apple's MFi FAQ page:
"Accessories which connect to an Apple device using only Bluetooth Low
Energy/BTLE/Bluetooth 4.0 or standard Bluetooth profiles supported by
iOS are not part of the MFi Program."
Related question on ClassicBluetooth / MFi:
Can you pass WiFi settings from an iOS device to an ExternalAccessory object?

Resources