aloittaminen Bluetooth Low Energy (BLE) – ja Generic Attribute Profile (GATT) – Spesifikaatioilla IoT: lle
Wikipedian mukaan Bluetooth on langaton teknologiastandardi, jota käytetään tiedon vaihtoon kiinteiden ja mobiililaitteiden välillä lyhyillä etäisyyksillä. Bluetooth Low Energy (Bluetooth LE tai BLE) on Bluetooth Special Interest Groupin (Bluetooth SIG) suunnittelema ja markkinoima wpan (Wireless personal area network) – tekniikka. Bluetooth SIG: n mukaan BLE on suunniteltu hyvin pienitehoiseen toimintaan. BLE tukee tiedonsiirtonopeuksia 125 Kb/s-2 Mb / s, ja useita tehotasoja 1 milliwatti (mW) – 100 mW. Useat keskeiset tekijät vaikuttavat luotettavan Bluetooth-yhteyden tehokkaaseen kantamaan, joka voi vaihdella kilometristä alle metriin. Uudemman sukupolven Bluetooth 5 tarjoaa teoreettisen 4x alueen parannus Bluetooth 4.2, noin 200 jalkaa (60 metriä) 800 jalkaa (240 metriä).
Wikipedia listaa tällä hetkellä 36 Bluetooth-profiilien määritelmää, jotka Bluetooth SIG on määrittänyt ja hyväksynyt, mukaan lukien geneerinen Attribuuttiprofiili (GATT). Mukaan Bluetooth SIG, GATT on rakennettu päälle Attribute Protocol (ATT) ja luo yhteiset toiminnot ja puitteet datan kuljetetaan ja varastoidaan, jonka ATT. GATT tarjoaa ble-protokollan profiilien haku-ja kuvauspalveluja. Siinä määritellään, miten ATT-attribuutit ryhmitellään joukoiksi palvelujen muodostamiseksi.
alhaisen energiankulutuksensa ja hyvin kehittyneiden profiiliensa, kuten Gattin, vuoksi BLE on ihanteellinen lyhyen kantaman langaton protokolla esineiden internetille (IoT) verrattuna kilpaileviin protokolliin, kuten ZigBee, Bluetooth classic ja Wi-Fi. Tässä viestissä tutkimme BLE: n ja GATT-spesifikaation käyttöä ympäristöanturidatan siirtämiseen IoT-sensorista IoT-yhdyskäytävään.
IoT-anturi
tässä viestissä käytämme Arduino-yksilevyistä mikrokontrolleria, joka toimii IoT-anturina, oikeastaan anturien joukkona. Elokuussa 2019 julkaistussa 3.3 V: n tekoälyä hyödyntävässä Arduino Nano 33 BLE Sense-kartongissa on tehokas Nordic Semiconductorsin nrf52840-suoritin, 64 MHz: n ARM Cortex-M4-suoritin, 1MB suorittimen Flash-muistia, 256KB SRAM-muistia ja NINA-b306 stand-alone Bluetooth 5 low energy-moduuli.
Sense sisältää myös vaikuttavan joukon upotettuja antureita:
- 9-akselin Inertiasensori (LSM9DS1): 3D-digitaalinen lineaarinen kiihtyvyysanturi, 3D-digitaalinen
kulmanopeusanturi ja 3D-digitaalinen magneettianturi - kosteus-ja lämpötila-anturi (HTS221): kapasitiivinen digitaalinen anturi suhteellista kosteutta ja lämpötilaa varten
- barometrinen anturi (LPS22HB): MEMS – nanopaineanturi: 260-1260 hectopascal (hPa) absoluuttinen digitaalinen ulostulobarometri
- mikrofoni (MP34DT05): MEMS audio sensor omnidirectional digital microphone
- ele, läheisyys, valon väri ja valon voimakkuus anturi (APDS9960): Advanced Ele havaitseminen, läheisyys havaitseminen, digitaalinen ympäristön Valoaisti (als), ja Väriaisti (Rgbc).
aisti on erinomainen, edullinen yksilevyinen Mikrokontrolleri, jolla voi oppia IoT-sensoridatan keräämistä ja välittämistä.
IoT Gateway
IoT Gateway on techtargetin mukaan fyysinen laite tai ohjelmisto, joka toimii pilvipalvelun ja ohjaimien, antureiden ja älylaitteiden yhteyspisteenä. Kaikki pilveen tai päinvastoin siirtyvä data kulkee yhdyskäytävän kautta, joka voi olla joko oma laite tai ohjelmisto.
tässä viestissä käytämme viime sukupolven Raspberry Pi 3-mallia B+ single-board computer (SBC), joka toimii IoT-porttina. Raspberry Pi-mallissa on 1,4 GHz Cortex-A53 (ARMv8) 64-bittinen neliydinprosessorijärjestelmä sirulla (SoC), 1 Gt LPDDR2 SDRAM, kaksikaistainen langaton LAN, Bluetooth 4.2 BLE ja Gigabit Ethernet.
seurataksesi postauksen mukana, voit korvata Raspberry Pi: n millä tahansa Linux-pohjaisella koneella, joka ajaa mukana tulevaa sample Python-skriptiä.
Arduino lähettää IoT-anturin telemetriaa Raspberry Piin. Vadelma Pi, käyttäen Wi-Fi tai Ethernet, pystyy sitten turvallisesti lähettää anturin telemetriatiedot pilveen. Bluetooth-terminologiassa Bluetooth-oheislaite (alias GATT-palvelin), joka on Arduino, välittää dataa Bluetooth-Keskuslaitteelle (alias GATT-asiakas), joka on Raspberry Pi.
Arduinon sketsi
niille, jotka eivät tunne Arduinoa, sketsi on nimi, jota Arduino käyttää ohjelmasta. Se on koodiyksikkö, joka ladataan haihtumattomaan flash-muistiin ja toimii Arduino-aluksella. Arduinon kieli on joukko C / C++ – funktioita. Kaikkien AVR-g++ – kääntäjän tukemien C-ja C++ – konstruktioiden tulisi toimia Arduinossa.
tähän virkaan sketsi, combo_sensor_ble.ino, sisältää kaikki tarvittavat koodit kerätä ympäristöanturin telemetria, mukaan lukien lämpötila, suhteellinen kosteus, ilmanpaine, ja ympäristön valo ja RGB väri. Kaikki tämän viestin koodi, mukaan lukien luonnos, löytyy GitHubista.
sense mainostaa sensorin telemetriaa BLE: n kautta GATT-Ympäristöhavaintopalveluna (GATT: n antama numero 0x181A), jolla on useita GATT-ominaisuuksia. Kukin ominaisuus edustaa anturin lukemaa ja sisältää kaikkein nykyisen anturin arvon(arvot), esimerkiksi lämpötilan (0x2A6E) tai kosteuden (0x2A6F).
jokainen GATT-ominaisuus määrittelee, miten tiedot esitetään. Jotta data edustaisi tarkasti, anturilukemia on muutettava. Esimerkiksi arduinohts221-kirjastolla lämpötila mitataan kahden desimaalin tarkkuudella (esim.22,21 °C). Lämpötilan GATT-ominaisuus (0x2A6E) vaatii kuitenkin allekirjoitetun 16-bittisen arvon (-32,768–32,767). Tarkkuuden säilyttämiseksi kaapattu arvo (esim.22,21 °C) kerrotaan 100: lla, jolloin se muunnetaan kokonaisluvuksi (esim. 2221). Vadelma Pi sitten käsitellä muuntaa arvo takaisin alkuperäiseen arvoon oikealla tarkkuudella.
GATT-spesifikaatiossa ei ole nykyistä ennalta määriteltyä ominaisuutta, joka edustaisi ympäristön valoa ja RGB-väriä. Siksi olen luonut väriarvoille mukautetun ominaisuuden ja antanut sille universaalisti yksilöllisen tunnisteen (UUID).
dokumentaation mukaan ympäristön valo ja RGB-väri on kuvattu 16-bittisinä arvoina (vaihteluväli 0-65,535). Arduinoapds9960-kirjastoa käyttäen olen kuitenkin havainnut lukemien asteikon olevan alueella 0-4097. Ilman sukellusta rikkaruohoihin, maksimi määrä (tai kylläisyys) arvo on vaihteleva. Se voidaan laskea integrointiajan ja laskentarekisterin koon (esim.16-bitit) perusteella. ADC-integrointiaika näyttää olevan 10 ms kirjaston tiedostossa, Arduino_APDS9960.cpp.
RGB-arvot esitetään tyypillisesti 8-bittisinä väreinä. Voisimme muuntaa arvot 8-bittinen ennen lähettämistä tai käsitellä sitä myöhemmin Vadelma Pi IoT Gateway. Demonstrointitarkoitusten ja tiedonsiirtotehokkuuden vuoksi luonnos yhdistää 12-bittiset arvot merkkijonoksi (esim. 4097,2811,1500,4097
). Merkkijono muunnetaan Raspberry Piin 12-bittisestä 8-bittiseksi (esim. 255,175,93,255
).
ble-Laitepalvelujen esikatselu ja virheenkorjaus
ennen kuin tarkastelemme Raspberry Pi: llä käynnissä olevaa koodia, voimme käyttää mitä tahansa mobiilisovelluksia Arduinolla toimivan ja BLE: n kautta mainostetun Environmental Sensing-palvelun esikatseluun ja virheenkorjaukseen. Yleisesti suositeltu sovellus on Nordic Semiconductorin NRF Connect for Mobile, joka on saatavilla Google Playsta. Olen löytänyt Android-versio toimii paremmin oikein tulkita ja näyttää GATT ominaisarvot kuin iOS-versio sovelluksesta.
alla näkyy mainostettavan BLE-laitteiden lähialueeni skannaus, jossa käytetään NRF Connect-mobiilisovelluksen Android-versiota. Huomaa BLE laite, ArduinoNano33BLESense (merkitty punaisella). Huomaa myös kyseisen BLE-laitteen media access control-osoite (MAC-osoite), minun tapauksessani d1:aa:89:0c:ee:82
. MAC-osoite vaaditaan myöhemmin IoT Gateway.
yhteyden laitteeseen, näemme kolme palvelua. Environmental Sensing Service (merkitty punaisella) sisältää anturilukemat.
poraus alas Environmental Sensing Service (0x181A), näemme neljä odotettavissa ominaisuudet: lämpötila (0x2A6E), Kosteus (0x2A6F), paine (0x2A6D), ja tuntematon ominaisuus (936b6a25-e503–4f7c-9349-bcc76c22b8c3). Koska NRF Connect ei voi tunnistaa värianturin lukemaa rekisteröidyksi GATT-ominaisuudeksi (ei GATT-numeroa), se näkyy tuntemattomana ominaisuutena. Siinä missä lämpötila -, kosteus-ja painearvot (merkitty punaisella) tulkitaan ja näytetään oikein, värianturin lukema jää raa ’ aksi heksadesimaaliseksi tekstiksi (esim. 30-2c-30-2c-30-2c-30-00
tai 0,0,0,0
).
tulokset kertovat, että kaikki toimii odotetusti.
BLE Client Python-koodi
toimiakseen BLE-asiakkaana (eli keskuslaitteena) Raspberry Pi käyttää Python-skriptiä. Käsikirjoitus, rasppi_ble_receiver.py, käyttää bluepy Python-moduulia BLE-laitteiden yhdistämiseen Bluezin kautta Linuxissa.
voit suorittaa Python-komentosarjan suorittamalla seuraavan komennon, joka korvaa MAC-osoiteargumentin Oman BLE-laitteesi mainostetulle MAC-osoitteelle.
python3 ./rasppi_ble_receiver.py d1:aa:89:0c:ee:82
toisin kuin NRF Connect-sovellus, bluepy Python-moduuli ei pysty tulkitsemaan ja näyttämään GATT-Ominaisarvoja oikein. Siksi käsikirjoitus ottaa arduinosta raa ’ an, saapuvan heksadesimaalisen tekstin ja pakottaa sen oikeisiin arvoihin. Esimerkiksi lämpötilalukema on muunnettava tavuista, b'\xb8\x08\x00\x00'
, tavujoukkoon, bytearray(b'\xb8\x08\x00\x00')
, sitten kokonaislukuun, 2232
, sitten desimaalilukuun, 22.32
, ja lopuksi Fahrenheit-asteikkoon, 72.18°F
.
Sensorilukemat haetaan BLE-laitteesta kahden sekunnin välein. Numeeristen sensorilukemien näyttämisen lisäksi Python-skripti näyttää myös 8-bittisen RGB-värin värimomentin sekä valon voimakkuutta kuvaavan harmaasävymomentin colr Python-moduulin avulla.
seuraava näytön tallennus näyttää rinnakkaisen näkymän sekä Arduino Sarjamonitorin että Raspberry Pi: n terminaalilähdön. Raspberry Pi (keskuslaite) kytkeytyy Arduino (oheislaite) kun Python script käynnistetään. Raspberry Pi lukee ja tulkitsee onnistuneesti Environmental Sensing-palvelun telemetriatietoja.
päätelmä
tässä viestissä selvitimme BLE: n ja GATT: n spesifikaation käyttöä ympäristöanturitietojen välittämiseen oheislaitteesta keskuslaitteeseen. Alhaisen energiankulutuksensa ja hyvin kehittyneiden profiiliensa, kuten Gattin, vuoksi Bluetooth Low Energy (BLE) on ihanteellinen lyhyen kantaman langaton protokolla IoT-laitteille.