začínáme s Bluetooth Low Energy (BLE) a Generic Attribute Profile (GATT) Specifikace pro internet Věcí
Podle Wikipedie, Bluetooth je standard bezdrátové technologie používané pro výměnu dat mezi pevnými a mobilními zařízeními na krátké vzdálenosti. Bluetooth Low Energy (Bluetooth LE nebo BLE) je bezdrátová technologie osobní sítě (WPAN) navržená a prodávaná skupinou Bluetooth Special Interest Group (Bluetooth SIG). Podle Bluetooth SIG je BLE navržen pro provoz s velmi nízkým výkonem. BLE podporuje rychlost přenosu dat od 125 Kb / s do 2 Mb / s, s více úrovněmi výkonu od 1 miliwatt (mW) do 100 mW. Několik klíčových faktorů ovlivňuje efektivní dosah spolehlivého připojení Bluetooth,které se může lišit od kilometru až po méně než metr. Novější generace Bluetooth 5 poskytuje teoretické vylepšení dosahu 4x přes Bluetooth 4.2, od přibližně 200 stop (60 metrů) po 800 stop (240 metrů).
Wikipedia v současné době uvádí 36 definic profilů Bluetooth definovaných a přijatých Bluetooth SIG, včetně SPECIFIKACE Generic Attribute Profile (GATT). Podle Bluetooth SIG je GATT postaven na vrcholu Atributového protokolu (ATT) a zavádí společné operace a rámec pro data přenášená a uložená ATT. GATT poskytuje služby zjišťování a popisu profilů pro protokol BLE. Definuje, jak jsou atributy ATT seskupeny do sad a vytvářejí služby.
Vzhledem k jeho nízké spotřebě energie a dobře vyvinuté profily, jako je GATT, BLE je ideální short-range bezdrátový protokol pro Internet Věcí (IoT) zařízení, když ve srovnání s konkurenčními protokoly, jako jsou ZigBee, Bluetooth classic, a Wi-Fi. V tomto příspěvku prozkoumáme použití BLE a specifikace GATT pro přenos dat senzoru prostředí ze senzoru IoT do brány IoT.
IoT senzor
v tomto příspěvku použijeme Jednořadový mikrokontrolér Arduino, který bude sloužit jako IoT senzor, vlastně pole senzorů. 3.3 V AI-povoleno Arduino Nano 33 BLE Smysl deska, vydáno v srpnu 2019, přichází s výkonným nRF52840 procesor od Nordic Semiconductors, 32-bit ARM Cortex-M4 CPU běží na 64 MHz, 1 MB, CPU, Paměti Flash, 256 KB SRAM, a NINA-B306 stand-alone Bluetooth 5 low energy module.
Pocit také obsahuje impozantní řadu vestavěných senzorů:
- 9-osy Inerciálních čidel (LSM9DS1): 3D digitální lineární snímače zrychlení, 3D digitální
úhlové snímače, a 3D digitální magnetický senzor - Vlhkosti a Teploty Čidla (HTS221): Kapacitní digitální snímač relativní vlhkosti a teploty
- Barometrický Senzor (LPS22HB): MEMS nano snímač tlaku: 260-1260 hectopascal (hPa) absolutní digitální výstup barometr
- Mikrofon (MP34DT05): MEMS audio sensor všesměrový digitální mikrofon
- Gesto, Blízkost, Světlo, Barva a Intenzita Světla Senzor (APDS9960): Pokročilé Gesto detekce, Vzdálenost detekce, Digitální Okolního Světla Smyslu (ALS), a Smysl pro Barvu (RGBC).
Sense je vynikající, levný Jednořadový mikrokontrolér pro učení o sběru a přenosu dat ze senzorů IoT.
IoT Gateway
IoT Gateway, podle TechTarget, je fyzické zařízení nebo software program, který slouží jako spojovací bod mezi Cloud a regulátory, senzory a inteligentními zařízeními. Všechna data se stěhují do cloudu, nebo naopak prochází bránou, která může být buď vyhrazeným hardwarovým zařízením nebo softwarovým programem.
V tomto příspěvku, budeme používat poslední generace Raspberry Pi 3 Model B+ single-board computer (SBC), který má sloužit jako IoT Brána. To Raspberry Pi model je vybaven 1,4 GHz Cortex-A53 (ARMv8), 64-bit quad-core procesor, Systém na Čipu (SoC), 1GB LPDDR2 SDRAM, dual-band bezdrátové sítě LAN, Bluetooth 4.2 NFC, a Gigabit Ethernet.
Chcete-li sledovat spolu s příspěvkem, můžete nahradit Raspberry Pi pro jakýkoli počítač založený na Linuxu a spustit přiložený ukázkový skript Python.
Arduino se bude přenášet Spoustu senzorů telemetrie, přes BLE na Raspberry Pi. Raspberry Pi, pomocí Wi-Fi nebo Ethernetu, je pak schopen bezpečně přenášet telemetrická data senzoru do cloudu. V terminologii Bluetooth bude periferní zařízení Bluetooth (aka GATT Server), což je Arduino, přenášet data do centrálního zařízení Bluetooth (aka GATT Client), což je Raspberry Pi.
Arduino Sketch
Pro ty, kteří nejsou obeznámeni s Arduino, skici je název Arduino se používá pro program. Jedná se o jednotku kódu, která je nahrána do energeticky nezávislé flash paměti a běží na desce Arduino. Jazyk Arduino je sada funkcí c/c++. Všechny standardní konstrukce C A C++ podporované kompilátorem avr-g++ by měly fungovat v Arduinu.
pro tento příspěvek, skica, combo_sensor_ble.ino, obsahuje vše potřebné k sbírat životního snímače telemetrie, včetně teploty, relativní vlhkosti, barometrického tlaku, okolního světla a RGB barvy. Veškerý kód pro tento příspěvek, včetně náčrtu, najdete na Githubu.
telemetrie senzoru bude inzerována Sense, přes BLE, jako GATT Environmental Sensing Service (GATT přidělené číslo 0x181A) s více charakteristikami GATT. Každá charakteristika představuje čtení senzoru a obsahuje nejaktuálnější hodnoty senzoru,například teplotu (0x2A6E) nebo Vlhkost (0x2A6F).
každá charakteristika GATT definuje, jak mají být data reprezentována. Pro přesné znázornění dat je třeba upravit hodnoty senzorů. Například pomocí knihovny ArduinoHTS221 je teplota zachycena s přesností na dvě desetinná místa (např. Nicméně charakteristika teploty GATT (0x2A6E) vyžaduje podepsanou 16bitovou hodnotu (- 32,768-32,767). Pro zachování přesnosti se zachycená hodnota (např. 22,21 °C) vynásobí číslem 100 a převede se na celé číslo (např. 2221). Raspberry Pi pak zvládne převod hodnoty zpět na původní hodnotu se správnou přesností.
SPECIFIKACE GATT nemá žádnou aktuální předdefinovanou charakteristiku představující okolní světlo a barvu RGB. Proto jsem pro hodnoty barev vytvořil vlastní charakteristiku a přiřadil jí univerzálně jedinečný identifikátor (UUID).
podle dokumentace jsou okolní světlo a barva RGB zachyceny jako 16bitové hodnoty(rozsah 0-65, 535). Pomocí knihovny ArduinoAPDS9960 jsem však zjistil, že měřítko hodnot je v rozmezí 0-4097. Bez ponoření do plevele je maximální hodnota počtu (nebo nasycení) proměnná. Lze jej vypočítat na základě doby integrace a velikosti registru počtu (např. 16 bitů). Zdá se, že doba integrace ADC je nastavena na 10 ms v souboru knihovny, Arduino_APDS9960.cpp.
hodnoty RGB jsou obvykle reprezentovány jako 8bitová barva. Mohli bychom převést hodnoty na 8-bit před odesláním nebo zpracovat později na Raspberry Pi IoT Gateway. Pro účely demonstrace versus efektivita přenosu dat skica spojuje 12bitové hodnoty dohromady jako řetězec (např. 4097,2811,1500,4097
). Řetězec bude převeden z 12-bit na 8-bit na Raspberry Pi (např. 255,175,93,255
).
zobrazení Náhledu a Ladění BLE Zařízení Služeb
Než se podíváme na kód běžící na Raspberry Pi, můžeme použít libovolný počet mobilních aplikací pro zobrazení náhledu a ladění Prostředí Snímání služba běží na Arduino a je inzerován přes BLE. Běžně doporučená aplikace je Nordic Semiconductor NRF Connect pro mobily, k dispozici na Google Play. Zjistil jsem, že verze pro Android funguje lépe při správné interpretaci a zobrazování charakteristických hodnot GATT než verze aplikace pro iOS.
níže vidíme skenování mého místního okolí pro inzerovaná zařízení BLE pomocí Android verze mobilní aplikace NRF Connect. Všimněte si zařízení BLE, ArduinoNano33BLESense(označené červeně). Všimněte si také adresy řízení přístupu k médiím (MAC adresa) tohoto zařízení BLE, v mém případě d1:aa:89:0c:ee:82
. MAC adresa bude vyžadována později na bráně IoT.
Připojení k zařízení, vidíme tři Služby. Služba snímání životního prostředí (označená červeně) obsahuje hodnoty senzorů.
Vrtání dolů do Životního prostředí Snímání Služby (0x181A), vidíme čtyři očekávané Vlastnosti: Teplota (0x2A6E), Vlhkost (0x2A6F), Tlak (0x2A6D), a Neznámý Charakteristika (936b6a25-e503–4f7c-9349-bcc76c22b8c3). Protože NRF Connect nemůže rozpoznat čtení barevného senzoru jako registrovanou charakteristiku GATT (bez přiřazeného čísla GATT), zobrazí se jako neznámá charakteristika. Zatímco hodnoty teploty, vlhkosti a tlaku (označené červeně) jsou interpretovány a zobrazeny správně, hodnota barevného senzoru je ponechána jako syrový hexadecimální text (např. 30-2c-30-2c-30-2c-30-00
nebo 0,0,0,0
).
tyto výsledky naznačují, že vše funguje podle očekávání.
ble klient Python kód
Chcete-li působit jako klient BLE (aka centrální zařízení), Raspberry Pi spustí Python skript. Skript, rasppi_ble_receiver.PY, používá modul bluepy Python pro propojení se zařízeními BLE přes Bluez, na Linuxu.
spustit Python skript, spusťte následující příkaz, nahrazení MAC adresa argument pro své vlastní BLE zařízení inzerované MAC adresu.
python3 ./rasppi_ble_receiver.py d1:aa:89:0c:ee:82
na rozdíl od aplikace NRF Connect modul bluepy Python není schopen správně interpretovat a zobrazovat Charakteristické hodnoty GATT. Proto skript vezme surový, příchozí hexadecimální text z Arduina a přiměje jej ke správným hodnotám. Například, čtení teploty, musí být transformována z bajtů, b'\xb8\x08\x00\x00'
, do bajtové pole, bytearray(b'\xb8\x08\x00\x00')
, pak celé číslo, 2232
, pak na desetinné číslo, 22.32
, a konečně na Celsia měřítku, 72.18°F
.
odečty senzorů jsou ze zařízení BLE načteny každé dvě sekundy. Kromě zobrazení číselných hodnot senzorů, skript Python také zobrazuje barevný vzorník 8bitové barvy RGB, stejně jako vzorník ve stupních šedi představující intenzitu světla pomocí modulu Colr Python.
následující nahrávání obrazovky ukazuje paralelní výhled jak na Arduino Serial Monitor a Raspberry Pi je výstup na terminál. Raspberry Pi (centrální zařízení) se připojí k Arduino (periferní zařízení) při spuštění skriptu Python. Raspberry Pi úspěšně čte a interpretuje telemetrická data ze služby Environmental Sensing Service.
Závěr
V tomto příspěvku jsme se zabývali použití BLE a GATT specifikace přenášet životního snímač dat z periferního zařízení do centrálního zařízení. Vzhledem k nízké spotřebě energie a dobře vyvinutým profilům, jako je GATT, je Bluetooth Low Energy (BLE)ideálním bezdrátovým protokolem krátkého dosahu pro zařízení IoT.