Kazalo:
- 1. korak: Namestite Raspberry Pi
- 2. korak: Nastavitev MySQL na Raspberry Pi
- 3. korak: Nastavitev senzorskih napak
- 4. korak: Namestitev Bluetooth LE Python Wrapperja
- 5. korak: Skenirajte in poiščite naslov SensorBug
- 6. korak: Dodajte skript Python
- 7. korak: Preizkusite skript Python
- 8. korak: Dodajte skript Python v Crontab
- 9. korak: Dodatno: Konfigurirajte SensorBug za izhod za zaznavanje položaja
Video: Spremljajte in snemajte temperaturo z Bluetooth LE in RaspberryPi: 9 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
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
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:
Spremljajte temperaturo in vlažnost z AM2301 na NodeMCU & Blynk: 3 koraki
Spremljajte temperaturo in vlažnost z AM2301 na NodeMCU & Blynk: Zelo dobro je znano dejstvo, da v večini industrijskih navpičnic, temperatura, vlaga, tlak, kakovost zraka, kakovost vode itd. Igrajo pomembno vlogo pri stalnem in nujnem spremljanju opozorilni sistemi morajo biti vzpostavljeni, ko vrednost
Vremenski monitor na osnovi ESP32 M5Stack M5stick C z DHT11 - Spremljajte indeks temperature in vlažnosti ter toplote na M5stick-C z DHT11: 6 korakov
Vremenski monitor na osnovi ESP32 M5Stack M5stick C z DHT11 | Spremljajte indeks temperaturne vlažnosti in toplote na M5stick-C z DHT11: Pozdravljeni fantje, v tem navodilu se bomo naučili povezovati temperaturni senzor DHT11 z m5stick-C (razvojna plošča m5stack) in ga prikazati na zaslonu m5stick-C. Tako bomo v tem vodiču prebrali temperaturo, vlažnost & toploto
Spremljajte temperaturo v domu/pisarni na namizju: 4 koraki
Spremljanje sobne temperature doma/pisarne na vašem namizju: Za spremljanje sob ali pisarn ali kjer koli lahko uporabimo ta projekt, ki je prikazan s toliko podrobnostmi, kot so graf, temperatura v realnem času in še veliko več. Uporabljamo: https://thingsio.ai/ Najprej moramo ustvariti račun na tej platformi IoT,
Projekt toplogrednih plinov (RAS): Spremljajte elemente za odzivanje na našem nasadu: 18 korakov (s slikami)
Projekt toplogrednih plinov (RAS): Spremljajte elemente, ki se odzivajo na naš nasad: Ta projekt predlaga spremljanje temperature zraka, svetilnosti in vlažnosti ter temperature in vlažnosti gozdov. Predlaga tudi povezovanje teh ukrepov, ki so tako berljivi na spletnem mestu Actoborad.com. Če želite to narediti, povežemo 4 senzorje z N
SPREMLJAJTE VAŠ VRT: 16 korakov (s slikami)
SPREMLJAJTE VAŠ VRT: Spremljajte svoj vrt od kjer koli, uporabite lokalni zaslon za lokalno spremljanje stanja tal ali uporabite Mobile za daljinsko spremljanje. Vezje uporablja senzor vlage v tleh skupaj s temperaturo in vlažnostjo, da ozavesti stanje okolja v tleh