ble og GATT For IoT

Lydversjon av innlegget

Ifølge Wikipedia Er Bluetooth en trådløs teknologistandard som brukes til å utveksle data mellom faste og mobile enheter over korte avstander. Bluetooth Low Energy (Bluetooth LE eller Ble) er en trådløs personal area network (wpan) teknologi designet og markedsført Av Bluetooth Special Interest Group (Bluetooth SIG). Ifølge Bluetooth SIG er BLE designet for svært lav strømdrift. Ble støtter datahastigheter fra 125 Kb / s til 2 Mb / s, med flere effektnivåer fra 1 milliwatt (mW) til 100 mW. Flere viktige faktorer påvirker det effektive området for en pålitelig Bluetooth-tilkobling, som kan variere fra en kilometer ned til mindre enn en meter. Den nyere generasjonen Bluetooth 5 gir en teoretisk 4x rekkevidde forbedring Over Bluetooth 4.2, fra ca 200 fot (60 meter) til 800 fot (240 meter).

Wikipedia viser for tiden 36 definisjoner Av Bluetooth-profiler definert og vedtatt Av Bluetooth SIG, inkludert Generic Attribute Profile (GATT) – Spesifikasjonen. Ifølge Bluetooth SIG er GATT bygget på Toppen Av Attributtprotokollen (Att) og etablerer felles operasjoner og et rammeverk for dataene som transporteres og lagres av ATT. GATT tilbyr profiloppdagelse og beskrivelsestjenester FOR ble-protokollen. Det definerer hvordan att-attributter grupperes sammen i sett for å danne tjenester.

GITT sitt lave energiforbruk og velutviklede profiler, SOM GATT, ER BLE en ideell kortdistanse trådløs protokoll for Tingenes Internett (Iot) – enheter, sammenlignet med konkurrerende protokoller, Som ZigBee, Bluetooth classic og Wi-Fi. I dette innlegget vil vi utforske bruken AV BLE og gatt-spesifikasjonen for å overføre miljøsensordata fra en Iot-Sensor til En Iot-Gateway.

IoT Sensor

i dette innlegget vil Vi bruke En Arduino single-board mikrokontroller for å tjene som En Iot sensor, faktisk en rekke sensorer. Den 3.3 V AI-aktiverte Arduino Nano 33 Ble Sense board, utgitt i August 2019, kommer med den kraftige nRF52840 prosessoren Fra Nordic Semiconductors, en 32-bit ARM Cortex-M4 CPU som kjører på 64 MHz, 1MB CPU Flashminne, 256KB SRAM og EN NINA-B306 frittstående Bluetooth 5 low energy module.

Arduino Nano 33 Ble Sense (med overskrifter) på brødfjel

Sense inneholder også et imponerende utvalg av innebygde sensorer:

  • 9-axis Inertial Sensor (LSM9DS1): 3d digital lineær akselerasjonssensor, en 3d digital
    vinkelhastighetssensor og EN 3d digital magnetisk sensor
  • Fuktighet Og Temperatursensor (HTS221): Kapasitiv digital sensor for relativ fuktighet og temperatur
  • Barometrisk Sensor (LPS22HB): MEMS nano trykksensor: 260-1260 hektopascal (hPa) absolutt digital output barometer
  • Mikrofon (MP34DT05): MEMS audio sensor rundstrålende digital mikrofon
  • Gest, Nærhet, Lys Farge, Og Lysintensitet Sensor (APDS9960): Avansert Gest deteksjon, Nærhet deteksjon, Digital Ambient Light Sense (ALS), Og Color Sense (Rgbc).

Sense Er en utmerket, rimelig enkeltkort mikrokontroller for å lære om innsamling og overføring av iot-sensordata.

Iot Gateway

En Iot Gateway, ifølge TechTarget, er en fysisk enhet eller programvare som fungerer som tilkoblingspunkt mellom Skyen og kontrollere, sensorer og intelligente enheter. Alle data som beveger Seg til Skyen, eller omvendt, går gjennom gatewayen, som enten kan være et dedikert maskinvareapparat eller et program.

I dette innlegget vil vi bruke En ny generasjon Raspberry Pi 3 Model B + single-board computer (sbc), for å tjene som En Iot Gateway. Denne Raspberry Pi-modellen har Et 1,4 GHz Cortex-A53 (ARMv8) 64-bits firekjerners prosessorsystem på En Chip (SoC), 1 GB LPDDR2 SDRAM, dual-band trådløst LAN, Bluetooth 4.2 Ble og Gigabit Ethernet.

for å følge med innlegget, kan du erstatte Raspberry Pi for En Hvilken Som Helst Linux – basert maskin for å kjøre Det medfølgende python-skriptet.

Raspberry Pi 3 Modell B+

Arduino vil overføre iot sensor telemetri, over ble, Til Raspberry Pi. Raspberry Pi, ved Hjelp Av Wi-Fi eller Ethernet, kan da sikkert overføre sensortelemetridataene til Skyen. I Bluetooth-terminologi vil Bluetooth-Periferienheten (aka GATT-Serveren), Som Er Arduino, overføre data til Bluetooth-Sentralenheten (aka GATT-Klienten), Som Er Raspberry Pi.

Arduino Sketch

for de som ikke er kjent Med Arduino, er en skisse Navnet Som Arduino bruker for et program. Det er kodeenheten som lastes opp til ikke-flyktig flashminne og kjører På Et Arduino-brett. Arduino-språket er et sett Med c / C++ – funksjoner. Alle standard c og C++ konstruksjoner som støttes av avr-g++ kompilatoren skal fungere I Arduino.

for dette innlegget, skissen, combo_sensor_ble.ino, inneholder all koden som er nødvendig for å samle miljøsensortelemetri, inkludert temperatur, relativ fuktighet, barometertrykk og omgivende lys og RGB-farge. All kode for dette innlegget, inkludert skissen, finnes pa GitHub.

sensortelemetrien vil bli annonsert av Sense, over BLE, som EN Gatt Miljo Sensing Service (GATT Tildelt Nummer 0x181A) med flere gatt Egenskaper. Hver Karakteristikk representerer en sensoravlesning og inneholder den nyeste sensorverdien( e), For Eksempel Temperatur (0x2A6E) eller Fuktighet (0x2A6F).

hver Gatt-Karakteristikk definerer hvordan dataene skal representeres. For å representere dataene nøyaktig, må sensoravlesningene endres. Hvis Du for Eksempel bruker arduinohts221-biblioteket, registreres temperaturen med to desimaler med presisjon(f. eks. 22.21 °C). Imidlertid Krever Temperaturen Gatt Karakteristisk (0x2A6E) en signert 16-biters verdi (- 32,768–32,767). For å opprettholde presisjonen multipliseres den fangede verdien (f. eks. 22,21 °C) med 100 for å konvertere den til et heltall (f.eks. 2221). Raspberry Pi vil da håndtere å konvertere verdien tilbake til den opprinnelige verdien med riktig presisjon.

gatt-spesifikasjonen har ingen nåværende forhåndsdefinert Egenskap som representerer omgivelseslys og RGB-farge. Derfor har jeg opprettet en tilpasset Karakteristikk for fargeverdiene og tildelt den en universelt unik identifikator (UUID).

ifølge dokumentasjonen er omgivelseslys og RGB-farge fanget som 16-bits verdier (et område på 0-65, 535). Men ved Hjelp Av arduinoapds9960-biblioteket har jeg funnet skalaen til avlesningene innenfor et område på 0-4097. Uten å dykke inn i ugresset, er maksimal telle (eller metning) verdi variabel. Det kan beregnes basert på integrasjonstiden og størrelsen på telleregisteret (f.eks. 16-bits). ADC-integrasjonstiden ser ut til å være satt til 10 ms I bibliotekets fil, Arduino_APDS9960.cpp.

rgb-verdier er vanligvis representert som 8-biters farge. Vi kan konvertere verdiene til 8-bit før du sender eller håndterer den senere På Raspberry Pi Iot Gateway. For demonstrasjonsformål versus dataoverføringseffektivitet setter skissen sammen 12-bitverdiene sammen som en streng (f.eks. 4097,2811,1500,4097). Strengen vil bli konvertert fra 12-bit til 8-bit På Raspberry Pi (f.eks. 255,175,93,255).

Forhåndsvisning OG Feilsøking Ble Device Services

før du ser på koden som kjører På Raspberry Pi, kan vi bruke et hvilket som helst antall mobile applikasjoner for å forhåndsvise Og feilsøke Miljøfølingstjenesten som kjører På Arduino og blir annonsert over Ble. Et vanlig anbefalt program Er Nordic Semiconductor nRF Connect For Mobile, tilgjengelig På Google Play. Jeg har funnet At Android-versjonen fungerer bedre til korrekt tolkning og visning AV Gatt Karakteristiske verdier enn iOS-versjonen av appen.

Nedenfor ser vi en skanning av min lokale nærhet for ble-enheter som blir annonsert, ved Hjelp Av Android-versjonen av nRF Connect – mobilapplikasjonen. Legg merke til ble-enheten, ArduinoNano33BLESense (angitt i rødt). Merk også medietilgangskontrolladressen (MAC-adressen) til den ble-enheten, i mitt tilfelle d1:aa:89:0c:ee:82. MAC-adressen vil bli påkrevd senere på Iot-Gatewayen.

Koble til enheten, vi ser tre Tjenester. Miljøavlesningstjenesten (angitt i rødt) inneholder sensoravlesningene.

Boring ned I Miljøfølingstjenesten (0x181A) ser vi de fire forventede Egenskapene: Temperatur( 0x2A6E), Fuktighet (0x2A6F), Trykk (0x2a6d) Og Ukjent Karakteristikk (936b6a25-e503–4f7c-9349-bcc76c22b8c3). Siden nRF Connect ikke kan gjenkjenne fargesensoravlesningen som en registrert Gatt-Karakteristikk( ingen Gatt-Tildelt Nummer), vises den Som En Ukjent Karakteristikk. Mens temperatur, fuktighet og trykkverdier (angitt i rødt) tolkes og vises riktig, er fargesensoravlesningen igjen som rå heksadesimal tekst (f.eks. 30-2c-30-2c-30-2c-30-00 eller 0,0,0,0).

Disse resultatene indikerer at alt fungerer som forventet.

Ble Client Python Code

For å fungere SOM Ble-Klienten (aka sentral enhet), Kjører Raspberry Pi Et Python-skript. Skriptet, rasppi_ble_receiver.py, bruker bluepy Python-modulen for grensesnitt MED ble-enheter gjennom Bluez, På Linux.

for å kjøre Python-skriptet, utfør følgende kommando, og erstatt MAC-adresseargumentet for din EGEN ble-enhetens annonserte MAC-adresse.

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

I Motsetning til nRF Connect-appen, er bluepy Python-modulen ikke i stand til å tolke og vise Gatt-Karakteristiske verdier riktig. Derfor tar skriptet den rå, innkommende heksadesimale teksten Fra Arduino og tvinger den til de riktige verdiene. For eksempel må en temperaturavlesning transformeres fra byte, b'\xb8\x08\x00\x00' , til en byte-matrise, bytearray(b'\xb8\x08\x00\x00'), deretter til et heltall, 2232, deretter til et desimal, 22.32 og til Slutt Til Fahrenheit-skalaen, 72.18°F.

Sensoravlesninger hentes fra ble-enheten hvert annet sekund. I Tillegg til å vise de numeriske sensoravlesningene, Viser Python-skriptet også en fargeprøve av 8-biters RGB-farge, samt en gråtoneprøve som representerer lysintensiteten ved hjelp av colr Python-modulen.

følgende skjermopptak viser en parallell visning av Både Arduino Serial Monitor og Raspberry Pi ‘ s terminalutgang. Raspberry Pi (sentral enhet) kobles til Arduino (perifer enhet) når Python-skriptet startes. Raspberry Pi leser og tolker telemetridataene fra Environmental Sensing Service.

Konklusjon

i dette innlegget utforsket vi bruken AV BLE og gatt-spesifikasjonen for å overføre miljøsensordata fra en perifer enhet til en sentral enhet. Gitt det lave energiforbruket og velutviklede profiler, FOR EKSEMPEL GATT, Er Bluetooth Low Energy (Ble) en ideell kort rekkevidde trådløs protokoll for iot-enheter.



+