Bluetooth in app development

Door Bas van Kuijck, mobile developer - @basvankuijck
8 maart 2018 - 2601 x bekeken - Categorie├źn: Mobile, Tech

In 1994 was Zweeds bedrijf Ericsson de eerste die stappen zette naar Bluetooth communicatie. Het was zelfs een Nederlander in dienst van Ericsson die de techniek initieel heeft ontwikkeld. 

Ericsson was op zoek naar een goedkope manier om een draadloze verbinding te kunnen leggen tussen (mobiele) apparaten. Sinds die tijd heeft er een hoop doorontwikkeling plaatsgevonden, met wellicht de belangrijkste update rond 2010; Bluetooth 4.0 + LE. De letter LE staan voor Low Energy, wat volgens die protocollen ervoor moet zorgen dat de Bluetooth chip zelf, relatief, weinig energie verbruikt. En dat is voor een smartphone natuurlijk ideaal. Vooral omdat de smartphones steeds dunner en sneller worden, maar de batterijduur mag hier niet onder lijden.

De ontwikkeling binnen de Bluetooth stuurgroep ligt niet stil en midden 2016 zag Bluetooth 5 het daglicht. Bluetooth 5 richtte zich voornamelijk op de Internet of Things en verdubbeling van zowel de snelheid als bereik. En eveneens weer een verlaging van het energieverbruik.

Bluetooth versie

Maximale snelheid

Maximaal bereik

3.0

25 Mbit/s

10 meter

4.0

25 Mbit/s

60 meter

5

50 Mbit/s

240 meter

Uiteraard heeft de afstand van de zender ten opzichte van de ontvanger effect op de maximale snelheid.

Dat is allemaal leuk en aardig, maar wat hebben wij er aan?
Goeie vraag :) 

Een bluetooth chip varieert van afmeting tussen de 5x5 en 10x10 mm, afhankelijk van de producent. Hierdoor kan het in de meest kleine hardware oplossingen gestopt worden, zonder een grote impact te hebben op de afmetingen van het eindproduct. Dit is vooral een pre voor producten die zo klein mogelijk dienen te zijn en te blijven.

Om met apparaten te communiceren wordt over het algemeen gebruik gemaakt van wifi of bluetooth. Andere methodes zoals IR (infrarood) of RF (radio frequencies) laten we even buiten beschouwing, omdat dit over het algemeen gedateerde methodes zijn. Het grote verschil tussen wifi en bluetooth is dat je, los van eventuele pairing, geen setup procedure hoeft te doorlopen bij blueooth. Je zal een wifi device moeten instellen om zo op het juiste (beveiligide) netwerk te komen. Terwijl je bij bluetooth 'gewoon' in de buurt moet zijn. Lees hier een wat meer gedetailleerde vergelijking.

Een bluetooth verbinding

Een apparaat dat Bluetooth ondersteuning heeft, kan (verschillend per device) met maximaal 7 andere apparaten verbonden zijn. Zo’n apparaat wordt ook wel een peripheral genoemd. Om verbinding te maken met een peripheral dient eerst gezocht te moeten worden naar dat apparaat. 

Stel bijvoorbeeld eens voor dat we een personenweegschaal hebben, die bluetooth ondersteuning en een iOS app heeft. We zetten de weegschaal aan en starten de app. Een bluetooth peripheral zal altijd zichzelf kenbaar maken naar de buitenwereld om mee te verbinden. Dit wordt ook wel ‘advertising’ genoemd. Op deze manier kunnen andere devices (bijvoorbeeld een iPhone) deze peripheral vinden en er verbinding mee maken. Maar tegenwoordig zijn er een heleboel devices die gebruik maken van bluetooth, dus zomaar verbinding leggen met de eerste de beste die je vindt, zal niet goed genoeg zijn.

Al die bluetooth devices kun je zien als een groep mensen, die er op het eerste gezicht allemaal exact hetzelfde uitzien: 

Deze groep met mensen is door iedereen te bekijken en kun je door het gebruik van elke bluetooth scanner ophalen. Maar slechts één van deze mensen is daadwerkelijk de weegschaal waarmee de app wil verbinden.

 

Hoewel al deze peripherals een naam hebben, is de juiste niet per se direct te herkennen. Daarom sturen al de peripherals bepaalde informatie uit, waarmee ze 'advertisen', genaamd services. 

Services en characteristics

Een bluetooth service is een dienst die de peripheral ondersteunt. En die dienst bevat weer characteristics. Een characteristic is een eigenschap of waarde die de dienst kan laten wijzigen of teruggeven. Dus om de verbinding te maken met de juiste peripheral, moet je weten of de peripheral ook de juiste services ondersteunt. Anders gezegd, je moet weten of de persoon waarmee je in contact wil komen, ook jouw taal spreekt.

Gelukkig adverteren al deze peripherals (enkele) services die ze ondersteunen. Dus zo weet je vooraf dat je verbinding maakt met de peripheral dat ook jouw taal spreekt. En weet je 100% zeker dat de app ook verbinding wil maken met een weegschaal en niet met een ander apparaat.

GATT specificaties

Er zijn 2 type services. Een standaard service die wordt ondersteund in de GATT profielen en een maatwerk service. 

De bluetooth stuurgroep heeft een lijst opgezet met standaard services en characteristics, genaamd GATT specifications, zodat je product een taal spreekt die andere apps of toepassingen ook begrijpen. Zo kan bijvoorbeed een weegschaal producent ervoor kiezen dat de data die wordt verstuurd over bluetooth via een GATT service en characteristic profiel gaat. Dit betekent dat de communicatie verloopt via een standaard gedefinieerd protocol. Oftewel via een officiële (wereld)taal.

Dit heeft als groot voordeel dat er geen technische documentatie benodigd is voor de (app)ontwikkelaar om zo gegevens uit de weegschaal te krijgen. Het grote nadeel is dat wellicht de officiële app van de weegschaal producent niet wordt gebruikt door de consumenten, maar een verbeterde 3rd-party app.

Een ander nadeel is dat de GATT profielen vast zijn. Wil je meer data kwijt dan dat het profiel toelaat, dan dien je een eigen service (taal) op te zetten waar het device dan mee moet communiceren.

Data uitwisseling

Zodra het juiste device is gevonden, kan er een verbinding worden opgezet. Sommige devices maken gebruik van een pairing mechanisme, waarin zowel de peripheral als de client moeten valideren dat ze ook echt met elkaar communiceren. Dit kan door het invoeren van een code of door simpelweg goedkeuring te geven dat er een verbinding moet worden gelegd. Er zijn 3 methodes om data uit te wisselen met een bluetooth peripheral: 

Read

Het inlezen van een waarde. Stel voor dat je de batterij percentage van je weegschaal wilt ophalen, zodat je een melding kan tonen dat hij opgeladen dient te worden. Op dat moment kan je client een read aanvragen op de 'battery level' characteristic, van de battery service. De peripheral zal dan het percentage teruggeven om voor de client te gebruiken, in bijvoorbeeld een app.

Write

Via een write kan de client (app) een waarde wegschrijven naar de peripheral. Bijvoorbeeld als diezelfde weegschaal ook je BMI berekent, zul je je lengte moeten opgeven. Dit kan door de client een schrijf actie te laten uitvoeren op de 'height' service en characteristic. De periperhal moet op dat moment de verstuurde waarde opslaan, voor toekomstig gebruik.

Notify

Als laatste en wellicht de belangrijkste, is notify. Via deze methode krijgt de client een signaaltje zodra een waarde van een specifieke characteristc wijzigt. Stel wederom voor dat je op die weegschaal staat. Zodra de weegschaal je gewicht heeft, verstuurt hij die via de 'weight' service en characteristic. Het verschil tussen notify en read is dat je bij een notify een signaaltje krijgt zodra de waarde is gewijzigd. Als er geen notify beschikbaar zou zijn, zou de client elke keer een read moeten doen om de waarde op te halen. Wat a) omslachtig is en b) meer energie kost.

Naast deze 3 methodes is er ook verschil in de manier waarop een verbinding tot stand komt. Meestal maakt een smartphone (via een app) automatisch verbinding met de peripheral en wordt er altijd geprobeerd om deze verbinding in stand te houden, zelfs als de app afgesloten wordt. Toch kan er ook op dat soort momenten door de peripheral een notify gestuurd worden, of een write of read request worden gedaan. Tussendoor zal er niks qua communicatie gebeuren, enkel de verbinding met elkaar blijft intakt. Maar een bluetooth verbinding (ook al is het Low Energy) kost nog steeds energie. Dus het continu openhouden van de verbinding, zorgt voor een snellere afname in het batterijverbruik dan wanneer deze is uitgeschakeld. 

Een alternatief is dat de app enkel op momenten van gebruikersinteractie een verbinding maakt met de peripheral en nadat de data uitwisseling is voldaan, de verbinding weer sluit. Zulke methodes maken dus vaak enkel en alleen gebruik van een write en read request. Met als gevolg dat bij elke interactie eerst verbinding gelegd moet worden en de data uitwisseling pas zal plaatsvinden bij een succesvolle verbining.

App development

Om een app te ontwikkelen die met een bluetooth device communiceert, is het belangrijkste dat de app weet hoe hij met dat apparaat moet communiceren. Of dit nu via standaard GATT profielen gaat of via een maatwerk oplossing die is opgezet door een engineer, in beide gevallen zijn documentatie en (communicatie)afspraken van groot belang. Zonder dat de app weet hoe hij informatie van en naar de peripheral kan sturen, hou je niets anders over dan een smartphone en een (bluetooth) device die los van elkaar bestaan.

Platform

Zodra de app bepaalde data heeft ontvangen, kan hij deze data verwerken. Bijvoorbeeld door data lokaal op te slaan en zo serveren naar de gebruiker. Maar in veel gevallen wordt de data weer worden doorgeschoten naar een API, die het op zijn beurt weer in een database opslaat. Zo kun je in het geval van je de weegschaal, je gewicht via een online (beveiligde) portal inzien en hem in de loop daar maanden zien dalen of stijgen.

 

In bovenstaand voorbeeld vervult de app 2 belangrijke rollen:

1. De app functioneert als een soort doorgeefluik van de bluetooth data.
2. De app wordt gebruikt om de data te bekijken en in te zien.

Conclusie

Er zijn dus een hoop zaken waar je noodzakelijk vanaf moet weten, om via een app verbinding te kunnen maken met een bluetooth device. Bij E-sites hebben wij een standaard communicatie laag geschreven, voor iOS en Android apps. Dat biedt de mogelijkheid om vanuit een framework maatwerk oplossingen te bouwen, zonder bij elk project opnieuw de fundering te hoeven leggen.

Wil je meer weten over app ontwikkeling in combinatie met bluetooth? Neem dan zeker contact met me op! 

 

App developer? Wij hebben verschillende mogelijkheden binnen ons mobile team! Check onze vacatures.

PHPBenelux 2018: wat staken wij ervan op?

Door An Truong

We waren weer op PHPBenelux dit jaar. Benieuwd wat wij ervan opgestoken hebben? Lees mee!

Lees verder