BLE og GATT for IoT

lydversion af indlægget

Bluetooth er en trådløs teknologistandard, der bruges til udveksling af data mellem faste og mobile enheder over korte afstande. Bluetooth Lavenergi (Bluetooth LE eller BLE) er en trådløs personlig Netværksteknologi designet og markedsført af Bluetooth Special Interest Group (Bluetooth SIG). Ifølge Bluetooth SIG er BLE designet til meget lav strømdrift. BLE understøtter datahastigheder fra 125 Kb/s til 2 Mb/s med flere effektniveauer fra 1 milliliter (MVV) til 100 MVV. Flere nøglefaktorer påvirker den effektive rækkevidde af en pålidelig Bluetooth-forbindelse, som kan variere fra en kilometer ned til mindre end en meter. Den nyere generation Bluetooth 5 giver en teoretisk forbedring af 4 gange rækkevidde i forhold til Bluetooth 4.2, fra cirka 200 fod (60 meter) til 800 fod (240 meter).

i øjeblikket lister 36 definitioner af Bluetooth-profiler defineret og vedtaget af Bluetooth SIG, herunder generisk attribut profil (GATT) specifikation. Ifølge Bluetooth SIG er GATT bygget oven på Attributprotokollen (att) og etablerer fælles operationer og en ramme for de data, der transporteres og lagres af att. GATT leverer profilopdagelses-og beskrivelsestjenester til BLE-protokollen. Det definerer, hvordan att-attributter grupperes i sæt for at danne tjenester.

i betragtning af dets lave energiforbrug og veludviklede profiler, såsom GATT, BLE er en ideel trådløs protokol med kort rækkevidde til tingenes internet (IoT) enheder sammenlignet med konkurrerende protokoller, f.eks. I dette indlæg vil vi undersøge brugen af BLE og GATT-specifikationen til at overføre miljødata fra en IoT-Sensor til en IoT-Port.

IoT Sensor

i dette indlæg vil vi bruge en Arduino single-board mikrocontroller til at fungere som en IoT sensor, faktisk en række sensorer. Det 3.3 V AI-aktiverede Arduino Nano 33 BLE Sense board, der blev udgivet i August 2019, leveres med den kraftfulde nrf52840 processor fra Nordic Semiconductors, en 32-bit ARMBARK-M4 CPU, der kører ved 64 MH, 1 MB CPU flashhukommelse, 256 KB SRAM og et NINA-B306 stand-alone Bluetooth 5 lavenergimodul.

Arduino Nano 33 BLE Sense (med overskrifter) på breadboard

Sense indeholder også et imponerende udvalg af indlejrede sensorer:

  • 9-akse Inertial Sensor (LSM9DS1): 3D digital lineær accelerationssensor, en 3D digital
    vinkelhastighedssensor og en 3D digital magnetisk sensor
  • fugtigheds-og temperatursensor (HTS221): kapacitiv digital sensor til relativ fugtighed og temperatur
  • barometrisk Sensor (LPS22HB): MEMS nano tryksensor: 260-1260 hektopascal (hPa) absolut digitalt outputbarometer
  • mikrofon (MP34DT05): MEMS lydsensor omnidirektionel digital mikrofon
  • gestus, nærhed, lysfarve og Lysintensitetssensor (APDS9960): avanceret bevægelsesdetektering, Nærhedsdetektering, Digital Ambient Light Sense (ALS) og Color Sense (RGBC).

Sense er en fremragende, billig single-board mikrocontroller til at lære om indsamling og transmission af IoT-sensordata.

IoT-porten

en IoT-Port er ifølge TechTarget en fysisk enhed eller et program, der fungerer som forbindelsespunkt mellem skyen og controllere, sensorer og intelligente enheder. Alle data, der flytter til skyen, eller omvendt går gennem porten, som enten kan være et dedikeret apparat eller et program.

i dette indlæg vil vi bruge en nyere generation Raspberry Pi 3 Model B+ single-board computer (SBC) til at fungere som en IoT-Port. Denne Raspberry Pi-model har et 1,4-bit hjernebark-A53 (ARMv8) 64-bit firekerneprocessorsystem på en Chip (SoC), 1 GB LPDDR2 SDRAM, dobbeltbånd trådløst LAN, Bluetooth 4.2 BLE og Gigabit Ethernet.

hvis du vil følge med i indlægget, kan du erstatte Raspberry Pi med en hvilken som helst maskine til at køre det medfølgende Prøvepython-script.

Raspberry Pi 3 Model B+

Arduino vil overføre IoT sensor telemetri, over BLE, til Raspberry Pi. Raspberry Pi, ved hjælp af trådløst internet eller Ethernet, er derefter i stand til sikkert at overføre sensortelemetridataene til skyen. I Bluetooth-terminologi overfører Bluetooth-perifer enhed (aka GATT-Server), som er Arduino, data til Bluetooth Central-enheden (aka GATT-klient), som er Raspberry Pi.

Arduino Sketch

for dem, der ikke er bekendt med Arduino, er en skitse det navn, som Arduino bruger til et program. Det er kodeenheden, der uploades til ikke-flygtig flashhukommelse og kører på et Arduino-kort. Arduino-sproget er et sæt c/c++ – funktioner. Alle standard C-og C++ – konstruktioner, der understøttes af avr-g++ – kompilatoren, skal fungere i Arduino.

til dette indlæg, skitsen, combo_sensor_ble.ino, indeholder al den kode, der er nødvendig for at indsamle miljøsensortelemetri, inklusive temperatur, relativ fugtighed, barometertryk og omgivende lys og RGB-farve. Al kode til dette indlæg, inklusive skitsen, kan findes på GitHub.

sensor telemetri vil blive annonceret af Sense, over BLE, som en GATT Environmental Sensing Service (GATT tildelt nummer 0h181a) med flere GATT egenskaber. Hver karakteristik repræsenterer en sensorlæsning og indeholder den mest aktuelle sensorværdi(er), for eksempel temperatur (0h2a6e) eller Fugtighed (0h2a6f).

hver GATT-Karakteristik definerer, hvordan dataene skal repræsenteres. For at repræsentere dataene nøjagtigt skal sensoraflæsningerne ændres. For eksempel ved hjælp af arduinohts221 bibliotek, er temperaturen fanget med to decimaler af præcision (f.eks 22.21 liter C). Temperaturen GATT Karakteristik (0h2a6e) kræver imidlertid en underskrevet 16-bit værdi (-32.768–32.767). For at opretholde præcision multipliceres den indfangede værdi (f.eks. 22,21 liter C) med 100 for at konvertere den til et heltal (f. eks. 2221). Raspberry Pi håndterer derefter konvertering af værdien tilbage til den oprindelige værdi med den korrekte præcision.

GATT-specifikationen har ingen nuværende foruddefineret karakteristik, der repræsenterer omgivende lys og RGB-farve. Derfor har jeg oprettet en brugerdefineret karakteristik for farveværdierne og tildelt den en universelt unik identifikator (UUID).

ifølge dokumentationen optages omgivende lys og RGB-farve som 16-bit værdier (et interval på 0-65, 535). Men ved hjælp af arduinoapds9960 biblioteket har jeg fundet omfanget af aflæsningerne inden for en rækkevidde på 0-4097. Uden at dykke ned i ukrudtet er den maksimale tælleværdi (eller mætningsværdi) variabel. Det kan beregnes ud fra integrationstiden og størrelsen af tælleregistret (f.eks. 16-bit). ADC-integrationstiden ser ud til at være indstillet til 10 ms i bibliotekets fil, Arduino_APDS9960.cpp.

RGB-værdier er typisk repræsenteret som 8-bit farve. Vi kunne konvertere værdierne til 8-bit, før vi sendte eller håndterede dem senere på Raspberry Pi IoT-porten. Af hensyn til demonstrationsformål versus dataoverførselseffektivitet sammenkæder skitsen 12-bit-værdierne sammen som en streng (f.eks. 4097,2811,1500,4097). Strengen konverteres fra 12-bit til 8-bit på Raspberry Pi (f.eks. 255,175,93,255).

forhåndsvisning og fejlfinding BLE Device Services

før vi ser på koden, der kører på Raspberry Pi, kan vi bruge et hvilket som helst antal mobilapplikationer til at forhåndsvise og debugge Miljøtjenesten, der kører på Arduino og annonceres over BLE. En almindeligt anbefalet applikation er Nordic Semiconductors nRF Connect Til Mobil, tilgængelig på Google Play. Jeg har fundet, at Android-versionen fungerer bedre til korrekt fortolkning og visning af GATT-karakteristiske værdier end iOS-versionen af appen.

nedenfor ser vi en scanning af min lokale nærhed for BLE-enheder, der annonceres, ved hjælp af Android-versionen af NRF Connect-mobilapplikationen. Bemærk BLE enhed, ArduinoNano33BLESense (angivet med rødt). Bemærk også medieadgangskontroladressen (MAC-adresse) for den BLE-enhed, i mit tilfælde d1:aa:89:0c:ee:82. MAC-adressen kræves senere på IoT-porten.

tilslutning til enheden ser vi tre tjenester. Miljøsensortjenesten (angivet med rødt) indeholder sensoraflæsningerne.

boring i Environmental Sensing Service (0h181a), ser vi de fire forventede egenskaber: temperatur (0h2a6e), Fugtighed (0h2a6f), Tryk (0h2a6d) og ukendt Karakteristik (936b6a25-e503–4f7c-9349-bcc76c22b8c3). Da NRF Connect ikke kan genkende farvesensoraflæsningen som en registreret GATT-Karakteristik (intet GATT-tildelt nummer), vises det som en ukendt egenskab. Mens temperatur, fugtighed og trykværdier (angivet med rødt) fortolkes og vises korrekt, efterlades farvesensoraflæsningen som rå sekskanttekst (f.eks. 30-2c-30-2c-30-2c-30-00 eller 0,0,0,0).

disse resultater viser, at alt fungerer som forventet.

BLE Client Python Code

for at fungere som BLE-klienten (aka central enhed) kører Raspberry Pi et Python-script. Scriptet, rasppi_ble_receiver.py, bruger bluepy Python-modulet til grænseflade med BLE-enheder via BLE.

for at køre Python-scriptet skal du udføre følgende kommando og erstatte Mac-adresseargumentet med din egen BLE-enheds annoncerede MAC-adresse.

python3 ./rasppi_ble_receiver.py d1:aa:89:0c:ee:82

i modsætning til NRF Connect-appen er bluepy Python-modulet ikke i stand til korrekt at fortolke og vise GATT-karakteristiske værdier. Derfor tager scriptet den rå, indkommende seksadecimale tekst fra Arduino og tvinger den til de korrekte værdier. For eksempel skal en temperaturaflæsning transformeres fra bytes, b'\xb8\x08\x00\x00', til et byte-array, bytearray(b'\xb8\x08\x00\x00'), derefter til et heltal, 2232, derefter til en decimal, 22.32 og endelig til Fahrenheit-skalaen, 72.18°F.

sensoraflæsninger hentes fra BLE-enheden hvert andet sekund. Ud over at vise de numeriske sensoraflæsninger viser Python-scriptet også en farveprøve af 8-bit RGB-farven samt en gråtoneprøve, der repræsenterer lysintensiteten ved hjælp af colr Python-modulet.

følgende skærmoptagelse viser en parallel visning af både Arduino Serial Monitor og Raspberry Pi ‘ s terminaludgang. Raspberry Pi (central enhed) opretter forbindelse til Arduino (perifer enhed), når Python-scriptet startes. Raspberry Pi læser og fortolker med succes telemetridataene fra Environmental Sensing Service.

konklusion

i dette indlæg undersøgte vi brugen af BLE og GATT-specifikationen til at transmittere miljøfølerdata fra en perifer enhed til en central enhed. I betragtning af dets lave energiforbrug og veludviklede profiler, såsom GATT, er Bluetooth lavenergi (BLE) en ideel trådløs protokol med kort rækkevidde til IoT-enheder.



+