Sadržaj:
- Korak 1: Postavite 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 izmjena: 2024-01-30 08:07
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
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:
Pratite temperaturu i vlažnost sa AM2301 na NodeMCU & Blynk: 3 koraka
Pratite temperaturu i vlažnost zraka s AM2301 na NodeMCU & Blynk: Vrlo je poznata činjenica da u većini industrijskih vertikala, temperatura, vlažnost, tlak, kvaliteta zraka, kvaliteta vode itd. Igraju važne faktore koje treba stalno pratiti i neophodne Sistemi upozorenja moraju biti uspostavljeni kada vrijednost
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 zasnovan na IoT-u koji prikazuje podatke o slučajevima, smrti i oporavljenim osobama od koronavirusa (COVID-19) u stvarnom vremenu
Pratite linijskog robota: 8 koraka (sa slikama)
Pratite linijskog robota: Možda ste vidjeli ovu malu liniju koja prati robota na ebayu, vrlo su jeftini i odlični za djecu. Ovo uputstvo je namijenjeno maloj djeci ili velikoj djeci koja žele napraviti jednostavnog robota. Kad jednom postignete uspjeh sa svojim robotom i imate
Pratite galone spremnika za grijanje s e -poštom, SMS -om i upozorenjem Pushbullet: 9 koraka (sa slikama)
Pratite galone spremnika za grijanje s upozorenjem e -poštom, SMS -om i pushbulletom: SIGURNOSNE INFORMACIJE: U slučaju da neko želi znati je li " ovo sigurno za izgradnju/instaliranje " - Odnio sam ovo u dvije različite naftne kompanije radi povratnih informacija/sigurnosnih razmatranja, a vodio sam ga zamjenik vatrogasne službe za prevenciju požara C
Pratite temperaturu prostorije u kući/uredu na radnoj površini: 4 koraka
Nadgledajte temperaturu prostorije u kući/uredu na radnoj površini: Za praćenje prostorija ili ureda ili bilo gdje gdje možemo koristiti ovaj projekt, a to je prikaz sa 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