Indholdsfortegnelse:
- Trin 1: Konfigurer Raspberry Pi
- Trin 2: Opsætning af MySQL på Raspberry Pi
- Trin 3: Opsætning af SensorBugs
- Trin 4: Installation af Bluetooth LE Python Wrapper
- Trin 5: Scan og find adressen på SensorBug
- Trin 6: Tilføj Python -scriptet
- Trin 7: Test Python -scriptet
- Trin 8: Tilføj Python Scrip til Crontab
- Trin 9: Ekstra: Konfigurer SensorBug til positionsføleroutput
Video: Overvåg og registrer temperatur med Bluetooth LE og RaspberryPi: 9 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Denne instruktive handler om, hvordan man sammensætter et multi-node temperaturovervågningssystem med Bluetooth LE-sensorfejl fra Blue Radios (BLEHome) og RaspberryPi 3B Takket være udviklingen af Bluetooth LE-standarden er der nu let tilgængelige laveffekt trådløse sensorer på markedet til meget lave omkostninger og kan køre på en enkelt møntcelle i flere måneder ad gangen. En af disse sensorer, jeg hentede, er fra Blue Radio kaldet Sensor Bugs. Det koster omkring $ 25 på Amazon, det er en Bluetooth LE -enhed med temperatursensor, lyssensor og accerometer, der alle er bygget ind i en lille enhed, der kan kommunikere trådløst. Dette er et perfekt match til Raspberry Pi 3B, som har indbygget understøttelse af Bluetooth LE -radio.
Trin 1: Konfigurer Raspberry Pi
Første trin er at få en fungerende Raspberry Pi -opsætning. Følg instruktionerne fra Raspberry Pi's websted, indlæs Raspbian på et SD -kort, indsæt i Raspberry Pi og start det op. Jeg konfigurerer mit system med Raspbian Stretch Lite (No GUI) version november 2017. Konfigurer WiFi, hvis det er nødvendigt, foretrækker jeg at justere tidszone til den aktuelle tidszone i stedet for UTC. Du kan gøre dette selvom kommandoen: $ sudo dpkg-reconfigure tzdataRest af instruktionen antager, at opsætningen er udført, selvom kommandolinjegrænsefladen.
Trin 2: Opsætning af MySQL på Raspberry Pi
Det er nyttigt at have en database installeret lokalt for at gemme alle de fangede data. Installation af MySQL på Raspberry Pi er super let. Det er heller ikke svært at ændre scriptet for at oprette forbindelse til en SQL -server eksternt, du kan springe dette trin over, hvis du ønsker at bruge en SQL -server på netværket. Der er mange instruktioner på nettet, jeg foreslår dette: https:// www.stewright.me/2014/06/tutorial-install-…
Når SQL -serveren er installeret, kan du bruge MySQL CLI -klienten til at oprette bruger, database og tabel. For at indtaste MySQL CLI skal du bruge kommandoen:
$ sudo mysql -uroot -pFørst skal du oprette en lokal bruger for at indsætte fangede data:> Opret bruger 'datasrc'@'localhost' IDENTIFICERET MED 'datasrc000'; Opret derefter en database og tabel:> CREATE DATABASE SensorBug; Opsætning af brugeren tilladelse:> GIV ALLE PRIVILEGER PÅ SensorBug.* TIL 'datasrc'@'localhost'; Tilføj nu en ny tabel til databasen. I dette eksempel tilføjer jeg en tabel med følgende kolonner: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE og ACCEROMETER
- DATO/TID - Dette er dato og klokkeslæt, hvor dataene registreres
- ADRESSE - Dette er MAC for SensorBug, meddelelsen hentes fra
- LOCATION - En streng, der kan læses af mennesker for at angive, hvor sensoren er placeret
- TEMPERATUR - Dette er den registrerede temperatur
- ACCELE - Dette er værdien af accelerometerudgangen, nyttig til registrering af sensorposition (hvis aktiveret)
Kommandoen, der gør dette, er:> BRUG SensorBug; > Opret tabeldata (dato DATO, tid TID, adresse TINYTEXT, placering TINYTEXT, temperatur FLOAT, accele INT); Nu er databasen klar, vi kan gå videre til opsætning af sensorBugs.
Trin 3: Opsætning af SensorBugs
Sensorfejlene er ret pæne små enheder. Desværre leverede producenten kun IOS -app til programmering af den. Ikke desto mindre er det stadig muligt at arbejde med det, hvis du kun har en Android -enhed. Første trin skal du parre enheden med en telefon. Uden parring af enheden vil SensorBug ikke annoncere data. Jeg forsøgte at se, om jeg kan gøre dette direkte med RaspberryPi, desværre ser det ud til, at Bluetooth LE -driveren på RaspberryPi stadig er eksperimentel og indeholder fejl for at forhindre, at den parres med Bluetooth LE -enheder. Fremtidig version af blueZ -driveren kan muligvis løse dette, men som den nuværende skrivning er der ingen måde at parre SensorBug med RaspberryPi. Heldigvis behøver vi ikke at parre enheden for at fange dens annoncerede data. Det eneste, vi har brug for, er en telefon til at konfigurere SensorBug. Som standard starter SensorBug reklame for temperaturdata med 1s interval, når den er parret med en enhed. Til registrering af temperaturdata er det alt, hvad der er nødvendigt. Hvis du planlægger at udvide til at bruge positionen eller lyssensoren, vil enheden være nødvendig end konfiguration. Til start parrer vi enheden og afbryder forbindelsen. Dette vil være godt nok til temperaturregistrering. Start med at trykke på begge knapper på SensorBug. Den blå/grønne LED blinker, hvilket angiver, at den er tændt. Tryk på en af knappen, den grønne LED skal lyse, angive, at strømmen er tændt. Hvis den grønne LED ikke lyser, skal du trykke på begge knapper for at prøve at tænde enheden igen. Tryk på en af knapperne, og hold den nede, indtil den blå LED begynder at blinke. Dette sætter enheden i parret tilstand. Gå ind i Bluetooth -konfigurationsmenuen på telefonen og kig efter SensorBug -enheden. Når den dukker op, skal du vælge den for at parre med enheden. Det er det, nu er SensorBug tændt og annoncerer temperaturdataene
Trin 4: Installation af Bluetooth LE Python Wrapper
Dernæst skal vi installere biblioteket, så python kan tale med Bluetooth LE -stakken. Instruktionen kan findes her: https://github.com/IanHarvey/bluepyFor Python 2.7 er det så simpelt som at indtaste følgende kommandoer:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Trin 5: Scan og find adressen på SensorBug
For at finde ud af SensorBug MAC -adressen skal du bruge denne kommando: $ sudo hcitool lescan Du skal se output som:
EC: FE: 7E: 10: B1: 92 (ukendt) Hvis du har mange Bluetooth LE -enheder i nærheden, kan det være svært at finde ud af, hvilken en du taler med. Du kan prøve bluetoothctl, som giver flere detaljer:
$ sudo bluetoothctl [bluetooth]# scan på [NEW] Enhed EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Enhed EC: FE: 7E: 10: B1: 92 Producent Datanøgle: 0x0085 [CHG] Device 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ærdi: 0x01 [CHG] Enhed EC: FE: 7E: 10: B1: 92 ProducentData Værdi: 0x6f
Registrer MAC -adressen, dette skal indtastes i python -scriptet for at filtrere uønskede Bluetooth LE -enheder ud
Trin 6: Tilføj Python -scriptet
En kopi af Python -scriptet er tilgængelig fra:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Her er den samme fil, pas på indrykningen, når du kopierer:
Opdater også MAC -adressen i python -filen, så den matcher sensoradressen fra scanningsresultatet.
# Dette program er gratis software: du kan omfordele det og/eller ændre
# det under vilkårene i GNU General Public License som udgivet af
# Free Software Foundation, enten version 3 af licensen eller
# (efter eget valg) enhver senere version.
#
# Dette program distribueres i håb om, at det vil være nyttigt, # men UDEN NOGEN GARANTI; uden selv den underforståede garanti af
# SALGSMÆSSIGHED eller egnethed til et særligt formål. Se
# GNU General Public License for flere detaljer.
#
# Du skulle have modtaget en kopi af GNU General Public License
# sammen med dette program. Hvis ikke, se.
# bscan.py - Enkel Bluetooth LE -scanner og dataudtræk
fra bluepy.btle import Scanner, DefaultDelegate
importtid
import pymysql
import struktur
hostname = 'localhost'
brugernavn = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
#Indtast sensorens MAC -adresse fra lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garage", "Udvendig"]
klasse DecodeErrorException (Undtagelse):
def _init _ (selv, værdi):
self.value = værdi
def _str _ (selv):
return repr (selvværdi)
klasse ScanDelegate (StandardDelegate):
def _init _ (selv):
DefaultDelegate._ init _ (self)
def handleDiscovery (self, dev, isNewDev, isNewData):
hvis isNewDev:
print "Opdaget enhed", dev.addr
elif isNewData:
print "Modtog nye data fra", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensortabellen er dato, klokkeslæt, addr, placering, temp, accero
cur = konn. markør ()
dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
scanner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (vært = værtsnavn, bruger = brugernavn, passwd = adgangskode, db = database)
ManuDataHex =
ReadLoop = True
prøve:
mens (ReadLoop):
enheder = scanner.scan (2.0)
ManuData = ""
til udviklingsenheder:
indtastning = 0
AcceroData = 0
AcceroType = 0
TempData = 0
for saddr i SENSOR_ADDRESS:
indtastning += 1
hvis (dev.addr == saddr):
print "Enhed %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [post-1]
for (adtype, desc, værdi) i dev.getScanData ():
print " %s = %s" %(desc, værdi)
hvis (desc == "Producent"):
ManuData = værdi
hvis (ManuData == ""):
print "Ingen data modtaget, afslut afkodning"
Blive ved
#print ManuData
for i, j i zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Start afkodning af de rå producentdata
hvis ((ManuDataHex [0] == 0x85) og (ManuDataHex [1] == 0x00)):
print "Header byte 0x0085 fundet"
andet:
print "Header byte 0x0085 ikke fundet, afkodningsstop"
Blive ved
#Skip major/mindre
#Index 5 er 0x3c, angiv batteriniveau og konfiguration #
hvis (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
mens (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Data:" + hex (ManuDataHex [idx])
hvis (ManuDataHex [idx] == 0x41):
#Accerometer data
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
andet:
idx += 1
print "Enhedsadresse:" + CurrentDevAddr
print "Enhedens placering:" + CurrentDevLoc
print "Batteriniveau:" + str (BatteryLevel) + "%"
print "Config Counter:" + str (ConfigCounter)
print "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
udskriv "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Falsk
undtagen DecodeErrorException:
passere
Trin 7: Test Python -scriptet
Scriptet skal køres i root, så:
$ sudo python bscan.pyOpdaget enhed ec: 6e: 7e: 10: b1: 92 Device ec: 6e: 7e: 10: b1: 92 (offentlig), RSSI = -80 dB Flag = 06 Ufuldstændige 16b Services = 0a18 Producent = 850002003c25094102024309016f Header -byte 0x0085 fundet Enhedsadresse: ec: 6e: 7e: 10: b1: 92 Enhedens placering: Garage Batteriniveau: 37% Config Counter: 9 Accero Data: 0x2 0x2 Temp Data: 16.5625
Trin 8: Tilføj Python Scrip til Crontab
Python -scriptet skal køres i root, så hvis du vil fange dataene automatisk, skal det føjes til rodens crontab. I dette eksempel kører jeg scriptet hvert 20. minut Brug kommandoen:
$ sudo crontab -e
# Rediger denne fil for at introducere opgaver, der skal køres af cron.
# # Hver opgave, der skal køres, skal defineres gennem en enkelt linje # angiver med forskellige felter, hvornår opgaven skal køres # og hvilken kommando, der skal køres for opgaven # # For at definere tiden kan du angive konkrete værdier i # minut (m), time (h), dag i måneden (dom), måned (man), # og ugedag (dow) eller brug '*' i disse felter (for 'enhver'). # # Bemærk, at opgaver vil blive startet baseret på crons system # dæmons forestilling om tid og tidszoner. # # Output af crontab -jobene (inklusive fejl) sendes via # e -mail til den bruger, crontab -filen tilhører (medmindre den omdirigeres). # # For eksempel kan du køre en sikkerhedskopi af alle dine brugerkonti # kl. 5 hver uge med: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # For flere oplysninger se manuelle sider af crontab (5) og 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 er det. Python -scriptet køres med regelmæssigt interval og omkoder output til SQL -databasen
Trin 9: Ekstra: Konfigurer SensorBug til positionsføleroutput
Det er muligt at konfigurere SensorBug på Android til positionsfølerudgang For positionsændringsføling, såkaldt garageport. Sensor, registrerer SensorBug, om enheden står oprejst eller ligger fladt ned. Når enheden er flad, er den registrerede værdi 0x20 mens hvis enheden står oprejst, er værdien 0x02Det adskiller sig ikke, hvis X- eller Y -positionen er oppe, så længe Z -aksen ikke er op eller ned. Den letteste måde at gøre dette på er at bruge LightBlue App. SensorBug skal dukke op i scanningsmenuen. Vælg den enhed, du vil konfigurere, gå til GATT-egenskaberne for Accelerometer-konfiguration UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Se billede: Skriv en ny konfigurationsstreng:
010d3f02020000002d00000002Læs konfigurationsstrengen tilbage for at bekræfte skrivningen. Dette muliggør accelerometeret til positionsmåling.
Anbefalede:
Overvåg temperatur og fugtighed med AM2301 på NodeMCU & Blynk: 3 trin
Overvåg temperatur og luftfugtighed med AM2301 på NodeMCU & Blynk: Det er en meget velkendt kendsgerning, at i de fleste brancher spiller vertikaler, temperatur, fugtighed, tryk, luftkvalitet, vandkvalitet osv. Vigtige faktorer, der skal overvåges løbende og nødvendige alarmsystemer skal være på plads, når værdien
ESP32 -baseret M5Stack M5stick C vejrmonitor med DHT11 - Overvåg temperaturfugtighed og varmeindeks på M5stick-C med DHT11: 6 trin
ESP32 -baseret M5Stack M5stick C vejrmonitor med DHT11 | Overvåg temperaturfugtighed og varmeindeks på M5stick-C Med DHT11: Hej fyre, i denne vejledning lærer vi, hvordan du kobler DHT11 temperatursensor til m5stick-C (et udviklingsbræt af m5stack) og viser det på displayet på m5stick-C. Så i denne vejledning vil vi læse temperaturen, fugtigheden & varme jeg
Drivhusprojektet (RAS): Overvåg elementerne til at reagere på vores plantage: 18 trin (med billeder)
Drivhusprojektet (RAS): Overvåg de elementer, der reagerer på vores plantage: Dette projekt foreslår at overvåge lufttemperatur, lysstyrke og fugtighed samt lundets temperatur og fugtighed. Det foreslår også at netværke disse foranstaltninger, der er så læselige på webstedet Actoborad.com For at gøre det, tilslutter vi 4 sensorer til N
OVERVÅG DIN HAVE: 16 trin (med billeder)
OVERVÅG DIN HAVE: Overvåg din have hvor som helst, brug lokalt display til at overvåge jordforholdene lokalt eller brug Mobile til at overvåge fra fjernbetjening. Kredsløbet bruger jordfugtighedsføler, kombineret med temperatur og fugtighed til at gøre opmærksom på jordens omgivende tilstand
Registrer udvidelser med en bærbar applikation: 5 trin
Registrer udvidelser med en bærbar applikation: Hvis du kan lide mig, har du en tommelfinger med dig med dine yndlingsprogrammer. Nogle programmer har profiler (firefox), og nogle er bare gode at have med i nødstilfælde. Uanset årsagen kan du finde det målrettet at linke programmet og