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, Juli
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 sistem sa više čvorova za praćenje temperature sa 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 iz Blue Radioa pod nazivom Sensor Bugs. Na Amazonu košta oko 25 USD, to je Bluetooth LE uređaj sa temperaturnim senzorom, senzorom svjetlosti 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: Postavite Raspberry Pi

Prvi korak je uspostaviti radnu postavku Raspberry Pi. Slijedite upute sa web stranice Raspberry Pi, učitajte Raspbian na SD karticu, umetnite ga u Raspberry Pi i pokrenite ga. Postavio sam svoj sistem s verzijom Raspbian Stretch Lite (bez grafičkog sučelja) u studenom 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 instrukcija pretpostavlja da je postavljanje obavljeno putem sučelja naredbenog retka.

Korak 2: Postavljanje MySQL -a na Raspberry Pi

Bilo bi korisno imati lokalno instaliranu bazu podataka za pohranu 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 server instaliran, možete koristiti MySQL CLI klijent za kreiranje korisnika, baze podataka i tablice. Da biste unijeli MySQL CLI, koristite naredbu:

$ sudo mysql -uroot -pPrvo, stvorite lokalnog korisnika za umetanje snimljenih podataka:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Zatim kreirajte bazu podataka i tablicu:> CREATE DATABASE SensorBug; Postavljanje korisnika dozvola:> ODOBRI SVE PRIVILEGIJE NA SensorBugu.* TO 'datasrc'@'localhost'; Sada dodajte novu tablicu u bazu podataka. Za ovaj primjer, dodaću tablicu sa sljedećim kolonama: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE i ACCEROMETER

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

Naredba koja ovo 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 su prilično uredni mali uređaji. Nažalost, proizvođač je za programiranje ponudio 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 bi to mogla popraviti, ali kako trenutno piše, ne postoji način da uparite SensorBug s RaspberryPi. Na sreću, ne moramo upariti uređaj za hvatanje oglašavanih podataka. Jedino što nam treba je telefon za konfiguriranje SensorBug -a. 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 planirate 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 jedno dugme, 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 ponovo uključiti uređaj. Pritisnite i držite jedno od dugmadi dok plava LED lampica ne počne treptati. Ovo će prebaciti uređaj u način rada za uparivanje. Idite u Bluetooth konfiguracijski meni na telefonu i potražite SensorBug uređaj. Kad se pojavi, odaberite ga za uparivanje s uređajem. To je to, sada se SensorBug napaja 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 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, koristite 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 Ključ podataka 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] Vrijednost podataka uređaja uređaja: 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 Podaci o proizvođaču Vrijednost: 0x6f

Snimite MAC adresu, morat ćete to unijeti u python skriptu kako biste filtrirali neželjene Bluetooth LE uređaje

Korak 6: Dodajte Python skriptu

Kopija Python skripte dostupna je na:

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

Evo iste datoteke, 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 distribuirati i/ili izmijeniti

# to pod uslovima GNU Opšte javne licence koju je objavio

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

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

#

# Ovaj program se distribuira u nadi da će biti koristan, # ali BEZ BILO KAKVE GARANCIJE; čak i bez implicitne garancije

# TRGOVINSKA MOGUĆNOST ili POSLOVNOST ZA POSEBNU SVRHU. Pogledajte

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

#

# Trebali ste primiti kopiju GNU Opće javne licence

# zajedno s ovim programom. Ako ne, pogledajte.

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

sa skenera za uvoz bluepy.btle, DefaultDelegate

vreme uvoza

import pymysql

import struct

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 (Izuzetak):

def _init _ (sebe, vrijednost):

self.value = vrijednost

def _str _ (samo):

povratak repr. (self.value)

klasa ScanDelegate (DefaultDelegate):

def _init _ (samo):

DefaultDelegate._ init _ (samo)

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

ako jeNewDev:

ispis "Otkriveni uređaj", dev.addr

elif isNovi podaci:

ispis "Primljeni novi podaci od", dev.addr

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

#blesensor tablica je datum, vrijeme, adresa, lokacija, temp, naglasak

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 = Tačno

probaj:

while (ReadLoop):

uređaji = scanner.scan (2.0)

ManuData = ""

za programere u uređajima:

ulaz = 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 (tip oglasa, opis, vrijednost) u dev.getScanData ():

ispiši " %s = %s" %(opis, vrijednost)

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

ManuData = vrijednost

if (ManuData == ""):

ispis "Nema podataka, završi dekodiranje"

nastavi

#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"

nastavi

#Skip Major/Minor

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

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 "Podaci:" + heksadecimalno (ManuDataHex [idx])

if (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

ispisati "Adresa uređaja:" + CurrentDevAddr

ispis "Lokacija uređaja:" + CurrentDevLoc

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

ispisati "Config Counter:" + str (ConfigCounter)

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

ispisati "Temp Data:" + str (TempData)

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

ReadLoop = Netačno

osim DecodeErrorException:

pass

Korak 7: Testirajte Python skriptu

Skripta mora biti pokrenuta 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 Zastave = 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 Nivo baterije: 37% Brojilo konfiguracije: 9 Accero Podaci: 0x2 0x2 Temp. Podaci: 16.5625

Korak 8: Dodajte Python skriptu u Crontab

Python skripta mora biti pokrenuta u root -u, pa ako želite automatski snimiti podatke, morat će se dodati u root crotab korijena. Za ovaj primjer, 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 pokrenuti mora biti definiran kroz jednu liniju # koja označava s različitim poljima kada će se zadatak pokrenuti # i koju naredbu treba izvršiti za zadatak # # Da biste definirali vrijeme možete navesti konkretne vrijednosti za # minutu (m), sat (h), dan u mjesecu (dom), mjesec (pon), # i dan u sedmici (dolje) ili upotrijebite '*' u ovim poljima (za 'bilo koje'). # # Primijetite da će zadaci biti započeti zasnovano na sistemu crona # demonov pojam vremena i vremenskih zona. # # Izlaz poslova crontab (uključujući greš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 svake sedmice sa: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Za više informacija pogledajte stranice priručnika 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 redovnim intervalima i ponovo ć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 mjerenje položaja, tzv. Garažna vrata.osjećanje, SensorBug će otkriti stoji li uređaj uspravno ili leži ravno. Kada 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 akcelerometra UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Pogledajte sliku: Napišite novi niz konfiguracije:

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

Preporučuje se: