Obsah:

Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi: 9 kroků (s obrázky)
Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi: 9 kroků (s obrázky)

Video: Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi: 9 kroků (s obrázky)

Video: Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi: 9 kroků (s obrázky)
Video: Высокая плотность 2022 2024, Listopad
Anonim
Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi

Tento návod je o tom, jak sestavit víceuzlový systém monitorování teploty s chybou senzoru Bluetooth LE od Blue Radios (BLEHome) a RaspberryPi 3B Díky vývoji standardu Bluetooth LE jsou nyní na trhu snadno dostupné bezdrátové senzory s nízkým výkonem za velmi nízké náklady a může běžet na jedné knoflíkové buňce měsíce najednou. Jeden z těchto senzorů, které jsem zvedl, pochází z Blue Radio s názvem Sensor Bugs. Stojí to asi 25 dolarů na Amazonu, jedná se o zařízení Bluetooth LE s teplotním senzorem, světelným senzorem a akcerometrem, které jsou zabudovány do malé jednotky, která může bezdrátově komunikovat. To je perfektní zápas pro Raspberry Pi 3B, který má vestavěnou podporu pro rádio Bluetooth LE.

Krok 1: Nastavení Raspberry Pi

Prvním krokem je získat funkční nastavení Raspberry Pi. Postupujte podle pokynů na webových stránkách Raspberry Pi, nahrajte Raspbian na SD kartu, vložte do Raspberry Pi a spusťte jej. Nastavil jsem svůj systém s verzí Raspbian Stretch Lite (bez GUI), listopad 2017. V případě potřeby nastavte WiFi, raději upravím časové pásmo do aktuálního časového pásma místo UTC. Můžete to provést pomocí příkazu: $ sudo dpkg-reconfigure tzdataRest instrukce předpokládá, že se nastavení provádí pomocí rozhraní příkazového řádku.

Krok 2: Nastavení MySQL na Raspberry Pi

Je užitečné mít lokálně nainstalovanou databázi pro ukládání všech zachycených dat. Instalace MySQL na Raspberry Pi je velmi snadná. Rovněž není obtížné upravit skript pro externí připojení k serveru SQL, tento krok můžete přeskočit, pokud chcete v síti používat server SQL. Na internetu je mnoho pokynů, doporučuji toto: https:// www.stewright.me/2014/06/tutorial-install-…

Jakmile je SQL server nainstalován, můžete pomocí klienta MySQL CLI vytvořit uživatele, databázi a tabulku. Chcete -li zadat MySQL CLI, použijte příkaz:

$ sudo mysql -uroot -p Nejprve vytvořte lokálního uživatele pro vkládání zachycených dat:> VYTVOŘIT UŽIVATELE 'datasrc'@'localhost' IDENTIFIKOVANÉ podle 'datasrc000'; Dále vytvořte databázi a tabulku:> VYTVOŘIT DATABÁZI SensorBug; Nastavení uživatele oprávnění:> UDĚLIT VŠECHNY PRIVILEGY NA SensorBug.* TO 'datasrc'@'localhost'; Nyní přidejte do databáze novou tabulku. Pro tento příklad přidám tabulku s následujícími sloupci: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE a ACCEROMETER

  • DATE/TIME - Toto je datum a čas záznamu dat
  • ADDRESS - Toto je MAC SensorBug, ze kterého je zpráva zachycena
  • LOKALITA - Řetězec čitelný pro člověka, který udává, kde se senzor nachází
  • TEPLOTA - Toto je zaznamenaná teplota
  • ACCELE - Toto je hodnota výstupu akcelerometru, užitečná pro záznam polohy senzoru (pokud je povolena)

Příkaz, který to provede, je:> USE SensorBug; > CREATE TABLE data (date DATE, time TIME, address TINYTEXT, location TINYTEXT, temperature FLOAT, accele INT); Nyní je databáze připravena, můžeme přejít k nastavení sensorBugs.

Krok 3: Nastavení SensorBugs

Chyby senzoru jsou docela úhledná malá zařízení. Výrobce bohužel poskytl pouze aplikaci IOS pro její programování. Přesto je možné s ním pracovat, i když máte pouze zařízení Android. Nejprve spárujte zařízení s telefonem. Bez spárování zařízení nebude SensorBug inzerovat data. Zkoušel jsem zjistit, zda to mohu udělat přímo s RaspberryPi, bohužel se zdá, že ovladač Bluetooth LE na RaspberryPi je stále experimentální a obsahuje chyby, které zabraňují jeho párování se zařízeními Bluetooth LE. Budoucí verze ovladače blueZ by to mohla napravit, ale podle současného psaní neexistuje způsob, jak spárovat SensorBug s RaspberryPi. Naštěstí nepotřebujeme spárovat zařízení, abychom zachytili jeho inzerovaná data. Jediná věc, kterou potřebujeme, je telefon pro konfiguraci SensorBug. Ve výchozím nastavení začne SensorBug inzerovat údaje o teplotě v intervalu 1 s po spárování se zařízením. Pro data o teplotě zachycení je to vše, co je potřeba. Pokud plánujete rozšířit použití snímače polohy nebo světla, bude potřeba zařízení než konfigurace. Pro začátek zařízení spárujeme a odpojíme. To bude stačit pro účely měření teploty. Začněte stisknutím obou tlačítek na SensorBug. Modrá/zelená LED bliká, což znamená, že je zapnuto. Stiskněte jedno z tlačítek, zelená LED by se měla rozsvítit, což znamená, že je zapnuto napájení. Pokud zelená LED nesvítí, zkuste zařízení znovu zapnout stisknutím obou tlačítek. Stiskněte a podržte jedno z tlačítek, dokud nezačne blikat modrá LED. Tím se zařízení přepne do režimu párování. Přejděte do konfigurační nabídky Bluetooth v telefonu a vyhledejte zařízení SensorBug. Jakmile se zobrazí, vyberte jej pro spárování se zařízením. To je vše, nyní je SensorBug napájen a inzeruje údaje o teplotě

Krok 4: Instalace Bluetooth LE Python Wrapper

Dále musíme nainstalovat knihovnu, aby python mohl komunikovat se zásobníkem Bluetooth LE. Pokyny najdete zde: https://github.com/IanHarvey/bluepyFor Python 2.7 je stejně jednoduchý jako zadávání následujících příkazů:

$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy

Krok 5: Naskenujte a zjistěte adresu SensorBug

Chcete -li zjistit MAC adresu SensorBug, použijte tento příkaz: $ sudo hcitool lescan Měli byste vidět výstup jako:

EC: FE: 7E: 10: B1: 92 (neznámé) Pokud máte kolem sebe mnoho bluetooth LE zařízení, může být těžké zjistit, se kterým mluvíte. Můžete zkusit bluetoothctl, který poskytne další podrobnosti:

$ sudo bluetoothctl [bluetooth]# skenování na [NOVÉ] Zařízení EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Klíč: 0x0085 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 ValueData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota údajů výrobce: 0x25 [CHG] Hodnota zařízení EC: FE: 7E: 10: B1: 92 Hodnota dat výrobce: 0x09 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota údajů výrobce: 0x41 [CHG] Hodnota EC zařízení: FE: 7E: 10: B1: 92 Hodnota data výrobce: 0x02 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota dat výrobce: 0x02 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Hodnota: 0x43 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Hodnota: 0x0b [CHG] Zařízení EC: FE: 7E: 10: B1: 92 ManufacturerData Hodnota: 0x01 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota výrobce: 0x6f

Zaznamenejte si MAC adresu, kterou bude nutné zadat do skriptu pythonu, abyste mohli odfiltrovat nechtěná zařízení Bluetooth LE

Krok 6: Přidejte skript Python

Kopie skriptu Pythonu je k dispozici na adrese:

drive.google.com/open?id=10vOeEAbS7mi_eXn_…

Zde je stejný soubor, při kopírování dbejte na odsazení:

Aktualizujte také adresu MAC v souboru python, aby odpovídala adrese senzoru získané z výsledku skenování.

# Tento program je svobodný software: můžete jej dále distribuovat a/nebo upravovat

# to za podmínek obecné veřejné licence GNU, jak ji zveřejnil

# Free Software Foundation, buď verze 3 licence, nebo

# (podle vašeho výběru) jakákoli novější verze.

#

# Tento program je distribuován v naději, že bude užitečný, # ale BEZ JAKÉKOLI ZÁRUKY; bez předpokládané záruky

# OBCHODOVATELNOST nebo VHODNOST PRO ZVLÁŠTNÍ ÚČEL. Viz

# Další veřejná licence GNU General Public License.

#

# Měli byste obdržet kopii obecné veřejné licence GNU

# spolu s tímto programem. Pokud ne, viz.

# bscan.py - Jednoduchý bluetooth LE skener a extraktor dat

ze skeneru importu bluepy.btle, DefaultDelegate

čas importu

importovat pymysql

importovat strukt

hostname = 'localhost'

username = 'datasrc'

heslo = 'datasrc000'

database = 'SensorBug'

#Zadejte MAC adresu senzoru z leskánu

SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]

SENSOR_LOCATION = ["Garáž", "Exteriér"]

třída DecodeErrorException (výjimka):

def _init _ (vlastní, hodnota):

self.value = hodnota

def _str _ (self):

vrátit repr (vlastní hodnota)

třída ScanDelegate (DefaultDelegate):

def _init _ (self):

DefaultDelegate._ init _ (self)

def handleDiscovery (self, dev, isNewDev, isNewData):

pokud jeNewDev:

vytisknout „Objevené zařízení“, dev.addr

elif isNewData:

tisknout „Přijatá nová data od“, dev.addr

def doQueryInsert (conn, addr, loc, temp, accero):

Tabulka #blesensor je datum, čas, adresa, umístění, teplota, accero

cur = conn.cursor ()

dostr = 'VLOŽIT DO HODNOT dat (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

cur.execute (dostr, (addr, loc, temp, accero))

conn.commit ()

scanner = Scanner (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (host = název hostitele, uživatel = uživatelské jméno, heslo = heslo, db = databáze)

ManuDataHex =

ReadLoop = True

Snaž se:

while (ReadLoop):

zařízení = scanner.scan (2.0)

ManuData = ""

pro vývojáře v zařízeních:

vstup = 0

AcceroData = 0

AcceroType = 0

TempData = 0

pro saddr v SENSOR_ADDRESS:

vstup += 1

if (dev.addr == saddr):

tisk "Zařízení %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [položka-1]

for (adtype, desc, value) in dev.getScanData ():

tisk " %s = %s" %(sestup, hodnota)

if (desc == "Výrobce"):

ManuData = hodnota

if (ManuData == ""):

tisk "Nebyla přijata žádná data, ukončení dekódování"

pokračovat

#print ManuData

pro i, j ve formátu zip (ManuData [:: 2], ManuData [1:: 2]):

ManuDataHex.append (int (i+j, 16))

#Začněte dekódovat nezpracovaná data výrobce

if ((ManuDataHex [0] == 0x85) and (ManuDataHex [1] == 0x00)):

tisk "Záhlaví byte 0x0085 nalezeno"

jiný:

tisk "Bajt hlavičky 0x0085 nenalezen, dekódování zastaveno"

pokračovat

#Přeskočit hlavní/vedlejší

#Index 5 je 0x3c, indikuje úroveň baterie a konfiguraci #

if (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#print "TotalLen:" + str (len (ManuDataHex))

while (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Data:" + hex (ManuDataHex [idx])

if (ManuDataHex [idx] == 0x41):

#Acercerová data

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

elif (ManuDataHex [idx] == 0x43):

#Teplotní údaje

idx += 1

TempData = ManuDataHex [idx]

TempData += ManuDataHex [idx +1] * 0x100

TempData = TempData * 0,0625

idx += 2

jiný:

idx += 1

tisk "Adresa zařízení:" + CurrentDevAddr

vytisknout „Umístění zařízení:“+ CurrentDevLoc

tisk "Úroveň baterie:" + str (BatteryLevel) + "%"

tisk "Počitadlo konfigurace:" + str (ConfigCounter)

tisk "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

tisknout "Temp Data:" + str (TempData)

doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)

ReadLoop = False

kromě DecodeErrorException:

složit

Krok 7: Otestujte skript Pythonu

Skript musí být spuštěn v kořenovém adresáři, takže:

$ sudo python bscan.pyZjištěné zařízení ec: 6e: 7e: 10: b1: 92 Zařízení ec: 6e: 7e: 10: b1: 92 (veřejné), RSSI = -80 dB Vlajky = 06 Neúplné 16b Služby = 0a18 Výrobce = 850002003c25094102024309016f Nalezen byte záhlaví 0x0085 Adresa zařízení: ec: 6e: 7e: 10: b1: 92 Umístění zařízení: Garáž Úroveň baterie: 37% Počitadlo konfigurace: 9 Data Accero: 0x2 0x2 Teplotní data: 16,5625

Krok 8: Přidejte skript Pythonu do Crontabu

Skript python musí být spuštěn v kořenovém adresáři, takže pokud chcete data zachytávat automaticky, bude nutné je přidat do crontabu root. V tomto případě spouštím skript každých 20 minut Použijte příkaz:

$ sudo crontab -e

# Upravením tohoto souboru zavedete úkoly, které má spustit cron.

# # Každý úkol, který má být spuštěn, musí být definován prostřednictvím jednoho řádku # označujícího pomocí různých polí, kdy bude úkol spuštěn # a jaký příkaz má být spuštěn pro úkol # # Chcete -li definovat čas, kdy můžete zadat konkrétní hodnoty pro # minutu (m), hodina (h), den v měsíci (dom), měsíc (mon), # a den v týdnu (dow) nebo použijte v těchto polích '*' (pro 'any'). # # Všimněte si, že úkoly budou spuštěny na základě cronova systému # pojmu času a časových pásem démona. # # Výstup úloh crontab (včetně chyb) je odeslán prostřednictvím # e -mailu uživateli, kterému soubor crontab patří (není -li přesměrován). # # Například můžete spustit zálohu všech svých uživatelských účtů # v 5 hodin ráno každý týden pomocí: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Další informace naleznete v manuálové stránky crontab (5) a cron (8) # # mh dom mon dow příkaz 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

A je to. Skript python bude spuštěn v pravidelných intervalech a překóduje výstup do databáze SQL

Krok 9: Extra: Konfigurujte SensorBug pro výstup snímání polohy

Extra: Konfigurujte SensorBug pro výstup snímání polohy
Extra: Konfigurujte SensorBug pro výstup snímání polohy
Extra: Konfigurujte SensorBug pro výstup snímání polohy
Extra: Konfigurujte SensorBug pro výstup snímání polohy

Je možné nakonfigurovat SensorBug na Androidu pro výstup snímání polohy. Pro snímání změny polohy, takzvané Garážová vrata. SensorBug detekuje, zda zařízení stojí vzpřímeně nebo leží rovně. Když je zařízení ploché, zaznamenaná hodnota je 0x20 pokud zařízení stojí vzpřímeně, hodnota je 0x02 Nerozlišuje se, zda je poloha X nebo Y nahoře, pokud osa Z není nahoru ani dolů. Nejsnadnějším způsobem je použít aplikaci LightBlue. V nabídce skenování by se měl objevit SensorBug. Vyberte zařízení, které chcete konfigurovat, přejděte na charakteristiku GATT pro konfiguraci akcelerometru UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Viz obrázek: Napište nový konfigurační řetězec:

010d3f02020000002d00000002 Přečtěte si zpět konfigurační řetězec a potvrďte zápis. To umožňuje akcelerometr pro snímání polohy.

Doporučuje: