Përmbajtje:

Monitoroni dhe regjistroni temperaturën me Bluetooth LE dhe RaspberryPi: 9 hapa (me fotografi)
Monitoroni dhe regjistroni temperaturën me Bluetooth LE dhe RaspberryPi: 9 hapa (me fotografi)

Video: Monitoroni dhe regjistroni temperaturën me Bluetooth LE dhe RaspberryPi: 9 hapa (me fotografi)

Video: Monitoroni dhe regjistroni temperaturën me Bluetooth LE dhe RaspberryPi: 9 hapa (me fotografi)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Nëntor
Anonim
Monitoroni dhe Regjistroni Temperaturën Me Bluetooth LE dhe RaspberryPi
Monitoroni dhe Regjistroni Temperaturën Me Bluetooth LE dhe RaspberryPi
Monitoroni dhe Regjistroni Temperaturën Me Bluetooth LE dhe RaspberryPi
Monitoroni dhe Regjistroni Temperaturën Me Bluetooth LE dhe RaspberryPi

Ky udhëzues ka të bëjë me mënyrën e krijimit të një sistemi të monitorimit të temperaturës me shumë nyje me defektin e sensorit Bluetooth LE nga Blue Radios (BLEHome) dhe RaspberryPi 3B Falë zhvillimit të standardit Bluetooth LE, tani ka në dispozicion sensorë pa tel me fuqi të ulët të gatshme në treg. me kosto shumë të ulët dhe mund të funksionojë në një qelizë të vetme monedhe për muaj në të njëjtën kohë. Një nga këta sensorë që mora është nga Blue Radio i quajtur Sensor Bugs. Kushton rreth 25 dollarë në Amazon, është një pajisje Bluetooth LE me sensorë të temperaturës, sensor të dritës dhe akrometër, të gjitha të ndërtuara në një njësi të vogël që mund të komunikojë pa tel. Kjo është një ndeshje e përkryer për Raspberry Pi 3B, e cila ka ndërtuar në mbështetje të radios Bluetooth LE Me

Hapi 1: Konfiguroni Raspberry Pi

Hapi i parë është të merrni një konfigurim të punës të Raspberry Pi. Ndiqni udhëzimet nga faqja e internetit e Raspberry Pi, ngarkoni Raspbian në një kartë SD, futeni në Raspberry Pi dhe niseni atë. Unë e konfigurova sistemin tim me versionin Raspbian Stretch Lite (Pa GUI) Nëntor 2017. Konfiguro WiFi nëse është e nevojshme, preferoj të rregulloj zona kohore në zonën kohore aktuale në vend të UTC. Ju mund ta bëni këtë me anë të komandës: $ sudo dpkg-rikonfiguroni tzdataResti i udhëzimit supozoni se konfigurimi është bërë përmes ndërfaqes së linjës së komandës.

Hapi 2: Vendosja e MySQL në Raspberry Pi

Usefulshtë e dobishme të keni një bazë të dhënash të instaluar në vend për të ruajtur të gjitha të dhënat e kapura. Instalimi i MySQL në Raspberry Pi është super i lehtë. Gjithashtu nuk është e vështirë të modifikoni skriptin për t'u lidhur me një server SQL nga jashtë, mund ta kaloni këtë hap nëse dëshironi të përdorni një server SQL në rrjet. Ka shumë udhëzime në rrjet, unë sugjeroj këtë: https:// www.stewright.me/2014/06/tutorial-install-…

Pasi të jetë instaluar serveri SQL, mund të përdorni klientin MySQL CLI për të krijuar përdoruesin, bazën e të dhënave dhe tabelën. Për të hyrë në MySQL CLI, përdorni komandën:

$ sudo mysql -uroot -pSë pari, krijoni një përdorues lokal për të futur të dhënat e kapura:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Tjetra, krijoni një bazë të dhënash dhe tabelë:> CREATE BAZA E TAT DHATNAVE SensorBug; Konfigurimi i përdoruesit leja:> JEPI T ALL GJITHA PRIVILEGJET N S SensorBug.* TE 'datasrc'@'localhost'; Tani shtoni një tabelë të re në bazën e të dhënave. Për këtë shembull, unë do të shtoj një tabelë me kolonat e mëposhtme: DATA, KOHA, ADRESA, LOKACIONI, TEMPERATURA dhe ACCEROMETER

  • DATA/KOHA - Kjo është data dhe koha kur regjistrohen të dhënat
  • ADRESA - Ky është MAC i SensorBug nga i cili kapet mesazhi
  • LOKACIONI - Një varg i lexueshëm nga njerëzit për të treguar se ku ndodhet sensori
  • TEMPERATURA - Kjo është temperatura e regjistruar
  • ACCELE - Kjo është vlera e daljes së akselerometrit, e dobishme për regjistrimin e pozicionit të sensorit (nëse është e aktivizuar)

Komanda që e bën këtë është:> USE SensorBug; > Krijoni të dhëna TABELA (data DATA, koha KOHA, adresa TINYTEXT, vendndodhja TINYTEXT, temperatura FLOAT, shpejtimi INT); Tani baza e të dhënave është gati, mund të kalojmë në konfigurimin e sensorëveBugs.

Hapi 3: Vendosja e SensorBugs

Gabimet e sensorëve janë pajisje të vogla mjaft të pastra. Fatkeqësisht, prodhuesi siguroi vetëm aplikacionin IOS për programimin e tij. Sidoqoftë, është akoma e mundur të punosh me të nëse ke vetëm një pajisje Android. Hapi i parë, çiftoni pajisjen me një telefon. Pa e çiftuar pajisjen, SensorBug nuk do të reklamojë të dhëna. Unë u përpoqa të shikoja nëse mund ta bëj këtë drejtpërdrejt me RaspberryPi, për fat të keq, duket se drejtuesi i Bluetooth LE në RaspberryPi është ende eksperimental dhe përmban gabime për ta parandaluar atë nga çiftimi me pajisjet Bluetooth LE. Versioni i ardhshëm i shoferit blueZ mund ta rregullojë këtë, por siç shkruhet aktualisht, nuk ka asnjë mënyrë për të çiftuar SensorBug me RaspberryPi. Për fat të mirë, ne nuk kemi nevojë të çiftojmë pajisjen për të kapur të dhënat e saj të reklamuara. E vetmja gjë që na nevojitet është një telefon për të konfiguruar SensorBug. Si parazgjedhje, SensorBug do të fillojë të reklamojë të dhënat e temperaturës në intervalin 1s sapo të çiftëzohet me një pajisje. Për të kapur të dhënat e temperaturës, kjo është gjithçka që nevojitet. Nëse planifikoni të zgjeroheni për të përdorur pozicionin ose sensorin e dritës, atëherë konfigurimi i pajisjes do të jetë i nevojshëm. Për të filluar, ne do të çiftojmë pajisjen dhe do të shkëputemi. Kjo do të jetë mjaft e mirë për qëllimin e kapjes së temperaturës. Filloni duke shtypur të dy butonat në SensorBug. LED blu/jeshil do të pulsojë, gjë që tregon se është ndezur. Shtypni njërën prej butonave, LED i gjelbër duhet të ndizet, tregoni se fuqia është e ndezur. Nëse LED jeshil nuk është ndezur, shtypni të dy butonin për të provuar të ndizni pajisjen përsëri. Shtypni dhe mbani njërën prej butonave derisa LED blu të fillojë të pulsojë. Kjo do ta vendosë pajisjen në modalitetin e çiftimit. Shkoni në menunë e konfigurimit Bluetooth në telefon dhe kërkoni pajisjen SensorBug. Pasi të shfaqet, zgjidhni atë për t'u çiftuar me pajisjen. Kjo është ajo, tani SensorBug është mundësuar dhe reklamon të dhënat e temperaturës

Hapi 4: Instalimi i Bluetooth LE Python Wrapper

Tjetra ne duhet të instalojmë bibliotekën për python për të folur me stivën Bluetooth LE. Udhëzimi mund të gjendet këtu: https://github.com/IanHarvey/bluepyPër Python 2.7, është aq e thjeshtë sa të futësh komandat e mëposhtme:

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

Hapi 5: Skanoni dhe gjeni adresën e SensorBug

Për të gjetur adresën Mens të SensorBug, përdorni këtë komandë: $ sudo hcitool lescan Duhet të shihni daljen si:

EC: FE: 7E: 10: B1: 92 (e panjohur) Nëse keni shumë pajisje Bluetooth LE përreth, mund të jetë e vështirë të zbuloni se me cilën po flisni. Mund të provoni bluetoothctl i cili jep më shumë detaje:

$ sudo bluetoothctl [bluetooth]# skanim në [E RE] Pajisja EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Prodhuesi Çelësi i të dhënave: 0x0085 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të dhënave të prodhuesit: 0x02 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të dhënave të prodhuesit: 0x00 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të dhënave të prodhuesit: 0x3c [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave: 0x25 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave të Prodhuesit: 0x09 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave të Prodhuesit: 0x41 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave të Prodhuesit: 0x02 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave të Prodhuesit: 0x02 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Vlera e të Dhënave të Prodhuesit: 0x43 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Prodhuesi Vlera e të dhënave: 0x0b [CHG] Pajisja EC: FE: 7E: 10: B1: 92 ProdhuesiData Vlera: 0x01 [CHG] Pajisja EC: FE: 7E: 10: B1: 92 Prodhuesi Vlera e të dhënave: 0x6f

Regjistroni adresën MAC, kjo do të duhet të futet në shkrimin python për të filtruar pajisjet e padëshiruara Bluetooth LE

Hapi 6: Shtoni Skriptin Python

Një kopje e shkrimit Python është në dispozicion nga:

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

Këtu është e njëjta skedar, kujdesuni për indentin kur kopjoni:

Gjithashtu, përditësoni adresën MAC në skedarin python që të përputhet me adresën e sensorit të marrë nga rezultati i skanimit.

# Ky program është softuer falas: mund ta rishpërndani dhe/ose modifikoni

# ajo sipas kushteve të Licencës së Përgjithshme Publike GNU siç është botuar nga

# Fondacioni i Softuerit të Lirë, ose versioni 3 i Licencës, ose

# (sipas dëshirës tuaj) çdo version të mëvonshëm.

#

# Ky program shpërndahet me shpresën se do të jetë i dobishëm, # por pa asnjë garanci; pa as garancinë e nënkuptuar të

# TREGTUESHMRI ose P FRSHTATSI P FORR Q ALLIM T VETM. Shihni

# Licencë e Përgjithshme Publike GNU për më shumë detaje.

#

# Ju duhet të kishit marrë një kopje të Licencës së Përgjithshme Publike GNU

# së bashku me këtë program. Nëse jo, shihni.

# bscan.py - Skaner i thjeshtë bluetooth LE dhe nxjerrës i të dhënave

nga skaneri i importit bluepy.btle, DefaultDelegate

koha e importit

importo pymysql

struktura e importit

hostname = 'localhost'

emri i përdoruesit = 'datasrc'

fjalëkalim = 'datasrc000'

baza e të dhënave = 'SensorBug'

#Futni adresën MAC të sensorit nga lescan

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

SENSOR_LOCATION = ["Garazh", "Jashtë"]

klasa DecodeErrorException (Përjashtim):

def _init _ (vetja, vlera):

veta.vlera = vlera

def _str _ (vetja):

kthim repr (vlera e vetes)

klasa ScanDelegate (DefaultDelegate):

def _init _ (vetja):

DefaultDelegate._ init _ (vetë)

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

nëse ështëNewDev:

print "Pajisja e zbuluar", dev.addr

elif ështëData e Re:

print "Marrë të dhëna të reja nga", dev.addr

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

Tabela #blesensor është data, koha, adr, vendndodhja, temp, accero

cur = conn.cursor ()

dostr = 'HYR NO VLERAT E T data DHNAVE (CURRENT_DATE (), TANI (), %s, %s, %s, %s);'

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

conn.commit ()

skaner = Skaner (). meDelegate (ScanDelegate ())

myConnection = pymysql.connect (host = emri i hostit, përdoruesi = emri i përdoruesit, passwd = fjalëkalimi, db = baza e të dhënave)

ManuDataHex =

ReadLoop = E vërtetë

provo:

ndërsa (ReadLoop):

pajisje = skaner. skanim (2.0)

ManuData = ""

për dev në pajisjet:

hyrje = 0

AcceroData = 0

AcceroType = 0

TempData = 0

për saddr në SENSOR_ADDRESS:

hyrja += 1

nëse (dev.addr == saddr):

print "Pajisja %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [hyrja-1]

për (adtype, desc, value) në dev.getScanData ():

print " %s = %s" %(desc, vlera)

nëse (desc == "Prodhuesi"):

ManuData = vlera

nëse (ManuData == ""):

print "Nuk janë marrë të dhëna, përfundo deshifrimin"

vazhdo

#print ManuData

për i, j në zip (ManuData [:: 2], ManuData [1:: 2]):

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

#Filloni deshifrimin e të dhënave të papërpunuara të Prodhuesit

nëse ((ManuDataHex [0] == 0x85) dhe (ManuDataHex [1] == 0x00)):

print "Bajti i kokës 0x0085 u gjet"

tjeter:

print "Bajti i kokës 0x0085 nuk u gjet, dekodimi ndalon"

vazhdo

#Skip Major/I Vogël

#Index 5 është 0x3c, tregoni nivelin e baterisë dhe konfiguroni #

nëse (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

ndërsa (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Të dhënat:" + gjashtëkëndësh (ManuDataHex [idx])

nëse (ManuDataHex [idx] == 0x41):

#Të dhëna të akrometrit

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Të dhëna të temperaturës

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx += 2

tjeter:

idx += 1

printoni "Adresa e pajisjes:" + CurrentDevAddr

printoni "Vendndodhja e pajisjes:" + CurrentDevLoc

printoni "Niveli i baterisë:" + str (BatteryLevel) + "%"

printoni "Countig Config:" + str (ConfigCounter)

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

shtyp "Temp Data:" + str (TempData)

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

ReadLoop = E gabuar

përveç DecodeErrorException:

kaloj

Hapi 7: Provoni Skriptin Python

Skenari duhet të ekzekutohet në rrënjë, kështu që:

$ sudo python bscan.py Pajisja e zbuluar ec: 6e: 7e: 10: b1: 92 Pajisja ec: 6e: 7e: 10: b1: 92 (publike), RSSI = -80 dB Flamujt = 06 Shërbimet jo të plota 16b = 0a18 Prodhuesi = 850002003c25094102024309016f Header byte 0x0085 u gjet Adresa e pajisjes: ec: 6e: 7e: 10: b1: 92 Vendndodhja e pajisjes: Garazh Niveli i baterisë: 37% Counter Config: 9 Accero Data: 0x2 0x2 Temp Data: 16.5625

Hapi 8: Shtoni Python Scrip në Crontab

Skenari python duhet të ekzekutohet në rrënjë, kështu që nëse doni të kapni të dhënat automatikisht, do të duhet të shtohet në crontab të rrënjës. Për këtë shembull, unë ekzekutoj skriptin çdo 20 minuta Përdorni komandën:

$ sudo crontab -e

# Redaktoni këtë skedar për të prezantuar detyrat që do të drejtohen nga cron.

# # Çdo detyrë për t'u ekzekutuar duhet të përcaktohet përmes një rreshti të vetëm # duke treguar me fusha të ndryshme kur detyra do të ekzekutohet # dhe çfarë komande të ekzekutohet për detyrën # # Për të përcaktuar kohën mund të jepni vlera konkrete për # minuta (m), ora (h), dita e muajit (dom), muaji (e hënë), # dhe dita e javës (dow) ose përdorni '*' në këto fusha (për 'çdo'). # # Vini re se detyrat do të fillojnë bazuar në nocionin e sistemit të kronit # daemon për kohën dhe zonat kohore. # # Dalja e punëve të crontab (përfshirë gabimet) i dërgohet përmes # email përdoruesit të cilit i përket skedari crontab (nëse nuk ridrejtohet). # # Për shembull, mund të bëni një kopje rezervë të të gjitha llogarive tuaja të përdoruesit # në 5 të mëngjesit çdo javë me: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Për më shumë informacion shikoni faqe manuale të crontab (5) dhe cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Kjo eshte. Skripti python do të ekzekutohet në interval të rregullt dhe do të rikodojë daljen në bazën e të dhënave SQL

Hapi 9: Extra: Konfiguroni SensorBug për Position Sensing Output

Extra: Konfiguroni SensorBug për Position Sensing Output
Extra: Konfiguroni SensorBug për Position Sensing Output
Extra: Konfiguroni SensorBug për Position Sensing Output
Extra: Konfiguroni SensorBug për Position Sensing Output

Ensshtë e mundur të konfiguroni SensorBug në Android për daljen e ndjesisë së pozicionit Për ndijimin e ndryshimit të pozicionit, të ashtuquajtur derë Garage. Sensing, SensorBug do të zbulojë nëse pajisja qëndron drejt ose shtrihet e sheshtë. Kur pajisja është e sheshtë, vlera e regjistruar është 0x20 ndërsa nëse pajisja qëndron drejt, vlera është 0x02 Nuk ndryshon nëse pozicioni X ose Y është lart, përderisa boshti Z nuk është lart ose poshtë. Mënyra më e lehtë për ta bërë këtë është të përdorni LightBlue App. SensorBug duhet të shfaqet në menunë e skanimit. Zgjidhni pajisjen që dëshironi të konfiguroni, shkoni te karakteristikat e GATT për konfigurimin e Përshpejtuesit UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Shikoni imazhin: Shkruani një varg të ri konfigurimi:

010d3f02020000002d00000002Lexoni mbrapsht vargun e konfigurimit për të konfirmuar shkrimin. Kjo mundëson përshpejtuesin për zbulimin e pozicionit.

Recommended: