Innehållsförteckning:
- Steg 1: Konfigurera Raspberry Pi
- Steg 2: Konfigurera MySQL på Raspberry Pi
- Steg 3: Konfigurera SensorBugs
- Steg 4: Installera Bluetooth LE Python Wrapper
- Steg 5: Skanna och ta reda på adressen till SensorBug
- Steg 6: Lägg till Python Script
- Steg 7: Testa Python Script
- Steg 8: Lägg till Python Scrip i Crontab
- Steg 9: Extra: Konfigurera SensorBug för lägesavkänning
Video: Övervaka och registrera temperatur med Bluetooth LE och RaspberryPi: 9 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Den här instruerbara handlingen handlar om hur man sätter ihop ett temperaturövervakningssystem med flera noder med Bluetooth LE-sensorbugg från Blue Radios (BLEHome) och RaspberryPi 3B Tack vare utvecklingen av Bluetooth LE-standarden finns det nu lätt tillgängliga trådlösa sensorer på marknaden på marknaden för mycket låg kostnad och kan köras på en enda myntcell i månader i taget. En av dessa sensorer jag plockade är från Blue Radio som kallas Sensor Bugs. Kostar cirka $ 25 på Amazon, det är en Bluetooth LE -enhet med temperatursensor, ljussensor och accerometer, alla inbyggda i en liten enhet som kan kommunicera trådlöst. Detta är en perfekt matchning för Raspberry Pi 3B, som har inbyggt stöd för Bluetooth LE -radio.
Steg 1: Konfigurera Raspberry Pi
Första steget är att få en fungerande Raspberry Pi -installation. Följ instruktionerna från Raspberry Pi: s webbplats, ladda Raspbian på ett SD -kort, sätt in i Raspberry Pi och starta upp det. Jag installerar mitt system med Raspbian Stretch Lite (No GUI) version november 2017. Konfigurera WiFi om det behövs, jag föredrar att justera tidszon till den aktuella tidszonen istället för UTC. Du kan göra detta även om kommandot: $ sudo dpkg-omkonfigurera tzdataRest av instruktionen antar att installationen är klar genom kommandoradsgränssnittet.
Steg 2: Konfigurera MySQL på Raspberry Pi
Det är användbart att ha en databas installerad lokalt för att lagra alla fångade data. Att installera MySQL på Raspberry Pi är superenkelt. Det är inte heller svårt att ändra skriptet för att ansluta till en SQL -server externt, du kan hoppa över det här steget om du vill använda en SQL -server i nätverket. Det finns många instruktioner på nätet, jag föreslår detta: https:// www.stewright.me/2014/06/tutorial-install-…
När SQL -servern är installerad kan du använda MySQL CLI -klienten för att skapa användare, databas och tabell. För att ange MySQL CLI, använd kommandot:
$ sudo mysql -uroot -pFörst skapar du en lokal användare för att infoga fångad data:> SKAPA ANVÄNDARE 'datasrc'@'localhost' IDENTIFIERAD MED 'datasrc000'; Skapa sedan en databas och tabell:> SKAPA DATABASE SensorBug; Ställ in användaren tillstånd:> bevilja alla PRIVILEGER PÅ SensorBug.* TILL 'datasrc'@'localhost'; Lägg nu till en ny tabell i databasen. I det här exemplet kommer jag att lägga till en tabell med följande kolumner: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE och ACCEROMETER
- DATUM/TID - Detta är datum och tid då data spelas in
- ADRESS - Detta är MAC: n för SensorBug som meddelandet hämtas från
- LOCATION - En människoläsbar sträng som anger var sensorn är placerad
- TEMPERATUR - Detta är den registrerade temperaturen
- ACCELE - Detta är värdet på accelerometerutgången, användbar för registrering av sensorposition (om aktiverad)
Kommandot som gör detta är:> ANVÄND SensorBug; > SKAPA TABELL -data (datum DATUM, tid TID, adress TINYTEXT, plats TINYTEXT, temperatur FLOAT, accele INT); Nu är databasen klar, vi kan gå vidare till att konfigurera sensorbuggarna.
Steg 3: Konfigurera SensorBugs
Sensorbuggarna är ganska snygga små enheter. Tyvärr gav tillverkaren bara IOS -app för att programmera den. Ändå är det fortfarande möjligt att arbeta med det om du bara har en Android -enhet. Första steget, para ihop enheten med en telefon. Utan att para ihop enheten kommer SensorBug inte att annonsera data. Jag försökte se om jag kan göra detta direkt med RaspberryPi, tyvärr verkar det som om Bluetooth LE -drivrutinen på RaspberryPi fortfarande är experimentell och innehåller buggar för att förhindra att den paras ihop med Bluetooth LE -enheter. Framtida version av blueZ -drivrutinen kan fixa detta, men som det nuvarande skrivandet finns det inget sätt att para SensorBug med RaspberryPi. Lyckligtvis behöver vi inte para ihop enheten för att fånga den annonserade data. Det enda vi behöver är en telefon för att konfigurera SensorBug. Som standard kommer SensorBug att börja annonsera temperaturdata med 1s intervall när den är ihopkopplad med en enhet. För att fånga temperaturdata är det allt som behövs. Om du planerar att expandera för att använda positionen eller ljussensorn kommer enheten att behövas än konfiguration. Till att börja med kopplar vi ihop enheten och kopplar bort. Detta är tillräckligt bra för temperaturmätning. Börja med att trycka på båda knapparna på SensorBug. Den blå/gröna lysdioden blinkar, vilket indikerar att den är påslagen. Tryck på en av knapparna, den gröna lysdioden ska tändas, ange att strömmen är på. Om den gröna lysdioden inte lyser, tryck på båda knapparna för att försöka slå på enheten igen. Håll ned en av knapparna tills den blå lysdioden börjar blinka. Detta kommer att sätta enheten i parningsläge. Gå till Bluetooth -konfigurationsmenyn på telefonen och leta efter SensorBug -enheten. När den dyker upp väljer du den för att para ihop med enheten. Det är det, nu är SensorBug strömförsörjd och annonserar temperaturdata
Steg 4: Installera Bluetooth LE Python Wrapper
Därefter måste vi installera biblioteket för att python ska kunna prata med Bluetooth LE -stacken. Instruktionen finns här: https://github.com/IanHarvey/bluepy För Python 2.7 är det så enkelt som att ange följande kommandon:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip installera bluepy
Steg 5: Skanna och ta reda på adressen till SensorBug
För att ta reda på SensorBug MAC -adressen, använd det här kommandot: $ sudo hcitool lescan Du bör se utdata som:
EC: FE: 7E: 10: B1: 92 (okänd) Om du har många Bluetooth LE -enheter i närheten kan det vara svårt att ta reda på vilken du pratar med. Du kan prova bluetoothctl som ger mer information:
$ sudo bluetoothctl [bluetooth]# skanning på [NY] Enhet EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Enhet EC: FE: 7E: 10: B1: 92 Tillverkare Datanyckel: 0x0085 [CHG] Enhet EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x41 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x43 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x0b [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Värde: 0x01 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x6f
Spela in MAC -adressen, detta måste anges i python -skriptet för att filtrera bort oönskade Bluetooth LE -enheter
Steg 6: Lägg till Python Script
En kopia av Python -skriptet är tillgängligt från:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Här är samma fil, ta hand om indragningen när du kopierar:
Uppdatera också MAC -adressen i pythonfilen så att den matchar sensoradressen från skanningsresultatet.
# Detta program är gratis programvara: du kan omfördela det och/eller ändra
# det under villkoren i GNU General Public License som publicerats av
# Free Software Foundation, antingen version 3 av licensen eller
# (efter eget val) någon senare version.
#
# Detta program distribueras i hopp om att det kommer att vara användbart, # men UTAN NÅGON GARANTI; utan ens den underförstådda garantin av
# Säljbarhet eller lämplighet för ett särskilt syfte. Se
# GNU General Public License för mer information.
#
# Du borde ha fått en kopia av GNU General Public License
# tillsammans med detta program. Om inte, se.
# bscan.py - Enkel Bluetooth LE -skanner och datautdragare
från bluepy.btle importskanner, DefaultDelegate
importtid
importera pymysql
importera struktur
hostname = 'localhost'
användarnamn = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
#Ange sensorns MAC -adress från lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garage", "Exteriör"]
klass DecodeErrorException (Undantag):
def _init _ (själv, värde):
self.value = värde
def _str _ (själv):
return repr (self.value)
klass ScanDelegate (StandardDelegate):
def _init _ (själv):
DefaultDelegate._ init _ (self)
def handleDiscovery (self, dev, isNewDev, isNewData):
if isNewDev:
print "Upptäckt enhet", dev.addr
elif isNewData:
print "Fått ny data från", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensortabell är datum, tid, addr, plats, temp, accero
cur = conn.cursor ()
dostr = 'SÄTT IN I data VÄRDEN (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
scanner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (värd = värdnamn, användare = användarnamn, passwd = lösenord, db = databas)
ManuDataHex =
ReadLoop = True
Prova:
medan (ReadLoop):
enheter = scanner.scan (2.0)
ManuData = ""
för enheter i enheter:
post = 0
AcceroData = 0
AcceroType = 0
TempData = 0
för saddr i SENSOR_ADDRESS:
post += 1
om (dev.addr == saddr):
skriv ut "Enhet %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [post-1]
för (adtype, desc, value) i dev.getScanData ():
skriv ut " %s = %s" %(desc, värde)
if (desc == "Tillverkare"):
ManuData = värde
if (ManuData == ""):
print "Ingen data mottagen, avsluta avkodning"
Fortsätta
#print ManuData
för i, j i zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Börja avkoda råa tillverkardata
if ((ManuDataHex [0] == 0x85) och (ManuDataHex [1] == 0x00)):
skriva ut "Header byte 0x0085 hittat"
annan:
print "Header byte 0x0085 hittades inte, avkodningsstopp"
Fortsätta
#Hoppa över major/mindre
#Index 5 är 0x3c, ange batterinivå och konfigurera #
if (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
medan (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Data:" + hex (ManuDataHex [idx])
if (ManuDataHex [idx] == 0x41):
#Accerometerdata
idx += 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx+1]
idx += 2
elif (ManuDataHex [idx] == 0x43):
#Temperaturdata
idx += 1
TempData = ManuDataHex [idx]
TempData += ManuDataHex [idx +1] * 0x100
TempData = TempData * 0,0625
idx += 2
annan:
idx += 1
skriv ut "Enhetsadress:" + CurrentDevAddr
skriv ut "Enhetsplats:" + CurrentDevLoc
skriv ut "Batterinivå:" + str (BatteryLevel) + "%"
skriv ut "Config Counter:" + str (ConfigCounter)
skriv ut "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
skriv ut "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Falskt
utom DecodeErrorException:
passera
Steg 7: Testa Python Script
Skriptet måste köras i root, så:
$ sudo python bscan.pyDiscovered device ec: 6e: 7e: 10: b1: 92 Device ec: 6e: 7e: 10: b1: 92 (public), RSSI = -80 dB Flags = 06 Ofullständig 16b Services = 0a18 Tillverkare = 850002003c25094102024309016f Rubrikbyte 0x0085 hittad Enhetsadress: ec: 6e: 7e: 10: b1: 92 Enhetsplats: Garage Batterinivå: 37% Konfigurationsräknare: 9 Accero -data: 0x2 0x2 Tempdata: 16.5625
Steg 8: Lägg till Python Scrip i Crontab
Python -skriptet måste köras i root, så om du vill fånga data automatiskt måste det läggas till i rotens crontab. I det här exemplet kör jag skriptet var 20: e minut Använd kommandot:
$ sudo crontab -e
# Redigera den här filen för att introducera uppgifter som ska köras av cron.
# # Varje uppgift som ska köras måste definieras genom en enda rad # som anger med olika fält när uppgiften ska köras # och vilket kommando som ska köras för uppgiften # # För att definiera tiden kan du ange konkreta värden för # minut (m), timme (h), dag i månaden (dom), månad (mån), # och veckodag (dow) eller använd "*" i dessa fält (för "alla"). # # Observera att uppgifter startas baserat på crons system # daemons föreställning om tid och tidszoner. # # Utmatning av crontab -jobben (inklusive fel) skickas via # e -post till användaren som crontab -filen tillhör (om den inte omdirigeras). # # Till exempel kan du köra en säkerhetskopia av alla dina användarkonton # klockan 5 varje vecka med: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Mer information finns i manuella sidor av crontab (5) och cron (8) # # mh dom mon dow kommando 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Det är allt. Python -skriptet körs med regelbundna intervall och omkodar utdata till SQL -databasen
Steg 9: Extra: Konfigurera SensorBug för lägesavkänning
Det är möjligt att konfigurera SensorBug på Android för positionsavkänningsutmatning För positionsändringsavkänning, så kallad garageport. Sensor, detekterar SensorBug om enheten står upprätt eller lägger sig platt. När enheten är platt är värdet som registreras 0x20 medan om enheten står upprätt är värdet 0x02 Det skiljer sig inte om X- eller Y -läget är uppe, så länge Z -axeln inte är uppåt eller nedåt. Det enklaste sättet att göra detta är att använda LightBlue App. SensorBug ska visas i skanningsmenyn. Välj den enhet du vill konfigurera, gå till GATT-egenskaperna för accelerometerkonfiguration UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Se bild: Skriv en ny konfigurationssträng:
010d3f02020000002d00000002Läs tillbaka konfigurationssträngen för att bekräfta skrivningen. Detta möjliggör accelerometern för positionsavkänning.
Rekommenderad:
Övervaka temperatur och luftfuktighet med AM2301 på NodeMCU & Blynk: 3 steg
Övervaka temperatur och luftfuktighet med AM2301 på NodeMCU & Blynk: Det är ett mycket välkänt faktum att i de flesta branscher spelar vertikaler, temperatur, fuktighet, tryck, luftkvalitet, vattenkvalitet etc. viktiga faktorer som ska övervakas kontinuerligt och nödvändigt varningssystem måste vara på plats när värdet
Övervaka acceleration med Raspberry Pi och AIS328DQTR med Python: 6 steg
Övervaka acceleration med Raspberry Pi och AIS328DQTR Använda Python: Acceleration är begränsad, tror jag enligt vissa fysiklagar.- Terry Riley En gepard använder fantastisk acceleration och snabba hastighetsförändringar när jagar. Den snabbaste varelsen i land använder då och då sitt högsta tempo för att fånga byten. Den
Övervaka värmeoljetank gallon med e -post, SMS och Pushbullet -varning: 9 steg (med bilder)
Övervaka värmeoljetank gallon med e -post, SMS och Pushbullet -varning: SÄKERHETSINFORMATION: Om någon vill veta om " detta är säkert att bygga/installera " - Jag har tagit detta till 2 olika oljebolag för feedback/säkerhetsöverväganden, och jag har drivit detta av brandkårens brandpreventiva C
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid
Registrera tillägg med en bärbar applikation: 5 steg
Registrera tillägg med en bärbar applikation: Om du gillar mig bär du en tumme med dig med dina favoritprogram. Vissa program har profiler (firefox) och vissa är bara bra att ha runt i nödsituationer. Oavsett anledning kan du tycka att det är målmedvetet att länka programmet och