Obsah:

Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi: 9 krokov (s obrázkami)
Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi: 9 krokov (s obrázkami)

Video: Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi: 9 krokov (s obrázkami)

Video: Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi: 9 krokov (s obrázkami)
Video: Samsung Galaxy Watch 4 merajú aj krvný tlak a EKG 2024, November
Anonim
Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi
Monitorujte a zaznamenávajte teplotu pomocou Bluetooth LE a RaspberryPi

Tento návod je o tom, ako zostaviť viacuzlový systém monitorovania teploty s chybou senzora Bluetooth LE od spoločností Blue Radios (BLEHome) a RaspberryPi 3B. Vďaka vývoju štandardu Bluetooth LE sú na trhu teraz ľahko dostupné bezdrôtové snímače s nízkym výkonom. za veľmi nízke náklady a môže bežať na jednej mincovej bunke niekoľko mesiacov naraz. Jeden z týchto senzorov, ktoré som zachytil, pochádza z Blue Radio s názvom Sensor Bugs. Stojí to asi 25 dolárov na Amazone a je to zariadenie Bluetooth LE so snímačom teploty, svetelným senzorom a akcerometrom, ktoré sú vstavané do malej jednotky, ktorá môže bezdrôtovo komunikovať. To sa perfektne hodí k Raspberry Pi 3B, ktorý má vstavanú podporu pre rádio Bluetooth LE.

Krok 1: Nastavte Raspberry Pi

Prvým krokom je získať funkčné nastavenie Raspberry Pi. Postupujte podľa pokynov z webovej stránky Raspberry Pi, načítajte Raspbian na kartu SD, vložte ho do Raspberry Pi a spustite ho. Nastavil som svoj systém pomocou verzie Raspbian Stretch Lite (bez grafického rozhrania), november 2017. V prípade potreby nastavte WiFi, radšej upravím časové pásmo do aktuálneho časového pásma namiesto UTC. Môžete to urobiť pomocou príkazu: $ sudo dpkg-reconfigure tzdataRest inštrukcie predpokladá, že nastavenie sa vykonáva pomocou rozhrania príkazového riadka.

Krok 2: Nastavenie MySQL na Raspberry Pi

Je užitočné mať lokálne nainštalovanú databázu na ukladanie všetkých zachytených údajov. Inštalácia MySQL na Raspberry Pi je veľmi jednoduchá. Nie je tiež ťažké upravovať skript tak, aby sa externe pripájal k serveru SQL, tento krok môžete preskočiť, ak chcete používať server SQL v sieti. Na internete je veľa pokynov, navrhujem toto: https:// www.stewright.me/2014/06/tutorial-install-…

Keď je server SQL nainštalovaný, môžete pomocou klienta MySQL CLI vytvoriť používateľa, databázu a tabuľku. Na zadanie rozhrania MySQL CLI použite príkaz:

USD povolenie:> UDELIŤ VŠETKY VÝHODY NA SensorBug.* TO 'datasrc'@'localhost'; Teraz pridajte do databázy novú tabuľku. V tomto prípade pridám tabuľku s nasledujúcimi stĺpcami: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE a ACCEROMETER

  • DATE/TIME - Toto je dátum a čas zaznamenania údajov
  • ADRESA - Toto je adresa MAC SensorBug, z ktorej je správa zachytená
  • LOKALITA - Reťazec čitateľný pre človeka, ktorý označuje, kde sa senzor nachádza
  • TEPLOTA - toto je zaznamenaná teplota
  • ACCELE - Toto je hodnota výstupu akcelerometra, užitočná na zaznamenávanie polohy senzora (ak je zapnutá)

Príkaz, ktorý to urobí, je:> USE SensorBug; > VYTVORIŤ TABUĽKOVÉ údaje (dátum DÁTUM, čas ČAS, adresa TINYTEXT, umiestnenie TINYTEXT, teplota FLOAT, accele INT); Teraz je databáza pripravená, môžeme pristúpiť k nastaveniu sensorBugs.

Krok 3: Inštalácia snímačov SensorBug

Chyby senzorov sú celkom úhľadné malé zariadenia. Výrobca bohužiaľ poskytol iba aplikáciu IOS na jej programovanie. Napriek tomu je možné s ním pracovať, ak máte iba zariadenie s Androidom. V prvom kroku spárujte zariadenie s telefónom. Bez spárovania zariadenia nebude SensorBug propagovať údaje. Skúsil som zistiť, či to môžem urobiť priamo s RaspberryPi, bohužiaľ to vyzerá, že ovládač Bluetooth LE na RaspberryPi je stále experimentálny a obsahuje chyby, ktoré mu bránia v párovaní so zariadeniami Bluetooth LE. Budúca verzia ovládača blueZ to môže vyriešiť, ale podľa súčasného písania neexistuje spôsob, ako spárovať SensorBug s RaspberryPi. Našťastie nepotrebujeme zariadenie spárovať, aby sme zachytili jeho inzerované údaje. Jediná vec, ktorú potrebujeme, je telefón na konfiguráciu SensorBug. V predvolenom nastavení začne SensorBug inzerovať údaje o teplote v intervale 1 s po spárovaní so zariadením. Na zachytenie údajov o teplote je to všetko, čo je potrebné. Ak plánujete rozšíriť používanie senzora polohy alebo svetla, bude potrebné konfiguračné zariadenie. Na začiatok zariadenie spárujeme a odpojíme. To bude stačiť na účely zachytávania teploty. Začnite stlačením oboch tlačidiel na SensorBug. Modrá/zelená LED dióda bliká, čo znamená, že je zapnutá. Stlačte jedno z tlačidiel, zelená dióda LED by sa mala rozsvietiť a indikovať zapnutie napájania. Ak zelená LED dióda nesvieti, stlačením oboch tlačidiel sa pokúste zariadenie znova zapnúť. Stlačte a podržte jedno z tlačidiel, kým modrá LED dióda nezačne blikať. Tým sa zariadenie prepne do režimu párovania. Prejdite v telefóne do ponuky konfigurácie Bluetooth a vyhľadajte zariadenie SensorBug. Akonáhle sa zobrazí, vyberte ho na spárovanie so zariadením. To je všetko, teraz je SensorBug napájaný a inzeruje údaje o teplote

Krok 4: Inštalácia obálky Bluetooth LE Python Wrapper

Ďalej musíme nainštalovať knižnicu, aby sa python mohol rozprávať so zásobníkom Bluetooth LE. Pokyny nájdete tu: https://github.com/IanHarvey/bluepyFor Python 2.7 je jednoduchý ako zadanie nasledujúcich príkazov:

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

Krok 5: Naskenujte a zistite adresu SensorBug

Ak chcete zistiť MAC adresu SensorBug, použite tento príkaz: $ sudo hcitool lescan Mali by ste vidieť výstup ako:

EC: FE: 7E: 10: B1: 92 (neznáme) Ak máte k dispozícii veľa zariadení bluetooth LE, môže byť ťažké zistiť, s ktorým z nich hovoríte. Môžete vyskúšať bluetoothctl, ktorý poskytne ďalšie podrobnosti:

$ sudo bluetoothctl [bluetooth]# skenovanie na [NOVÉ] Zariadenie EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 VýrobcaData Key: 0x0085 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaju výrobcu: 0x02 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaja výrobcu: 0x00 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údajov výrobcu: 0x3c [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údajov výrobcu: 0x25 [CHG] Hodnota zariadenia EC: FE: 7E: 10: B1: 92 Hodnota údajov výrobcu: 0x09 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaja výrobcu: 0x41 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaja výrobcu: 0x02 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údajov výrobcu: 0x02 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaja výrobcu: 0x43 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota údaja výrobcu: 0x0b [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Údaje výrobcu Hodnota: 0x01 [CHG] Zariadenie EC: FE: 7E: 10: B1: 92 Hodnota výrobcu: 0x6f

Zaznamenajte si MAC adresu, ktorú budete musieť zadať do skriptu python, aby ste odfiltrovali nechcené zariadenia Bluetooth LE

Krok 6: Pridajte skript Python

Kópia skriptu Python je k dispozícii na:

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

Tu je ten istý súbor, pri kopírovaní dbajte na odsadenie:

Aktualizujte tiež adresu MAC v súbore python, aby sa zhodovala s adresou senzora získanou z výsledku kontroly.

# Tento program je bezplatný softvér: môžete ho ďalej distribuovať a/alebo upravovať

# to za podmienok všeobecnej verejnej licencie GNU, ako ju publikoval

# Free Software Foundation, buď verzia 3 licencie, alebo

# (podľa vášho výberu) akákoľvek neskoršia verzia.

#

# Tento program je distribuovaný v nádeji, že bude užitočný, # ale BEZ AKEJKOĽVEK ZÁRUKY; aj bez implicitnej záruky

# OBCHODOVATEĽNOSŤ alebo VHODNOSŤ NA URČITÝ ÚČEL. Pozrite si

# GNU General Public License, kde nájdete ďalšie podrobnosti.

#

# Mali by ste dostať kópiu všeobecnej verejnej licencie GNU

# spolu s týmto programom. Ak nie, viď.

# bscan.py - Jednoduchý bluetooth LE skener a extraktor dát

z bluepy.btle import Scanner, DefaultDelegate

čas importu

importovať pymysql

importovať štruktúru

hostname = 'localhost'

username = 'datasrc'

heslo = 'datasrc000'

database = 'SensorBug'

#Zadajte MAC adresu senzora z lescanu

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

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

trieda DecodeErrorException (výnimka):

def _init _ (vlastné, hodnota):

self.value = hodnota

def _str _ (self):

vrátiť repr (self.value)

trieda ScanDelegate (DefaultDelegate):

def _init _ (self):

DefaultDelegate._ init _ (self)

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

ak jeNewDev:

vytlačiť „Zistené zariadenie“, dev.addr

elif isNewData:

vytlačiť „Prijaté nové údaje z“, dev.addr

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

#blesensor tabuľka je dátum, čas, adresa, poloha, teplota, accero

cur = conn.cursor ()

dostr = 'VLOŽIŤ DO HODNOTY údajov (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

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

myConnection = pymysql.connect (hostiteľ = meno hostiteľa, užívateľ = užívateľské meno, heslo = heslo, db = databáza)

ManuDataHex =

ReadLoop = Pravda

skús:

while (ReadLoop):

zariadenia = scanner.scan (2.0)

ManuData = ""

pre vývojárov v zariadeniach:

vstup = 0

AcceroData = 0

AcceroType = 0

TempData = 0

pre saddr na SENSOR_ADDRESS:

vstup += 1

ak (dev.addr == saddr):

vytlačiť "Zariadenie %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [položka-1]

pre (adtype, desc, value) v dev.getScanData ():

vytlačiť " %s = %s" %(zostup, hodnota)

ak (desc == "Výrobca"):

ManuData = hodnota

ak (ManuData == ""):

vytlačiť „Neboli prijaté žiadne údaje, ukončenie dekódovania“

ďalej

#print ManuData

pre i, j v zip (ManuData [:: 2], ManuData [1:: 2]):

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

#Začnite dekódovať nespracované údaje výrobcu

ak ((ManuDataHex [0] == 0x85) a (ManuDataHex [1] == 0x00)):

vytlačiť „Bajt hlavičky 0x0085 nájdený“

inak:

vytlačiť „Bajt hlavičky 0x0085 nebol nájdený, dekódovanie bolo zastavené“

ďalej

#Vynechajte major/minor

#Index 5 je 0x3c, indikuje úroveň batérie a konfiguráciu #

ak (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 "Údaje:" + hex (ManuDataHex [idx])

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

#Acercerové údaje

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

inak:

idx += 1

vytlačiť „Adresa zariadenia:“+ CurrentDevAddr

vytlačiť „Poloha zariadenia:“+ CurrentDevLoc

vytlačiť „Úroveň batérie:“+ str (BatteryLevel) + „%“

vytlačiť „Počítadlo konfigurácií:“+ str (ConfigCounter)

vytlačiť „Accelero Data:“+ hex (AcceleroType) + „“+ hex (AcceleroData)

vytlačiť „Dočasné údaje:“+ str (TempData)

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

ReadLoop = False

okrem DecodeErrorException:

prejsť

Krok 7: Otestujte skript Python

Skript musí byť spustený v root, takže:

$ sudo python bscan.pyZistené zariadenie ec: 6e: 7e: 10: b1: 92 Zariadenie ec: 6e: 7e: 10: b1: 92 (verejné), RSSI = -80 dB Vlajky = 06 Nedokončené 16b Služby = 0a18 Výrobca = 850002003c25094102024309016f Bol nájdený bajt hlavičky 0x0085 Adresa zariadenia: ec: 6e: 7e: 10: b1: 92 Poloha zariadenia: Garáž Úroveň batérie: 37% Počítadlo konfigurácií: 9 Údaje Accero: 0x2 0x2 Teplotné údaje: 16,5625

Krok 8: Pridajte skript Python do Crontabu

Skript python musí byť spustený v priečinku root, takže ak chcete údaje zachytávať automaticky, bude ho potrebné pridať do súboru crontab koreňa. V tomto prípade spustím skript každých 20 minút. Použite príkaz:

$ sudo crontab -e

# Upravte tento súbor, aby ste predstavili úlohy, ktoré má spustiť cron.

# # Každá úloha, ktorú je potrebné spustiť, musí byť definovaná prostredníctvom jedného riadka #, ktorý v rôznych poliach označuje, kedy sa úloha spustí # a aký príkaz sa má pre úlohu vykonať # # Ak chcete definovať čas, počas ktorého môžete poskytnúť konkrétne hodnoty na # minútu (m), hodina (h), deň v mesiaci (dom), mesiac (mon), # a deň v týždni (dow) alebo v týchto poliach použite „*“(pre „akékoľvek“). # # Všimnite si, že sa začnú úlohy založené na systéme cron # pojem démona o čase a časových pásmach. # # Výstup úloh crontab (vrátane chýb) je odoslaný prostredníctvom # e -mailu používateľovi, do ktorého súbor crontab patrí (pokiaľ nie je presmerovaný). # # Môžete napríklad zálohovať všetky svoje používateľské účty # o 5:00 každý deň pomocou: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Ďalšie informácie nájdete na manuálové stránky crontab (5) a cron (8) # # mh dom mon dow príkaz 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

To je všetko. Skript python sa spustí v pravidelných intervaloch a prekóduje výstup do databázy SQL

Krok 9: Extra: Konfigurujte SensorBug pre výstup snímania polohy

Extra: Konfigurujte SensorBug pre výstup snímania polohy
Extra: Konfigurujte SensorBug pre výstup snímania polohy
Extra: Konfigurujte SensorBug pre výstup snímania polohy
Extra: Konfigurujte SensorBug pre výstup snímania polohy

Zariadenie SensorBug je možné v systéme Android nakonfigurovať na výstup snímania polohy. Na snímanie zmeny polohy, takzvané garážové dvere. Snímač SensorBug detekuje, či zariadenie stojí vzpriamene alebo leží rovno. Keď je zariadenie ploché, zaznamenaná hodnota je 0x20. pokiaľ zariadenie stojí vzpriamene, hodnota je 0x02. Nerozlišuje sa, či je pozícia X alebo Y hore, pokiaľ os Z nie je hore alebo dole. Najľahší spôsob, ako to urobiť, je použiť aplikáciu LightBlue. V ponuke skenovania by sa mal objaviť SensorBug. Vyberte zariadenie, ktoré chcete konfigurovať, prejdite na charakteristiku GATT pre konfiguráciu akcelerometra UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Pozri obrázok: Napíšte nový konfiguračný reťazec:

010d3f02020000002d00000002 Prečítajte si konfiguračný reťazec a potvrďte zápis. To umožňuje akcelerometer na snímanie polohy.

Odporúča: