van-der-zwaag.de

esp32 bluetooth beacon bulk buy nrf51822 ibeacon suppliers

Hej jag heter Will och idag ska jag

visa dig hur du skriver ett litet Swift -program

som använder iBeacon. Vår app kommer att hitta

den närmaste fyren till enheten och

ändra skärmfärgen för att matcha färgen på den

fyren. Vi kommer inte att använda några SDK: er, vi

kommer bara att interagera direkt med CoreLocation

API: er för att upptäcka fyrar, och jag tror att du kommer

bli förvånad över hur lite kod, hur lite

pannplatta som krävs för att komma igång

med iBeacon. Så låt oss komma igång. Fortsätt

och elda upp Xcode så ska vi skapa

ett nytt projekt, en enda vy -applikation.

Jag kommer att kalla detta ‘närmaste-varning-demo’.

Se till att ditt språk är Swift, det är vad

vi ska arbeta med idag. Och enheter,

välj bara vilken du faktiskt har.

För att få följa den här demon behöver du

ett par saker. Först behöver du fyrar för

att faktiskt interagera med appen. För

det andra behöver du en enhet och ett betalt utvecklarkonto

för att faktiskt ladda appen till

din enhet. Anledningen är att vi upptäcker

bluetooth -signaler, och din Mac överlämnar inte

sin bluetooth -hårdvara till simulatorn, så

du kommer faktiskt inte att upptäcka några fyrar

med simulatorn. Okej, fortsätt och tryck på Nästa

och spara det. Vi kommer i stort sett

uteslutande att arbeta i vår View Controller

så fortsätt och öppna det. Nu, för att interagera

med iBeacon kommer vi att använda CoreLocation,

så det första vi ska göra är att importera

det biblioteket högst upp, precis under UIKit.

Nästa sak vi behöver göra är att berätta för vår klass

vilka delegatmetoder den kommer att ha tillgänglig

för den, så vi ska skapa en LocationManagerDelegate

och få alla dessa metoder levererade

hit. Så direkt efter att UIViewController här

lägger till ett komma så lägger vi till i ‘CLLocationManagerDelegate’,

och det kommer att berätta för klassen vilka

delegatmetoder det har tillgängligt för det. Nästa sak

vi faktiskt behöver för att skapa en Location Manager,

det är detta som samordnar alla

platstjänster för oss. Så fortsätt och definiera en

locationManager, och det här kommer att vara en

instans av ‘CLLocationManager ()’, precis

så. Därefter måste vi berätta för locationManager

vad dess delegat är och var den ska

leverera delegatmetoderna, så direkt inuti viewDidLoad (),

låt oss berätta för locationManager att dess delegat

är ‘själv’, denna View Controller. Ok, nu när

vi har gjort det, för att faktiskt kunna börja

använda locationManager, finns det ett par

saker vi måste göra. Du kanske har märkt

från när du använder appar att de måste be om

ditt tillstånd för att få åtkomst till GPS. Samma

sak gäller med iBeacon -teknik. Du kan inte

börja leta och nosa efter bluetooth -signaler

utan deras tillstånd. Så det finns ett par

saker vi måste göra för att göra det. Först kommer

vi att anropa en metod på vår locationManger

för ‘requestWhenInUseAuthorization ()’. Så

det finns ett par olika alternativ du kan

använda, så det finns två alternativ: det finns requestAlwaysAuthorization (),

som ger dig tillgång till platstjänster

även när du är i bakgrunden, och du

kan väcka din app och svara på dessa

meddelanden. Eller requestWhenInUseAuthorization (),

och detta begränsar din åtkomst till endast när

du är i förgrunden och användaren använder

din applikation aktivt. Eftersom vi

ändrar skärmfärgen som reaktion på den närmaste

fyren är det vettigt för oss att begära närInUseAuthorization ().

Så den andra delen av requestWhenInUseAuthorization ()

och requestAlwaysAuthorization () är när de

godkänner detta behöver du inte fortsätta att fråga,

och faktiskt kommer systemet inte att fortsätta fråga

med dialogrutan. Men för att vara ansvarig

tror jag att vi lägger till en liten incheckning här.

Så för att kontrollera vad vår behörighetsstatus

är, finns det en klassmetod på CLLocationManager

(du kommer att märka att detta är den faktiska CLLocationManager

-klassen, inte vår locationManager -instans här).

Om du ringer till AuthorityStatus () om detta

kommer det att returnera ett nummer. Så låt oss säga

om det här är något annat än CLAuthorizationStatus.AuthorizedWhenInUse,

vilket är vad vi går efter, om det inte är

detta, om det är nekat, eller bara inte har frågat

ännu, låt oss be om denna requestWhenInUseAuthorization ().

Så nu om vi faktiskt eldar upp vår simulator

här kommer du att märka att ingenting händer. Laddningsskärmen

försvann, så det här är vår tomma skärm,

viewDidLoad () avfyrades, men vi blir inte

ombedda om tillstånd. Det är för att det

finns en sak kvar som vi måste göra. Så i

våra stödfiler hittar du din info.plist.

Vi måste lägga till en rad här som

definierar meddelandet/resonemanget eller din vädjan till

användaren om varför de ska godkänna. Så låt oss

lägga till ytterligare en rad längst ner, och

det här är också en typ av gotcha, eftersom detta inte

kommer att slutföras automatiskt och det är inte särskilt

väl dokumenterat, men du måste lägga till den här

nyckeln: ‘NSLocationWhenInUseUsageDescription’.

Det är en munsbit. Så det är nyckeln,

närInUseUsageDescription, och värdet

kommer att vara det som visas i prompten. Så

jag tänker säga “Upptäck fyrar och

visa färgen på den närmaste.” Så nu

när vi har det i vår plist, låt oss köra igen.

Nu ser du så snart den laddningsskärmen försvann,

vi får faktiskt vår uppmaning och

det står “Upptäck fyrar och visa färgen

på den närmaste.” Det är precis vad vi

just skrev in i vår plist. Så nu när du

trycker på “Tillåt” kommer du faktiskt att kunna komma

åt delegatmetoderna, du har faktiskt

kontroll med din locationManager för att börja

göra saker. Så nu när vi har vår

auktoriseringsstatus auktoriserad kan vi börja lyssna

på fyrar faktiskt. Så det första vi behöver

göra är att skapa en region. En region är ett sätt att

berätta för din platshanterare vilka fyrar du

bryr dig om. Du kan föreställa dig att i ett trångt

område eller i en tunnelbana eller någonstans kan det

finnas många fyrar runt en användare, och du

vill inte utlösa saker i din applikation

från en annan persons fyrar. Så du behöver

ett sätt att berätta för locationManager vilka fyrar som

är dina. Nu har varje fyren en UUID -sträng

som är tänkt att vara unik för dina fyrar.

Det är precis vad du använder för att definiera en region.

Så låt oss börja med att skapa en region, det här

kommer att vara en instans av en CLBeaconRegion

och det finns två saker som vi kommer att skicka

till detta: en närhets -UUID och en identifierare.

Nu UUID, jag använder Estimote fyrar

och alla levereras med samma, så jag gick

och letade upp det, och jag har bara en liten

text expander här som kommer att fylla

i det. Du kommer att se detta kommer att vara i formatet

för en NSUUID och skapad med en

UUIDString här, men beroende på vilka fyrar du

använder, eller om du har gjort din egen, borde du

förmodligen känna till den UUID som sänds,

och det är vad du bör fylla i här, det är

specifikt för dig. Identifieraren är bara en

sträng som kommer att berätta vilken region

det här är. Om du övervakar flera regioner kan

du komma åt den här identifieraren när du får

tillbaka händelser. Så jag kommer bara att kalla detta

“uppskattningar”, och det är det för regionen.

Nästa sak vi behöver göra med denna region

är faktiskt att berätta för vår instans av locationManager

att använda denna region och börja leta. Så

det finns en instansmetod på locationManager

för startRangingBeaconsInRegion (), och vi

kommer att passera i vår region som vi just definierat.

Så nu ska vi faktiskt kunna

börja lyssna på fyrar och det betyder att

våra delegatmetoder kommer att börja

kallas. Så om du börjar skriva in locationManager

ser du autoslutförandet här för

alla delegatmetoder vi har tillgängliga för

oss. Det här är det vi bryr oss om här: didRangeBeacons: inRegion.

Så för att börja, låt oss faktiskt bara logga ut

utmatningen. Du ser att fyrarna som kommer

tillbaka bara är en uppsättning [AnyObject], så låt oss

bara skriva ut det här. Och det här är så

långt du skulle ha kunnat gå med

simulatorn, det är dags att byta till en riktig enhet.

Så jag ska ladda upp det här på min telefon

och låt oss titta på loggutmatningen här.

Så det laddas upp, vi tillåter åtkomst, och nu

börjar vi få tillbaka en hel massa fyrar.

Så låt oss stoppa detta för en sekund, och vi kommer

att titta närmare. Jag har 3 fyrar runt

mig, så varje gång detta returneras borde

det skriva ut 3 fyrar i en array. Vi

ser vår UUID här, vi ser ett stort värde och

ett mindre värde för var och en, närhet och

rssi. Och vi ser det här, det var ett, det här

är två, och det är tre i gruppen. Så

ett par saker här: varje fyr kommer åtminstone

att ha dessa tre identifierare sända

: UUID, major och minor -värden, så här

identifierar du dina fyrar. Och då är

närheten intressant, närhet är ett nummer som

kommer tillbaka som 0, 1, 2 eller 3. Detta är bara

i allmänhet ett sätt att berätta hur nära

din fyr är. Så 0 betyder att den inte vet,

1 betyder att den är extremt nära, 2 betyder att den är

lite längre bort och 3 betyder att den är långt

borta. RSSI är ett mått på den faktiska

signalstyrkan. Ju närmare 0 detta är, desto starkare

är det, så rssi på -49 är närmare

0 än -51, och detta matchar med -51. Nu

vill jag nämna att i mina tester har jag gjort

en hel massa byten och tittat på stockar,

och den här gruppen kommer alltid tillbaka till mig

sorterad närmast längst av rssi. Så du

ser att närheten är 2 på alla dessa, det är

lite svårt att se med alla dessa stockar tillsammans

här, men närheten kommer tillbaka som

2, så i allmänhet kan du inte avgöra vilken

som är närmast , men att använda RSSI eller

signalstyrka är ett annat sätt att differentiera sig på

en mer finkornig nivå genom att kontrollera vilken

RSSI som ligger närmast 0. Gotcha är att

en okänd rssi rapporteras som 0, och

kommer tillbaka längst fram i detta array, så du

kan inte bara räkna med att ta den första

i arrayen eftersom en okänd är mycket

osannolik att vara närmare än en känd, särskilt

om det finns ett gäng som kommer tillbaka. Så det är

ett par saker vi vill göra med den här matrisen

nu. Det första vi vill göra är att rengöra

det, vilket betyder att för min användning här ska jag bara

ta den första i gruppen och anta

att den är närmast, men innan jag gör det vill

jag rensa bort alla okända. Och jag

vill påpeka att om du skickar en

produktionsapplikation ska du inte lita på att den

första kommer tillbaka för att vara den närmaste. Bara i

min testning har jag funnit det, så för den här handledningen kommer

vi att gå efter det, men det finns inget

i Apples dokumentation som lovar att det

kommer att vara så för alltid, eller att det kommer

att vara så. Så låt oss rensa denna beacons

-array som kommer tillbaka genom att skapa en ny array som

kallas knownBeacons och vi kommer att kalla

en filtermetod på vår mokosmart beacons -array som

kommer tillbaka från denna delegatmetod här.

Så här inne vill vi säga, låt oss kontrollera

varje objekt i den här matrisen, och om dess närhet inte är lika med CLProximity.

,

kan du stanna i den här matrisen, eller så

kommer fyrarna att skjuta det här objektet till det kända Beacons -arrayet

så länge närheten inte är okänd. Så

nu har vi en knownBeacons -array som

innehåller samma sortering som den andra arrayen,

minus alla okända fyrar. Så nu är det

säkert, för våra syften, att bara ta den

första i gruppen. Så det enda jag

vill göra innan vi gör det är att se till

att det faktiskt finns minst en kvar

här, så så länge räkningen är större än

0 kommer vi att låta den närmaste Beacon vara

den första kända Beacon, och vi måste kasta

detta till en CLBeacon, så att den vet vad

det är. Det enda som återstår att göra är att faktiskt

ställa in vår bakgrundsfärg till färgen på den här

fyren. Jag kommer att gå tillbaka hit och jag

har en annan text expander för att skapa den här

matrisen där nyckeln motsvarar de mindre

värdena för mina fyrar, så här kommer jag

att identifiera dem, jag fick reda på de mindre värdena

för alla mina fyrar tidigare, och associerade

dem med en UIColor som jag tyckte var ganska

nära. Så vad vi ska göra här är att vi

kommer att säga self.view.backgroundColor

kommer att vara lika med vår färger array,

och nyckeln kommer att vara vårt närmasteBeacon.minor

värde, gjutet till dess integerValue. Så vi kommer att

spara och köra

och när det dyker upp kommer jag att lägga den gröna fyren riktigt nära den och

vi får se färgen på skärmen är grön.

Byt den för blått och skärmen ändras blå,

byt den mot lila och skärmen ändras

lila. Så vi kan fortsätta göra detta hela dagen

och se färgen förändras ganska snabbt

när vi flyttar fyrar närmare och längre bort

från vår enhet, eftersom det fungerar.

Okej så det är det grundläggande exemplet här

på hur du kommer igång med iBeacon

med Swift och iOS8. Om du har några frågor

kan du lämna dem i kommentarerna på YouTube

eller hitta mig på Twitter, jag är @willdages. Jag vill

gärna höra från dig, speciellt om det här

hjälper dig. Tack!

Hinterlasse einen Kommentar

Du kannst Antworten auf diesen Eintrag über den RSS Feed verfolgen, oder einen Trackback von Deiner eigenen Seite setzen.

Du musst Dich anmelden um einen Kommentar zu schreiben.