Kazalo:

Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi: 9 korakov (s slikami)
Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi: 9 korakov (s slikami)

Video: Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi: 9 korakov (s slikami)

Video: Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi: 9 korakov (s slikami)
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, November
Anonim
Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi
Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi
Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi
Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi

Ta navodila govorijo o tem, kako sestaviti sistem za spremljanje temperature z več vozlišči s hroščem senzorja Bluetooth LE iz Blue Radios (BLEHome) in RaspberryPi 3B Zahvaljujoč razvoju standarda Bluetooth LE so na trgu zdaj na voljo brezžični senzorji z nizko porabo energije. za zelo nizke stroške in lahko deluje na eni kovanci več mesecev hkrati. Eden od teh senzorjev, ki sem jih vzel, je iz modrega radia, imenovanega Sensor Bugs. Na Amazonu stane približno 25 USD, gre za napravo Bluetooth LE s temperaturnim senzorjem, svetlobnim senzorjem in merilnikom merilnika pospeška, ki so vgrajeni v majhno enoto, ki lahko komunicira brezžično..

1. korak: Namestite Raspberry Pi

Prvi korak je, da dobite delujočo nastavitev Raspberry Pi. Sledite navodilom s spletnega mesta Raspberry Pi, naložite Raspbian na kartico SD, ga vstavite v Raspberry Pi in ga zaženite. Sistem sem nastavil z različico Raspbian Stretch Lite (brez grafičnega vmesnika) novembra 2017. Po potrebi nastavim WiFi, raje prilagodim časovnega pasu na trenutni časovni pas namesto UTC. To lahko storite z ukazom: $ sudo dpkg-reconfigure tzdata Preostanek navodila predvideva, da je nastavitev izvedena prek vmesnika ukazne vrstice.

2. korak: Nastavitev MySQL na Raspberry Pi

Koristno je imeti lokalno nameščeno bazo podatkov za shranjevanje vseh zajetih podatkov. Namestitev MySQL na Raspberry Pi je zelo enostavna. Prav tako ni težko spremeniti skripta za zunanjo povezavo s strežnikom SQL, lahko preskočite ta korak, če želite uporabiti strežnik SQL v omrežju. V omrežju je veliko navodil, predlagam to: https:// www.stewright.me/2014/06/tutorial-install-…

Ko je strežnik SQL nameščen, lahko z odjemalcem MySQL CLI ustvarite uporabnika, bazo podatkov in tabelo. Če želite vnesti MySQL CLI, uporabite ukaz:

$ sudo mysql -uroot -p Najprej ustvarite lokalnega uporabnika za vstavljanje zajetih podatkov:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Nato ustvarite bazo podatkov in tabelo:> CREATE DATABASE SensorBug; Nastavitev uporabnika dovoljenje:> ODDELI VSE PRIVILEGIJE NA SensorBug.* TO 'datasrc'@'localhost'; Zdaj dodajte novo tabelo v bazo podatkov. V tem primeru bom dodal tabelo z naslednjimi stolpci: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE in ACCEROMETER

  • DATE/TIME - To je datum in čas zajema podatkov
  • NASLOV - To je MAC tipa SensorBug, iz katerega je zajeto sporočilo
  • LOKACIJA - Čitljivo niz, ki označuje, kje se nahaja senzor
  • TEMPERATURA - To je zabeležena temperatura
  • ACCELE - To je vrednost izhoda merilnika pospeška, uporabna za beleženje položaja senzorja (če je omogočeno)

To naredi:> USE SensorBug; > Ustvari podatke iz tabele (datum DATE, čas TIME, naslov TINYTEXT, lokacija TINYTEXT, temperatura FLOAT, pospešek INT); Zdaj je zbirka podatkov pripravljena, lahko nadaljujemo z nastavitvijo sensorBugs.

3. korak: Nastavitev senzorskih napak

Napake senzorjev so precej čedne majhne naprave. Na žalost je proizvajalec zagotovil samo aplikacijo IOS za njeno programiranje. Kljub temu je z njim še vedno mogoče delati, če imate samo napravo Android. Najprej povežite napravo s telefonom. Brez seznanjanja naprave SensorBug ne bo oglaševal podatkov. Poskušal sem preveriti, ali lahko to storim neposredno z RaspberryPi, na žalost se zdi, da je gonilnik Bluetooth LE na RaspberryPi še vedno eksperimentalen in vsebuje hrošče, ki preprečujejo njegovo združevanje z napravami Bluetooth LE. Prihodnja različica gonilnika blueZ bi to lahko odpravila, vendar glede na trenutno pisanje ni mogoče seznaniti SensorBug z RaspberryPi. Na srečo nam ni treba seznaniti naprave za zajem oglaševanih podatkov. Edino, kar potrebujemo, je telefon za konfiguracijo SensorBug. Ko je seznanjen z napravo, bo SensorBug privzeto začel prikazovati podatke o temperaturi v intervalu 1 s. Za zajem podatkov o temperaturi je to vse, kar je potrebno. Če nameravate razširiti uporabo senzorja položaja ali svetlobe, bo naprava potrebna za konfiguracijo. Za začetek bomo napravo seznanili in prekinili povezavo. To bo dovolj za namene merjenja temperature. Začnite s pritiskom na oba gumba na tipki SensorBug. Modro/zelena LED bo utripala, kar pomeni, da je vklopljen. Pritisnite eno od tipk, zelena LED naj zasveti, kar pomeni, da je vklopljen. Če zelena LED ne sveti, pritisnite oba gumba, da poskusite znova vklopiti napravo. Pritisnite in držite enega od gumbov, dokler modra LED ne začne utripati. S tem boste napravo preklopili v parni način. Pojdite v konfiguracijski meni Bluetooth na telefonu in poiščite napravo SensorBug. Ko se prikaže, izberite, da se seznanite z napravo. To je to, zdaj se napaja SensorBug in oglašuje podatke o temperaturi

4. korak: Namestitev Bluetooth LE Python Wrapperja

Nato moramo namestiti knjižnico za python, da se pogovarja s svežnjem Bluetooth LE. Navodilo najdete tukaj: https://github.com/IanHarvey/bluepy Za Python 2.7 je tako preprosto, kot da vnesete naslednje ukaze:

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

5. korak: Skenirajte in poiščite naslov SensorBug

Če želite izvedeti naslov MAC SensorBug, uporabite ta ukaz: $ sudo hcitool lescan Videti bi morali izpis, kot je:

EC: FE: 7E: 10: B1: 92 (neznano) Če imate v bližini veliko naprav bluetooth LE, bo morda težko ugotoviti, s kom se pogovarjate. Lahko poskusite bluetoothctl, ki daje več podrobnosti:

$ sudo bluetoothctl [bluetooth]# skeniranje na [NOVO] EC EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC EC naprave: FE: 7E: 10: B1: 92 Tipka podatkov proizvajalca: 0x0085 [CHG] EC naprava: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x02 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x00 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x3c [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x25 [CHG] Naprava EC EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x09 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x41 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x02 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x02 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x43 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Vrednost podatkov proizvajalca: 0x0b [CHG] Naprava EC: FE: 7E: 10: B1: 92 Podatki proizvajalca Vrednost: 0x01 [CHG] Naprava EC: FE: 7E: 10: B1: 92 Proizvajalec Vrednost podatkov: 0x6f

Zapišite naslov MAC, to bo treba vnesti v skript python za filtriranje neželenih naprav Bluetooth LE

6. korak: Dodajte skript Python

Kopija skripta Python je na voljo na:

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

Tu je ista datoteka, pri kopiranju pazite na alinejo:

Posodobite tudi naslov MAC v datoteki python, da se ujema z naslovom senzorja, pridobljenim iz rezultata skeniranja.

# Ta program je brezplačna programska oprema: lahko ga distribuirate in/ali spremenite

# to pod pogoji Splošne javne licence GNU, ki jo je objavil

# Free Software Foundation, bodisi različice 3 licence, ali

# (po vaši izbiri) katera koli kasnejša različica.

#

# Ta program se distribuira v upanju, da bo koristen, # vendar BREZ KAKRŠNE GARANCIJE; brez implicitne garancije

# TRGOVINSKA ZDRAVLJIVOST ali PRIMERNOST ZA POSEBEN NAMEN. Glej

# Splošna javna licenca GNU za več podrobnosti.

#

# Morali bi prejeti kopijo splošne javne licence GNU

# skupaj s tem programom. Če ne, glej.

# bscan.py - Preprost optični bralnik LE in ekstraktor podatkov Bluetooth

iz optičnega bralnika za uvoz bluepy.btle, DefaultDelegate

čas uvoza

uvoz pymysql

uvozna struktura

hostname = 'localhost'

username = 'datasrc'

geslo = 'datasrc000'

database = 'SensorBug'

#Vnesite naslov MAC senzorja iz lescana

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

SENSOR_LOCATION = ["Garaža", "Zunanjost"]

razred DecodeErrorException (izjema):

def _init _ (sam, vrednost):

self.value = vrednost

def _str _ (samo):

vrnitev repr (self.value)

razred ScanDelegate (DefaultDelegate):

def _init _ (samo):

DefaultDelegate._ init _ (samo)

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

če jeNewDev:

natisni "Odkrita naprava", dev.addr

elif isNowData:

print "Prejeti novi podatki od", dev.addr

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

#blesensor tabela je datum, čas, dodatek, lokacija, temp, naglas

cur = conn.cursor ()

dostr = 'VSTAVI Vrednosti podatkov (CURRENT_DATE (), ZDAJ (), %s, %s, %s, %s);'

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

conn.commit ()

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

myConnection = pymysql.connect (gostitelj = ime gostitelja, uporabnik = uporabniško ime, passwd = geslo, db = baza podatkov)

ManuDataHex =

ReadLoop = Res

poskusi:

medtem ko (ReadLoop):

naprave = skener.scan (2.0)

ManuData = ""

za dev v napravah:

vnos = 0

AcceroData = 0

AcceroType = 0

TempData = 0

za saddr v SENSOR_ADDRESS:

vnos += 1

if (dev.addr == saddr):

natisni "Naprava %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [vnos-1]

za (vrsta oglasa, opis, vrednost) v dev.getScanData ():

natisni " %s = %s" %(opis, vrednost)

if (desc == "Proizvajalec"):

ManuData = vrednost

if (ManuData == ""):

natisni "Ni prejetih podatkov, končaj dekodiranje"

nadaljuj

#print ManuData

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

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

#Začnite dekodiranje surovih podatkov proizvajalca

če ((ManuDataHex [0] == 0x85) in (ManuDataHex [1] == 0x00)):

natisni "Najden je bajt glave 0x0085"

drugače:

natisni "bajta glave 0x0085 ni mogoče najti, dekodiranje se ustavi"

nadaljuj

#Skap Major/Minor

#Indeks 5 je 0x3c, navedite raven baterije in konfiguracijo #

če (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

medtem ko (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Podatki:" + šestnajstiško (ManuDataHex [idx])

če (ManuDataHex [idx] == 0x41):

#Podatki merilnika pospeška

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Podatki o temperaturi

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

drugače:

idx += 1

natisnite "Naslov naprave:" + CurrentDevAddr

natisnite "Lokacija naprave:" + CurrentDevLoc

natisni "Raven baterije:" + str (Raven baterije) + "%"

natisni "Config Counter:" + str (ConfigCounter)

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

natisni "Temp Data:" + str (TempData)

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

ReadLoop = Napačno

razen DecodeErrorException:

prehod

7. korak: Preizkusite skript Python

Skript je treba zagnati v korenu, zato:

$ sudo python bscan.pyOdkrita naprava ec: 6e: 7e: 10: b1: 92 Naprava ec: 6e: 7e: 10: b1: 92 (javno), RSSI = -80 dB Zastavice = 06 Nepopolne storitve 16b = 0a18 Proizvajalec = 850002003c25094102024309016f Bajt glave 0x0085 najden Naslov naprave: ec: 6e: 7e: 10: b1: 92 Lokacija naprave: Garaža Raven baterije: 37% Števec konfiguracije: 9 Podatki Accero: 0x2 0x2 Temp Podatki: 16.5625

8. korak: Dodajte skript Python v Crontab

Skript python mora biti zagnan v korenu, zato ga morate, če želite samodejno zajeti podatke, dodati v korenski crontab. V tem primeru zaženem skript vsakih 20 minut Uporabite ukaz:

$ sudo crontab -e

# Uredite to datoteko, da uvedete naloge, ki jih izvaja cron.

# # Vsako opravilo, ki ga je treba izvesti, je treba opredeliti v eni vrstici #, ki z različnimi polji označuje, kdaj bo opravilo izvedeno # in kateri ukaz naj se izvede za nalogo # # Če želite določiti čas, ki ga lahko navedete za # minuto (m), uro (h), dan v mesecu (dom), mesec (pon), # in dan v tednu (navzdol) ali uporabite '*' v teh poljih (za 'poljubno'). # # Upoštevajte, da se bodo opravila začela ki temelji na sistemu cron # daemon's time of time and timezone. # # Izhod opravil crontab (vključno z napakami) se pošlje prek # e -pošte uporabniku, ki mu pripada datoteka crontab (razen če je preusmerjen). # # Na primer, vsak teden ob 5. uri zjutraj lahko ustvarite varnostno kopijo vseh svojih uporabniških računov z: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Za več informacij glejte ročne strani crontab (5) in cron (8) # # mh dom mon dow ukaz 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

To je to. Skript python se bo izvajal v rednih intervalih in zapisal izhod v bazo podatkov SQL

9. korak: Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja

Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja
Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja
Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja
Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja

SensorBug v sistemu Android je mogoče konfigurirati za zaznavanje položaja. Za zaznavanje spremembe položaja, tako imenovano zaznavanje garažnih vrat. SensorBug zazna, če naprava stoji pokonci ali leži v ravnem položaju. Ko je naprava ravna, je zabeležena vrednost 0x20 če naprava stoji pokonci, je vrednost 0x02 Ne razlikuje se, če je položaj X ali Y navzgor, dokler os Z ni navzgor ali navzdol. Najlažji način za to je uporaba aplikacije LightBlue. SensorBug bi se moral prikazati v meniju za skeniranje. Izberite napravo, ki jo želite konfigurirati, pojdite na lastnosti GATT za konfiguracijo merilnika pospeška UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Glej sliko: Napišite nov niz konfiguracije:

010d3f02020000002d00000002 Ponovno preberite konfiguracijski niz, da potrdite zapis. To omogoča merilnik pospeška za zaznavanje položaja.

Priporočena: