Sadržaj:

Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi: 9 koraka (sa slikama)
Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi: 9 koraka (sa slikama)

Video: Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi: 9 koraka (sa slikama)

Video: Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi: 9 koraka (sa slikama)
Video: Часы G-Shock до 250 долларов-15 лучших часов Casio G до 250 доллар... 2024, Studeni
Anonim
Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi
Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi
Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi
Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi

Ovo uputstvo govori o tome kako sastaviti sustav s više čvorova za praćenje temperature s greškom Bluetooth LE senzora Blue Radiosa (BLEHome) i RaspberryPi 3B Zahvaljujući razvoju Bluetooth LE standarda, sada su na tržištu lako dostupni bežični senzori male snage za vrlo niske troškove i može raditi na jednoj novčanici mjesecima. Jedan od ovih senzora koje sam pokupio je s Blue Radioa pod nazivom Sensor Bugs. Na Amazonu košta oko 25 USD, to je Bluetooth LE uređaj sa temperaturnim senzorom, svjetlosnim senzorom i akcelerometrom ugrađenim u malu jedinicu koja može komunicirati bežično. Ovo se savršeno uklapa u Raspberry Pi 3B, koji ima ugrađenu podršku za Bluetooth LE radio.

Korak 1: Postavljanje Raspberry Pi

Prvi korak je uspostaviti radnu postavku Raspberry Pi. Slijedite upute s web stranice Raspberry Pi, učitajte Raspbian na SD karticu, umetnite ga u Raspberry Pi i pokrenite ga. Postavio sam sustav s verzijom Raspbian Stretch Lite (bez grafičkog sučelja) studenog 2017. Po potrebi podesim WiFi, radije ću prilagoditi vremenske zone prema trenutnoj vremenskoj zoni umjesto UTC. To možete učiniti putem naredbe: $ sudo dpkg-reconfigure tzdataRest ostatka upute pretpostavlja da je postavljanje izvršeno putem sučelja naredbenog retka.

Korak 2: Postavljanje MySQL -a na Raspberry Pi

Bilo bi korisno imati lokalno instaliranu bazu podataka za spremanje svih snimljenih podataka. Instaliranje MySQL -a na Raspberry Pi je super jednostavno. Također nije teško izmijeniti skriptu za vanjsko povezivanje sa SQL poslužiteljem, možete preskočiti ovaj korak ako želite koristiti SQL poslužitelj na mreži. Na internetu postoji mnogo uputa, predlažem ovo: https:// www.stewright.me/2014/06/tutorial-install-…

Nakon što je SQL poslužitelj instaliran, možete koristiti MySQL CLI klijent za stvaranje korisnika, baze podataka i tablice. Da biste unijeli MySQL CLI, koristite naredbu:

$ sudo mysql -uroot -pPrvo, stvorite lokalnog korisnika za umetanje zarobljenih podataka:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Zatim stvorite bazu podataka i tablicu:> CREATE DATABASE SensorBug; Postavljanje korisnika dopuštenje:> ODOBRI SVE PRIVILEGIJE NA SensorBugu.* TO 'datasrc'@'localhost'; Sada dodajte novu tablicu u bazu podataka. U ovom primjeru dodat ću tablicu sa sljedećim stupcima: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE i ACCEROMETER

  • DATUM/VRIJEME - Ovo je datum i vrijeme snimanja podataka
  • ADRESA - Ovo je MAC SensorBug -a s kojeg je poruka snimljena
  • LOKACIJA - Ljudski čitljiv niz koji označava gdje se senzor nalazi
  • TEMPERATURA - Ovo je zabilježena temperatura
  • ACCELE - Ovo je vrijednost izlaza akcelerometra, korisna za snimanje položaja senzora (ako je omogućeno)

Naredba koja to radi je:> USE SensorBug; > CREATE TABLE data (datum DATE, vrijeme TIME, adresa TINYTEXT, lokacija TINYTEXT, temperatura FLOAT, ubrzanje INT); Sada je baza podataka spremna, možemo prijeći na postavljanje grešaka senzora.

Korak 3: Postavljanje SensorBugs -a

Greške senzora prilično su uredni mali uređaji. Nažalost, proizvođač je za programiranje dao samo IOS aplikaciju. Ipak, s njim je i dalje moguće raditi ako imate samo Android uređaj. Prvi korak, uparite uređaj s telefonom. Bez uparivanja uređaja, SensorBug neće oglašavati podatke. Pokušao sam vidjeti mogu li to učiniti izravno s RaspberryPi -om, nažalost, čini se da je Bluetooth LE upravljački program na RaspberryPi -u još uvijek eksperimentalan i sadrži greške koje ga sprječavaju u uparivanju s Bluetooth LE uređajima. Buduća verzija upravljačkog programa blueZ mogla bi to riješiti, ali kako trenutačno pišemo, ne postoji način da uparite SensorBug s RaspberryPi. Srećom, ne moramo upariti uređaj za hvatanje njegovih oglašavanih podataka. Jedino što nam treba je telefon za konfiguriranje SensorBuga. Prema zadanim postavkama, SensorBug će započeti oglašavanje podataka o temperaturi u intervalima od 1 s nakon što se upari s uređajem. Za snimanje podataka o temperaturi to je sve što je potrebno. Ako namjeravate proširiti upotrebu senzora položaja ili svjetla, tada će uređaj biti potreban za konfiguraciju. Za početak, uparit ćemo uređaj i prekinuti vezu. To će biti dovoljno dobro za snimanje temperature. Počnite pritiskom na oba gumba na SensorBug -u. Plavo/zelena LED lampica će treperiti, što znači da je uključena. Pritisnite jednu tipku, zelena LED lampica bi trebala zasvijetliti, što znači da je napajanje uključeno. Ako zelena LED lampica ne svijetli, pritisnite oba gumba da biste pokušali ponovno uključiti uređaj. Pritisnite i držite jednu od tipki dok plava LED lampica ne počne treptati. Ovo će prebaciti uređaj u način rada za uparivanje. Idite u Bluetooth konfiguracijski izbornik na telefonu i potražite SensorBug uređaj. Kad se pojavi, odaberite ga za uparivanje s uređajem. To je to, sada se napaja SensorBug i oglašava podatke o temperaturi

Korak 4: Instaliranje Bluetooth LE Python omotača

Zatim moramo instalirati biblioteku da bi python razgovarao s Bluetooth LE stekom. Upute se mogu pronaći ovdje: https://github.com/IanHarvey/bluepy Za Python 2.7, to je tako jednostavno kao da unesete sljedeće naredbe:

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

Korak 5: Skenirajte i saznajte adresu SensorBug -a

Da biste saznali SensorBug MAC adresu, upotrijebite ovu naredbu: $ sudo hcitool lescan Trebali biste vidjeti izlaz poput:

EC: FE: 7E: 10: B1: 92 (nepoznato) Ako imate puno bluetooth LE uređaja u blizini, možda će biti teško otkriti s kojim razgovarate. Možete isprobati bluetoothctl koji daje više detalja:

$ sudo bluetoothctl [bluetooth]# skeniranje na [NOVO] EC EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC EC uređaja: FE: 7E: 10: B1: 92 Podaci proizvođača proizvođača: 0x0085 [CHG] EC EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x02 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x00 [CHG] Vrijednost podataka uređaja: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x3c [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x25 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x09 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x41 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x02 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x02 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x43 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x0b [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Podaci proizvođača Vrijednost: 0x01 [CHG] Uređaj EC: FE: 7E: 10: B1: 92 Vrijednost podataka proizvođača: 0x6f

Zapišite MAC adresu. To će se morati unijeti u python skriptu za filtriranje neželjenih Bluetooth LE uređaja

Korak 6: Dodajte Python skriptu

Kopija Python skripte dostupna je na:

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

Ovdje je ista datoteka, vodite računa o uvlačenju pri kopiranju:

Također ažurirajte MAC adresu u python datoteci kako bi odgovarala adresi senzora dobivenoj iz rezultata skeniranja.

# Ovaj program je besplatan softver: možete ga dalje distribuirati i/ili mijenjati

# to pod uvjetima GNU Opće javne licence koju je objavio

# Zaklada za slobodni softver, bilo verzija 3 Licence, ili

# (prema vašem izboru) bilo koja kasnija verzija.

#

# Ovaj se program distribuira u nadi da će biti koristan, # ali BEZ BILO KAKVOG JAMSTVA; čak i bez impliciranog jamstva

# TRGOVINSKA SPOSOBNOST ili POSLOVNOST ZA POSEBNU SVRHU. Pogledajte

# Opća javna licenca GNU -a za više pojedinosti.

#

# Trebali ste primiti kopiju GNU Opće javne licence

# zajedno s ovim programom. Ako ne, vidi.

# bscan.py - Jednostavan bluetooth LE skener i ekstraktor podataka

iz skenera za uvoz bluepy.btle, DefaultDelegate

vrijeme uvoza

uvoz pymysql

uvozna struktura

hostname = 'localhost'

korisničko ime = 'datasrc'

lozinka = 'datasrc000'

database = 'SensorBug'

#Unesite MAC adresu senzora iz leska

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

SENSOR_LOCATION = ["Garaža", "Vanjština"]

klasa DecodeErrorException (iznimka):

def _init _ (sebe, vrijednost):

self.value = vrijednost

def _str _ (samo):

povrat repr (samo.vrijednost)

klasa ScanDelegate (DefaultDelegate):

def _init _ (samo):

DefaultDelegate._ init _ (samo)

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

ako je NewDev:

ispis "Otkriveni uređaj", dev.addr

elif jeNovi podaci:

ispis "Primljeni novi podaci od", dev.addr

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

#blesensor tablica je datum, vrijeme, adr, lokacija, temp, accro

cur = conn.cursor ()

dostr = 'UMETI VRIJEDNOSTI podataka (CURRENT_DATE (), SADA (), %s, %s, %s, %s);'

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

conn.commit ()

skener = Skener (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (host = ime hosta, korisnik = korisničko ime, passwd = lozinka, db = baza podataka)

ManuDataHex =

ReadLoop = Istina

probati:

while (ReadLoop):

uređaji = skener.scan (2.0)

ManuData = "" ManuData = ""

za programere u uređajima:

unos = 0

AcceroData = 0

AcceroType = 0

TempData = 0

za saddr na SENSOR_ADDRESS:

unos += 1

if (dev.addr == saddr):

ispis "Uređaj %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [ulaz-1]

za (vrsta oglasa, opis, vrijednost) u dev.getScanData ():

ispis " %s = %s" %(opis, vrijednost)

if (desc == "Proizvođač"):

ManuData = vrijednost

if (ManuData == ""):

ispis "Nema podataka, završi dekodiranje"

nastaviti

#print ManuData

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

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

#Počnite dekodiranje sirovih podataka proizvođača

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

ispis "Bajt zaglavlja 0x0085 je pronađen"

drugo:

ispis "Bajt zaglavlja 0x0085 nije pronađen, dekodiranje zaustavljeno"

nastaviti

#Skip Major/Minor

#Index 5 je 0x3c, označite razinu baterije i konfiguraciju #

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

Razina baterije = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

dok (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Podaci:" + heksadecimalno (ManuDataHex [idx])

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

#Podaci akcerometra

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Podaci o temperaturi

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

drugo:

idx += 1

ispis "Adresa uređaja:" + CurrentDevAddr

ispis "Lokacija uređaja:" + CurrentDevLoc

ispis "Razina baterije:" + str (Nivo baterije) + "%"

ispis "Config Counter:" + str (ConfigCounter)

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

ispis "Temp Data:" + str (TempData)

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

ReadLoop = Netačno

osim DecodeErrorException:

proći

Korak 7: Testirajte Python skriptu

Skripta se mora izvoditi u root -u, pa:

$ sudo python bscan.pyOtkriven uređaj ec: 6e: 7e: 10: b1: 92 Uređaj ec: 6e: 7e: 10: b1: 92 (javni), RSSI = -80 dB Zastavice = 06 Nepotpune 16b usluge = 0a18 Proizvođač = 850002003c25094102024309016f Zaglavlje bajt 0x0085 pronađeno Adresa uređaja: ec: 6e: 7e: 10: b1: 92 Lokacija uređaja: Garaža Razina baterije: 37% Brojilo konfiguracije: 9 Podaci Accero: 0x2 0x2 Temp. Podaci: 16.5625

Korak 8: Dodajte Python skriptu u Crontab

Python skripta mora se izvoditi u root -u, pa ako želite automatski snimiti podatke, morat će se dodati u root crotab korijena. U ovom primjeru pokrećem skriptu svakih 20 minuta. Koristite naredbu:

$ sudo crontab -e

# Uredite ovu datoteku da biste predstavili zadatke koje će pokrenuti cron.

# # Svaki zadatak koji treba izvesti mora biti definiran kroz jedan redak # koji s različitim poljima označava kada će se zadatak pokrenuti # i koju naredbu treba izvršiti za zadatak # # Za definiranje vremena možete navesti konkretne vrijednosti za # minutu (m), sat (h), dan u mjesecu (dom), mjesec (pon), # i dan u tjednu (dolje) ili upotrijebite '*' u ovim poljima (za 'bilo koje'). # # Uočite da će zadaci biti započeti temelji se na cronovom sustavu # demonov pojam vremena i vremenskih zona. # # Izlaz poslova crontab (uključujući pogreške) šalje se putem # e -pošte korisniku kojem datoteka crontab pripada (osim ako nije preusmjeren). # # Na primjer, možete pokrenuti sigurnosnu kopiju svih svojih korisničkih računa # u 5 ujutro svaki tjedan s: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Za više informacija pogledajte ručne stranice crontab (5) i cron (8) # # mh dom mon naredba dolje 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

To je to. Python skripta će se izvoditi u redovitim intervalima i ponovno će dekodirati izlaz u SQL bazu podataka

Korak 9: Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja

Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja
Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja
Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja
Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja

Moguće je konfigurirati SensorBug na Androidu za izlaz senzora položaja. Za otkrivanje promjene položaja, tzv. Garažna vrata.osjećanje, SensorBug će otkriti stoji li uređaj uspravno ili leži ravno. Kad je uređaj ravan, zabilježena vrijednost je 0x20 dok ako uređaj stoji uspravno, vrijednost je 0x02Ne razlikuje se ako je položaj X ili Y gore, sve dok os Z nije gore ili dolje. Najlakši način za to je upotreba aplikacije LightBlue. SensorBug bi se trebao pojaviti u izborniku za skeniranje. Odaberite uređaj koji želite konfigurirati, idite na GATT karakteristike za konfiguraciju Accelerometra UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Pogledajte sliku: Napišite novi niz konfiguracije:

010d3f02020000002d00000002Vratite konfiguracijski niz kako biste potvrdili upis. To omogućuje mjerač ubrzanja za otkrivanje položaja.

Preporučeni: