I'm developing a 'smart watch' which is connected via BLE to an app on a phone.
My idea is to show the direction on the watch so the user doesn't have to remove the phone from their pocket while using their favorite application (Waze, Google Maps, ...)
Is there any standard to send navigation information (turn left/right, ...) to a smart device over BLE?
It seems there are apps that do this, but they are fully custom: https://www.youtube.com/watch?v=naAhe7DTKYM. I'm checking on the side of Android Auto, but it seems to me it's only by USB cable.
Off the top of my head there are two services that you can use for this purpose:-
Location and Navigation Service (Used mostly for outdoor):-
"The Location and NavigationService(LN Service)exposes location and
navigation-related data from a Location and Navigation sensor
(Server)intended for outdoor activity applications."
Indoor Positioning Service (Used mostly for indoor):-
"The Indoor Positioning Service exposes location information to
support mobile devices to position themselves in an environment where
GNSS signals are not available, for example in indoor premises. The
location information is mainly exposed via advertising and the
GATT-based service is primarily intended for configuration."
If both are not 100% suitable for your application, then you can create your custom profile that contains one or both of these services in addition to a custom service (turn left/right etc). This way, any watch can connect to the phone and get the adopted services info, and for any additional info watch can add support for the custom service.
When I was looking for such "standard way" for turn-by-turn navigation (official Bluetooth specification for navigation, similar to official Battery or Heart rate services), I didn't find anything suitable, but I still have a feeling like maybe I've missed something.
Those services Youssif Saeed suggested are for different type of navigation, not turn-by-turn unfortunatery.
Some apps (Sygic for example) may integrate their own BLE service.
I guess the application you linked reads notifications (posted by navigation apps like Waze, Google Maps), extract instructions from them, and then send to an external device via BLE.
Related
I am a developer and I have a Bluetooth Lamp that has RGB and Day/Warm Light that has a third party App to control it.
My goal is to do some automation with my Lamp.
Is there a way to read what this app is sending to my Lamp is order to simulate its functionality? The thing is this App is not possible to integrate with my Google assistant so I am trying to find a way to do it my self by making my own mobile application to control my Lamp.
Or maybe my question should be something like: is there a generic App that can control generic Bluetooth Lamps?
Any information is greatly appreciated.
You could either hack the hardware itself, or you could simply snoop on the communications to hack in to the lamp controls.
Otherwise, I would check out integration platforms like IFTTT, which allows some customization of control with proprietary systems.
Is it possible to search for beacon data (uuid, url, ...) with a progressive web application using just web technologies that is without using native mobile technologies (Android, ios, ...)?
Thanks in advance.
Unfortunately, this is not possible as of July 2020. While Google has been working on the WebBluetooth project to bring support for many bluetooth operations to the browser, at least in Google Chrome implementations on Android 6+, Mac or ChromeOS.
Scanning for beacons is not yet possible as of this writing. The API requires that the OS scan for devices matching a requested criteria, and then let the user choose a device to connect to using a user interface. This essentially rules out beacon detection.
Bluetooth scanning APIs are still in draft form here.
EDIT: The APIs mentioned by #zurfyx in the answer below allow you to scan for and connect to an advertised GATT service, but do not allow you to read the data in the advertisement. This is a critical distinction, as reading the data in the advertisement is the key capability required for actual bluetooth beacon detection. That capability is missing from that API. Without that capability, it is impossible to detect a beacon, it is only possible to connect to a BLE device that might be an Eddystone or other service advertisement-based beacon.
UPDATE July 2020: Safari will not be getting any WebBluetooth APIs at all due to privacy concerns, according to a June 2020 announcement by Apple This makes Bluetooth scanning impossible on iOS we apps for the foreseeable future.
As of July 2020, Chrome does not support scanning arbitrary advertisements. See status here: https://github.com/WebBluetoothCG/web-bluetooth/blob/master/implementation-status.md
Disclaimer: I wrote eddystone-web-bluetooth (a library which makes it easy to read and write to an Eddystone device). github#eddystone-web-bluetooth npm#eddystone-web-bluetooth
It is possible to scan for Bluetooth devices by using the Web Bluetooth API (currently supported only by Chrome).
By using Bluetooth GATT service, you can connect to Eddystone devices and send/receive data by communicating following their public specifications (which are basically a list of request codes, and the format in which to send and expect their responses).
These services include information such as:
URL
Advertising interval
Lock state
and more
By using the Bluetooth standard information you can get to know the most generic device information, such as its id and name:
navigator.bluetooth.requestDevice
#beaufortfrancois wrote the probably first Eddystone Web Bluetooth configuration code (source code / demo), so it is probably worth a read if you want to dig more into this. I learned a lot from it.
I want to build an IOT (Internet of things) device using the Bluetooth Smart protocol / GATT. I'm a bit confused how I'd make this conform with the BLE specs. All the profiles listed seem to focus on health-stuff and I'm having trouble making the conceptual leap to other applications.
Assume this device is a coffee maker, and I want to :
Get an alert when the water / coffee needs a refill
Set a timer for when to make coffee
Recognize my coffee preference vs my wife's
Send arbitrary text to be displayed on the LED
Question
What are the appropriate Charactertistics, Services, and Profiles I should use?
Do I need to register these profiles, or UIDs anywhere (e.g. Bluetooth.org)
Where do I enable security? (I don't want anyone to know I put lots of sugar in my coffee?
Where do I send my custom text? In a custom structure?
You have to search for the customized profile (including all services and characteristics) of your specific coffee maker. There isn't a predesigned profile.
No, you don't need to register the profile with it's UUID's. It is already used from your coffee maker ;)
This should be the last point of your work and depend on your manager device.
You have to send your data to the right characteristics which depend on the customized profile of your coffee maker.
I would like to make iOS7 Application like MLB
I was reading Article is http://www.engadget.com/2013/09/27/mlb-to-use-ios-7s-ibeacon/
this article said to :
MLB application installed ,
Beacon(Bluetooth LE device) sendging Proximity UUID for MLB application,
MLB application make Passbook ticket or update ticket (and Lock screen update passbook)
This feature, Can only have one special applications for Apple authentication?
some articles said to :
Location based marketing and Passbook tickets
This particular application makes iBeacons an extension of the geofencing Apple enabled in last year’s Passbook, which lets an installed pass, ticket or loyalty card popup on the lock screen when you cross the geofence threshold of a defined GPS location. Using BLE, a merchant or other provider can define more targeted “micro-locations” to trigger an alert, in some cases requiring that you be in the presence of an iBeacon in order to validate a Passbook entry .
i don't understand 'particular application'...
iOS7 application can make publish passbook use iBeacon without user event?
(i don't know well english ;; sorry;;)
Bluetooth Beacons support is a new addition to iOS 7.
Rather than using GPS, it works by determining the phone's location relevant to a Bluetooth beacon. These beacons constantly broadcast a UUID that identifies them. Beacons offer more accuracy indoors as GPS doesn't work that well in covered spaces.
The standard CoreLocation framework defines a new class called CLBeaconRegion:
A CLBeaconRegion object defines a type of region that is based on the device’s proximity to a Bluetooth beacon, as opposed to a geographic location. A beacon region looks for devices whose identifying information matches the information you provide. When that device comes in range, the region triggers the delivery of an appropriate notification.
An apps can request to be informed when they are near these beacons. This is how the MLB app works. It is programmed to recognize these beacons and to provide the user with offers and information based on location.
In addition to support within apps, Passkit also provides the support these beacons. It works in roughly the same way. The pkpass file contains a list of UUIDs that identify various beacons and when the phone is near a beacon, the pass is shown on the lock screen.
You can read more about Passkit's support by looking at the package format guide
https://developer.apple.com/library/ios/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/LowerLevel.html#//apple_ref/doc/uid/TP40012026-CH3-SW4
Hopefully that answers your question.
I am trying to find a clever way to keep a BLE app active in the background on iOS 6, without breaking any of Apple's rules. I plan to use the phone as a peripheral device and another BLE circuit as the central. My app will automatically be opened when a user arrives to a building using geofencing. After that the iPhone will connect to the first BLE central device it sees (the device will be in its white list). The user will then be able to move throughout the building switching to different BLE "nodes".
My question is: What do I need to do in the background when a user is stationary at their desk so that the app does not get suspended due to memory resources?
My idea is based on this solution for a separate problem: There could potentially (not regularly) be 10-50 users in an area with only a few BLE "nodes" and I read at bluetooth.org that I could setup a dynamic connection system, basically rotating connections through all the users.
My idea is to setup a similar dynamic system where the central device (not the iPhone) disconnects the device on regular intervals (30-40 minutes) and then the iPhone will reconnect.
Is this something that some feasible? Is this against the iOS development guidelines? I was unable to find anything explicit about this. I have also asked on the iOS developer forum, but unfortunately it is not as popular as this site.
Thanks in advance!
Xcode -> Project target -> Capabilities -> Enable background mode
Check Uses Bluetooth LE Accessories
Capabilities
Also enable the following key in .plist file
Required background modes
App communicates using CoreBluetooth
Plist