Tartalomjegyzék:

A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével: 9 lépés (képekkel)
A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével: 9 lépés (képekkel)

Videó: A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével: 9 lépés (képekkel)

Videó: A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével: 9 lépés (képekkel)
Videó: Высокая плотность 2022 2024, December
Anonim
A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével
A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével
A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével
A hőmérséklet figyelése és rögzítése Bluetooth LE és RaspberryPi segítségével

Ez az útmutató arról szól, hogyan állítsunk össze többcsomópontos hőmérséklet-figyelő rendszert Bluetooth LE érzékelő hibával a Blue Radios (BLEHome) és a RaspberryPi 3B segítségével. A Bluetooth LE szabvány fejlesztésének köszönhetően most már könnyen elérhetők a kis teljesítményű vezeték nélküli érzékelők a piacon nagyon alacsony költségek mellett, és egyetlen érméken is működhet hónapokig. Az egyik ilyen érzékelő, amelyet felvettem, a Blue Radio -tól származik, az úgynevezett Sensor Bugs. Körülbelül 25 dollárba kerül az Amazon -on, ez egy Bluetooth LE eszköz, hőmérséklet -érzékelővel, fényérzékelővel és akkerométerrel, amelyek egy kis egységbe épülnek, amely vezeték nélkül kommunikálhat. Ez tökéletesen illeszkedik a Raspberry Pi 3B -hez, amely támogatja a Bluetooth LE rádiót.

1. lépés: A Raspberry Pi beállítása

Az első lépés egy működő Raspberry Pi beállítás megszerzése. Kövesse a Raspberry Pi webhelyének utasításait, töltse be a Raspbian -t egy SD -kártyára, helyezze be a Raspberry Pi -be és indítsa el. Indítsam el a rendszert a Raspbian Stretch Lite (No GUI) 2017. novemberi verziójával. Ha szükséges, állítsam be a WiFi -t, inkább beállítom a időzónát az aktuális időzónához UTC helyett. Ezt a következő paranccsal teheti meg: $ sudo dpkg-reconfigure tzdata

2. lépés: A MySQL beállítása a Raspberry Pi -n

Hasznos, ha helyileg telepítünk egy adatbázist az összes rögzített adat tárolására. A MySQL telepítése a Raspberry Pi -re rendkívül egyszerű. Ezenkívül nem nehéz módosítani a szkriptet, hogy külsőleg csatlakozzon egy SQL szerverhez, ezt a lépést kihagyhatja, ha SQL szervert szeretne használni a hálózaton. Sok utasítás található a neten, ezt javaslom: https:// www.stewright.me/2014/06/tutorial-install-…

Az SQL szerver telepítése után a MySQL CLI ügyfél használatával létrehozhat felhasználót, adatbázist és táblát. A MySQL CLI megadásához használja a következő parancsot:

$ sudo mysql -uroot -pElőször hozzon létre egy helyi felhasználót a rögzített adatok beillesztéséhez:> CREATE USER 'datasrc'@'localhost' IDATIFYED by 'datasrc000'; Ezután hozzon létre egy adatbázist és táblázatot:> CREATE DATABASE SensorBug; A felhasználó beállítása engedély:> ÖSSZESÍTJEN MINDEN JOGOT A SensorBug -on.* A 'datasrc'@'localhost' -ra; Most adjon hozzá egy új táblát az adatbázishoz. Ebben a példában hozzáadok egy táblázatot a következő oszlopokkal: DATE, TIME, CÍM, LOCATION, HŐMÉRSÉKLET és ACCEROMETER

  • DATE/TIME - Az adatok rögzítésének dátuma és időpontja
  • CÍM - Ez a SensorBug MAC -ja, amelyből az üzenet rögzítésre került
  • HELYSZÍN - Ember által olvasható karakterlánc, amely jelzi az érzékelő helyét
  • HŐMÉRSÉKLET - Ez a rögzített hőmérséklet
  • ACCELE - Ez a gyorsulásmérő kimenetének értéke, amely hasznos az érzékelő pozíciójának rögzítéséhez (ha engedélyezve van)

A parancs ezt teszi:> USE SensorBug; > TÁBLÁZATI LÉTREHOZÁS (dátum DATE, idő TIME, cím TINYTEXT, hely TINYTEXT, hőmérséklet FLOAT, gyors INT); Most az adatbázis készen áll, és folytathatjuk a sensorBugs beállítását.

3. lépés: A SensorBugs beállítása

Az érzékelőhibák nagyon ügyes kis eszközök. Sajnos a gyártó csak IOS alkalmazást biztosított a programozásához. Mindazonáltal továbbra is dolgozhat vele, ha csak Android -eszköze van. Első lépésként párosítsa az eszközt egy telefonnal. Az eszköz párosítása nélkül a SensorBug nem hirdet adatokat. Megpróbáltam megnézni, hogy meg tudom -e csinálni ezt közvetlenül a RaspberryPi -vel, sajnos úgy tűnik, hogy a RaspberryPi Bluetooth LE illesztőprogramja még csak kísérleti jellegű, és hibákat tartalmaz, amelyek megakadályozzák a Bluetooth LE -eszközökkel való párosítást. A blueZ illesztőprogram jövőbeli verziója ezt kijavíthatja, de a jelenlegi írás szerint nincs lehetőség a SensorBug és a RaspberryPi párosítására. Szerencsére nem kell párosítanunk az eszközt a meghirdetett adatok rögzítéséhez. Az egyetlen dolog, amire szükségünk van, egy telefon a SensorBug konfigurálásához. Alapértelmezés szerint a SensorBug a készülékkel való párosítás után 1 másodperces időközönként elkezdi hirdetni a hőmérsékleti adatokat. A hőmérséklet adatok rögzítéséhez ennyi szükséges. Ha azt tervezi, hogy bővíti a helyzet- vagy fényérzékelő használatát, akkor konfigurálnia kell az eszközt. Kezdetben párosítjuk az eszközt, és lekapcsoljuk. Ez elég jó lesz a hőmérséklet rögzítéséhez. Kezdje a SensorBug mindkét gombjának megnyomásával. A kék/zöld LED villog, ami azt jelzi, hogy be van kapcsolva. Nyomja meg az egyik gombot, a zöld LED -nek világítania kell, jelezve, hogy a készülék be van kapcsolva. Ha a zöld LED nem világít, nyomja meg mindkét gombot, hogy újra bekapcsolja a készüléket. Nyomja meg és tartsa lenyomva az egyik gombot, amíg a kék LED villogni nem kezd. Ez párosítási módba helyezi az eszközt. Lépjen a telefon Bluetooth konfigurációs menüjébe, és keresse meg a SensorBug eszközt. Ha megjelenik, válassza ki azt az eszközzel való párosításhoz. Ennyi, most a SensorBug bekapcsolt állapotban van, és hirdeti a hőmérsékleti adatokat

4. lépés: A Bluetooth LE Python Wrapper telepítése

Ezután telepítenünk kell a python könyvtárát, hogy beszélhessen a Bluetooth LE veremmel. Az utasítás itt található:

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

5. lépés: Szkennelje és keresse meg a SensorBug címét

A SensorBug MAC -címének megismeréséhez használja ezt a parancsot: $ sudo hcitool lescan A következő kimenetet kell látnia:

EC: FE: 7E: 10: B1: 92 (ismeretlen) Ha sok bluetooth LE eszköz van a közelben, nehéz lehet megállapítani, hogy melyikhez beszél. Kipróbálhatja a bluetoothctl -t, amely további részleteket tartalmaz:

$ sudo bluetoothctl [bluetooth]# scan on [NEW] Device EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Eszköz EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] Eszköz EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] Eszköz EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] Eszköz EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x41 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x43 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x0b [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Érték: 0x01 [CHG] Eszköz EC: FE: 7E: 10: B1: 92 Gyártó Adat Érték: 0x6f

Rögzítse a MAC -címet, ezt be kell írni a python parancsfájlba, hogy kiszűrje a nem kívánt Bluetooth LE eszközöket

6. lépés: Adja hozzá a Python -szkriptet

A Python -szkript egy példánya elérhető:

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

Itt ugyanaz a fájl, vigyázzon a behúzásra másoláskor:

Ezenkívül frissítse a MAC -címet a python fájlban, hogy megfeleljen a szkennelés eredményéből kapott érzékelő címének.

# Ez a program ingyenes szoftver: újraoszthatja és/vagy módosíthatja

# azt a GNU Általános Nyilvános Licenc feltételei szerint közzétette

# a Free Software Foundation, vagy a Licenc 3. verziója, vagy

# (tetszés szerint) bármely későbbi verzió.

#

# Ezt a programot abban a reményben terjesztjük, hogy hasznos lesz, # de MINDEN GARANCIA NÉLKÜL; még a feltételezett garancia nélkül sem

# KERESHETŐSÉG vagy ALKALMAZÁS KÜLÖNLEGES CÉLRA. Lásd a

# GNU General Public License további részletekért.

#

# Meg kellett volna kapnia a GNU General Public License másolatát

# ezzel a programmal együtt. Ha nem, lásd.

# bscan.py - Egyszerű Bluetooth LE szkenner és adatkivonó

from bluepy.btle import Scanner, DefaultDelegate

importálási idő

import pymysql

import struktúra

hostname = 'localhost'

felhasználónév = 'datasrc'

jelszó = 'datasrc000'

database = 'SensorBug'

#Írja be az érzékelő MAC -címét a lescanből

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

SENSOR_LOCATION = ["Garázs", "Külső"]

DecodeErrorException osztály (kivétel):

def _init _ (saját, érték):

self.value = érték

def _str _ (saját):

return repr (self.value)

ScanDelegate osztály (alapértelmezett törlés):

def _init _ (saját):

DefaultDelegate._ init _ (saját)

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

if isNewDev:

print "Felfedezett eszköz", dev.addr

elif isNewData:

print "Új adatokat kapott", dev.addr

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

#blesensor tábla dátum, idő, addr, hely, hőmérséklet, accero

cur = conn.cursor ()

dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

szkenner = Szkenner (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (gazdagép = gazdagépnév, felhasználó = felhasználónév, jelszó = jelszó, db = adatbázis)

ManuDataHex =

ReadLoop = Igaz

próbáld ki:

közben (ReadLoop):

eszközök = scanner.scan (2.0)

ManuData = ""

eszközök fejlesztői számára:

bejegyzés = 0

AcceroData = 0

AcceroType = 0

TempData = 0

a saddr számára a SENSOR_ADDRESS címen:

bejegyzés += 1

ha (dev.addr == saddr):

nyomtatás "Eszköz %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [bejegyzés-1]

for (adtype, desc, value) a dev.getScanData () fájlban:

print " %s = %s" %(leírás, érték)

ha (desc == "Gyártó"):

ManuData = érték

ha (ManuData == ""):

print "Nincs adat, véget ért a dekódolás"

folytatni

#nyomtatás ManuData

i, j zip formátumban (ManuData [:: 2], ManuData [1:: 2]):

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

#Kezdje el a nyers gyártói adatok dekódolását

ha ((ManuDataHex [0] == 0x85) és (ManuDataHex [1] == 0x00)):

nyomtatás "0x0085 fejléc bájt"

más:

print "0x0085 fejléc bájt nem található, dekódolás leállítása"

folytatni

#Skip Major/Minor

#Az 5. index 0x3c, jelzi az akkumulátor töltöttségi szintjét és a konfigurációt #

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

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

míg (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Adatok:" + hexa (ManuDataHex [idx])

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

#Accerometer adatok

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Hőmérséklet adatok

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

más:

idx += 1

print "Eszköz címe:" + CurrentDevAddr

print "Eszköz helye:" + CurrentDevLoc

print "Battery Level:" + str (BatteryLevel) + "%"

print "Config Counter:" + str (ConfigCounter)

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

print "Temp Data:" + str (TempData)

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

ReadLoop = Hamis

a DecodeErrorException kivételével:

passz

7. lépés: Tesztelje a Python -szkriptet

A szkriptet root -ban kell futtatni, így:

$ sudo python bscan.pyFelfedezett eszköz ec: 6e: 7e: 10: b1: 92 Eszköz ec: 6e: 7e: 10: b1: 92 (nyilvános), RSSI = -80 dB Zászlók = 06 Hiányos 16b Szolgáltatások = 0a18 Gyártó = 850002003c25094102024309016f Fejléc bájt 0x0085 talált Eszköz címe: ec: 6e: 7e: 10: b1: 92 Eszköz helye: Garázs Akkumulátor töltöttségi szint: 37% Konfigurációszámláló: 9 Accero adatok: 0x2 0x2 Temp Adatok: 16.5625

8. lépés: Adja hozzá a Python Script a Crontabhoz

A python parancsfájlt gyökérben kell futtatni, tehát ha automatikusan szeretné rögzíteni az adatokat, akkor hozzá kell adnia a gyökér crontab -hoz. Ebben a példában a szkriptet 20 percenként futtatom. Használja a következő parancsot:

$ sudo crontab -e

# Szerkessze ezt a fájlt a cron által futtatandó feladatok bevezetéséhez.

# # Minden futtatandó feladatot egyetlen sorban kell definiálni #, amely különböző mezőkkel jelzi, hogy mikor kerül sor a feladat végrehajtására # és milyen parancsot kell futtatni a feladathoz # # Az idő meghatározásához konkrét értékeket adhat meg # percre (m), óra (h), hónap napja (dom), hónap (hét), # és a hét napja (dow), vagy használja a "*" -t ezekben a mezőkben ("bármilyen" esetén). # # Figyelje meg, hogy a feladatok elindulnak a cron rendszere # démon idő és időzónák fogalma alapján. # # A crontab feladatok kimenete (beleértve a hibákat is) # e -mailben kerül elküldésre a felhasználóhoz, akihez a crontab fájl tartozik (hacsak nincs átirányítva). # # Például biztonsági másolatot készíthet minden felhasználói fiókjáról # minden reggel 5 órakor a következővel: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # További információért lásd a kézi oldalak: crontab (5) és cron (8) # # mh dom mon dow parancs 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Ez az. A python parancsfájl rendszeres időközönként fut, és a kimenetet újrakódolja az SQL adatbázisba

9. lépés: Extra: Állítsa be a SensorBug -ot a helyzetérzékelő kimenethez

Extra: Állítsa be a SensorBug -ot a helyzetérzékelő kimenethez
Extra: Állítsa be a SensorBug -ot a helyzetérzékelő kimenethez
Extra: Állítsa be a SensorBug -ot a helyzetérzékelő kimenethez
Extra: Állítsa be a SensorBug -ot a helyzetérzékelő kimenethez

Lehetőség van a SensorBug konfigurálására az Androidon a pozícióérzékelő kimenethez. A pozícióváltás érzékeléséhez, az úgynevezett Garázskapu. Érzékeléshez a SensorBug észleli, hogy az eszköz függőlegesen áll vagy lefekszik. Ha az eszköz lapos, a rögzített érték 0x20 míg az eszköz függőlegesen áll, az érték 0x02. Nem tesz különbséget, ha az X vagy Y pozíció felfelé van, mindaddig, amíg a Z tengely nincs felfelé vagy lefelé. Ennek legegyszerűbb módja a LightBlue App használata. A SensorBugnak meg kell jelennie a szkennelési menüben. Válassza ki a konfigurálni kívánt eszközt, menjen a GATT jellemzőihez a gyorsulásmérő konfigurálásához UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Lásd a képet: Új konfigurációs karakterlánc írása:

010d3f0202000000002d00000002 Olvassa vissza a konfigurációs karakterláncot az írás megerősítéséhez. Ez lehetővé teszi a gyorsulásmérőt a helyzetérzékeléshez.

Ajánlott: