Sadržaj:
- Korak 1: Postavljanje Raspberry Pi
- Korak 2: Postavljanje MySQL -a na Raspberry Pi
- Korak 3: Postavljanje SensorBugs -a
- Korak 4: Instaliranje Bluetooth LE Python omotača
- Korak 5: Skenirajte i saznajte adresu SensorBug -a
- Korak 6: Dodajte Python skriptu
- Korak 7: Testirajte Python skriptu
- Korak 8: Dodajte Python skriptu u Crontab
- Korak 9: Dodatno: Konfigurirajte SensorBug za izlaz osjetljivosti položaja
Video: Pratite i bilježite temperaturu s Bluetooth LE i RaspberryPi: 9 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
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
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:
Pratite temperaturu i vlažnost zraka s AM2301 na NodeMCU & Blynk: 3 koraka
Pratite temperaturu i vlagu s AM2301 na NodeMCU & Blynk: Vrlo je poznata činjenica da u većini industrijskih vertikala, temperatura, vlaga, tlak, kvaliteta zraka, kvaliteta vode itd. Igraju važne čimbenike koje treba stalno pratiti i nužno sustavi uzbunjivanja moraju biti uspostavljeni kada vrijednost
35 USD Bežično Pratite fokus s dizalice 2: 5 koraka
Bežično praćenje fokusa od 35 USD s dizalice 2: Učinimo bežično praćenje fokusa od 35 USD za vašu kameru. Ovo može biti izvrsno za upotrebu na setovima filmova sa namjenskim izvlakačem fokusa i može se koristiti za bežično podešavanje zuma ili fokusa bilo koje kamere
Pratite izbijanje COVID-19 prema ESP8266: 11 koraka (sa slikama)
Pratite epidemiju COVID-19 prema ESP8266: Ovaj mali gadget pomoći će vam da budete u toku sa epidemijom koronavirusa i situacijom u vašoj zemlji. Ovo je projekt temeljen na IoT-u koji prikazuje podatke u stvarnom vremenu o slučajevima, smrti i oporavljenih osoba od koronavirusa (COVID-19)
Pratite temperaturu prostorije u kući/uredu na radnoj površini: 4 koraka
Pratite temperaturu prostorije u kući/uredu na radnoj površini: Za praćenje soba ili ureda ili bilo gdje gdje možemo koristiti ovaj projekt, a to je prikaz s toliko detalja poput grafikona, temperature u stvarnom vremenu i još mnogo toga. Koristimo: https://thingsio.ai/ Prije svega, moramo napraviti račun na ovoj IoT platformi
Projekt staklenika (RAS): Pratite elemente reagiranja na našoj plantaži: 18 koraka (sa slikama)
Projekt staklenika (RAS): Nadzor elemenata koji reagiraju na našoj plantaži: Ovaj projekt predlaže praćenje temperature zraka, svjetline i vlažnosti, kao i temperature i vlažnosti šumaraka. Predlaže i umrežavanje ovih mjera koje su tako čitljive na web stranici Actoborad.com. Da bismo to učinili, povezujemo 4 senzora na N