Inhoudsopgave:
- Stap 1: Stel Raspberry Pi in
- Stap 2: MySQL instellen op Raspberry Pi
- Stap 3: De SensorBugs instellen
- Stap 4: De Bluetooth LE Python Wrapper installeren
- Stap 5: Scan en ontdek het adres van de SensorBug
- Stap 6: Voeg het Python-script toe
- Stap 7: Test het Python-script uit
- Stap 8: Voeg het Python-script toe aan de Crontab
- Stap 9: Extra: Configureer de SensorBug voor Positiedetectie-uitgang
Video: Temperatuur bewaken en opnemen met Bluetooth LE en RaspberryPi 9 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Deze instructable gaat over het samenstellen van een multi-node temperatuurbewakingssysteem met Bluetooth LE-sensorbug van Blue Radios (BLEHome) en RaspberryPi 3B Dankzij de ontwikkeling van de Bluetooth LE-standaard zijn er nu direct beschikbare draadloze sensoren met laag vermogen op de markt voor zeer lage kosten en kan maandenlang op een enkele knoopcel draaien. Een van deze sensoren die ik heb opgepikt, is van Blue Radio genaamd Sensor Bugs. Het kost ongeveer $ 25 op Amazon en is een Bluetooth LE-apparaat met temperatuursensor, lichtsensor en accerometer, allemaal ingebouwd in een kleine eenheid die draadloos kan communiceren. Dit is een perfecte match voor Raspberry Pi 3B, die ingebouwde ondersteuning heeft voor Bluetooth LE-radio.
Stap 1: Stel Raspberry Pi in
De eerste stap is om een werkende Raspberry Pi-setup te krijgen. Volg de instructies van de Raspberry Pi-website, laad Raspbian op een SD-kaart, steek hem in de Raspberry Pi en start hem op. tijdzone naar de huidige tijdzone in plaats van UTC. U kunt dit doen via de opdracht: $ sudo dpkg-reconfigure tzdata Rest van de instructie neemt aan dat de installatie wordt uitgevoerd via de opdrachtregelinterface.
Stap 2: MySQL instellen op Raspberry Pi
Het is handig om lokaal een database te hebben geïnstalleerd om alle vastgelegde gegevens op te slaan. Het installeren van MySQL op Raspberry Pi is supereenvoudig. Het is ook niet moeilijk om het script aan te passen om extern verbinding te maken met een SQL-server, u kunt deze stap overslaan als u een SQL-server op het netwerk wilt gebruiken. Er zijn veel instructies op het net, ik stel dit voor:https:// www.stewright.me/2014/06/tutorial-install-…
Nadat de SQL-server is geïnstalleerd, kunt u de MySQL CLI-client gebruiken om een gebruiker, database en tabel te maken. Om MySQL CLI in te voeren, gebruikt u de opdracht:
$ sudo mysql -uroot-pMaak eerst een lokale gebruiker om vastgelegde gegevens in te voegen: > CREER GEBRUIKER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000';Maak vervolgens een database en tabel: > CREATE DATABASE SensorBug;De gebruiker instellen toestemming: > VERLENEN ALLE PRIVILEGES OP SensorBug.* AAN 'datasrc'@'localhost';Voeg nu een nieuwe tabel toe aan de database. Voor dit voorbeeld ga ik een tabel toevoegen met de volgende kolommen: DATUM, TIJD, ADRES, LOCATIE, TEMPERATUUR en ACCEROMETER
- DATUM/TIJD - Dit is de datum en tijd waarop de gegevens zijn vastgelegd
- ADRES - Dit is de MAC van de SensorBug waarvan het bericht is vastgelegd
- LOCATIE - Een door mensen leesbare string om aan te geven waar de sensor zich bevindt
- TEMPERATUUR - Dit is de geregistreerde temperatuur
- ACCELE - Dit is de waarde van de uitgang van de versnellingsmeter, handig voor het opnemen van de sensorpositie (indien ingeschakeld)
Het commando dat dit doet is: > USE SensorBug; > CREATE TABLE-gegevens (datum DATUM, tijd TIJD, adres TINYTEXT, locatie TINYTEXT, temperatuur FLOAT, accele INT); Nu de database klaar is, kunnen we doorgaan met het instellen van de sensorBugs.
Stap 3: De SensorBugs instellen
De sensorbugs zijn behoorlijk nette kleine apparaten. Helaas heeft de fabrikant alleen de IOS-app geleverd om het te programmeren. Desalniettemin is het nog steeds mogelijk om ermee te werken als je alleen een Android-apparaat hebt. Eerste stap, koppel het apparaat met een telefoon. Zonder het apparaat te koppelen, zal de SensorBug geen gegevens adverteren. Ik heb geprobeerd te zien of ik dit rechtstreeks met RaspberryPi kan doen, helaas lijkt het erop dat het Bluetooth LE-stuurprogramma op RaspberryPi nog steeds experimenteel is en bugs bevat om te voorkomen dat het wordt gekoppeld aan Bluetooth LE-apparaten. Toekomstige versie van het blueZ-stuurprogramma kan dit oplossen, maar zoals het huidige schrijven, is er geen manier om de SensorBug te koppelen met RaspberryPi. Gelukkig hoeven we het apparaat niet te koppelen om de geadverteerde gegevens vast te leggen. Het enige dat we nodig hebben is een telefoon om de SensorBug te configureren. Standaard zal de SensorBug beginnen met het adverteren van temperatuurgegevens met een interval van 1 s zodra deze is gekoppeld aan een apparaat. Voor het vastleggen van temperatuurgegevens is dat alles wat nodig is. Als u van plan bent om uit te breiden om de positie- of lichtsensor te gebruiken, dan is configuratie van het apparaat nodig. Om te beginnen zullen we het apparaat koppelen en ontkoppelen. Dit is goed genoeg voor het vastleggen van de temperatuur. Begin door op beide knoppen op de SensorBug te drukken. De blauw/groene LED knippert, wat aangeeft dat hij is ingeschakeld. Druk op een van de knoppen, de groene LED moet oplichten om aan te geven dat de stroom is ingeschakeld. Als de groene LED niet brandt, drukt u op beide knoppen om het apparaat opnieuw in te schakelen. Houd een van de knoppen ingedrukt totdat de blauwe LED begint te knipperen. Hierdoor wordt het apparaat in de koppelmodus gezet. Ga naar het Bluetooth-configuratiemenu op de telefoon en zoek naar het SensorBug-apparaat. Zodra het verschijnt, selecteert u het om te koppelen met het apparaat. Dat is het, nu wordt de SensorBug van stroom voorzien en adverteert hij met de temperatuurgegevens
Stap 4: De Bluetooth LE Python Wrapper installeren
Vervolgens moeten we de bibliotheek voor python installeren om met Bluetooth LE-stack te praten. De instructie is hier te vinden: https://github.com/IanHarvey/bluepy Voor Python 2.7 is het zo eenvoudig als het invoeren van de volgende opdrachten:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Stap 5: Scan en ontdek het adres van de SensorBug
Gebruik deze opdracht om het MAC-adres van SensorBug te achterhalen: $ sudo hcitool lescan U zou de uitvoer moeten zien zoals:
EC:FE:7E:10:B1:92 (onbekend)Als je veel bluetooth LE-apparaten in de buurt hebt, kan het moeilijk zijn om erachter te komen met welk apparaat je praat. U kunt bluetoothctl proberen, die meer details geeft:
$ sudo bluetoothctl[bluetooth]# scan op [NIEUW] Apparaat EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Apparaat EC:FE:7E:10:B1:92 Fabrikantgegevenssleutel: 0x0085 [CHG] Apparaat EC: FE:7E:10:B1:92 FabrikantData Waarde: 0x02 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x00 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x3c [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x25 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x09 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x41 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x02 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x02 [CHG] Apparaat EC:FE:7E:10:B1:92 Fabrikantgegevens Waarde: 0x43 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x0b [CHG] Apparaat EC:FE:7E:10:B1:92 Fabrikantgegevens Waarde: 0x01 [CHG] Apparaat EC:FE:7E:10:B1:92 FabrikantData Waarde: 0x6f
Noteer het MAC-adres, dit moet worden ingevoerd in het python-script om ongewenste Bluetooth LE-apparaten eruit te filteren
Stap 6: Voeg het Python-script toe
Een kopie van het Python-script is verkrijgbaar bij:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Hier is hetzelfde bestand, let bij het kopiëren op de inspringing:
Werk ook het MAC-adres in het python-bestand bij zodat het overeenkomt met het sensoradres dat is verkregen uit het scanresultaat.
# Dit programma is gratis software: u kunt het herdistribueren en/of wijzigen
# het onder de voorwaarden van de GNU General Public License zoals gepubliceerd door
# de Free Software Foundation, ofwel versie 3 van de licentie, of
# (naar uw keuze) een latere versie.
#
# Dit programma wordt verspreid in de hoop dat het nuttig zal zijn, # maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van
# VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de
# GNU General Public License voor meer details.
#
# U zou een kopie van de GNU General Public License moeten hebben ontvangen
# samen met dit programma. Zo niet, zie.
# bscan.py - Eenvoudige bluetooth LE-scanner en gegevensextractor
van bluepy.btle import Scanner, DefaultDelegate
import tijd
importeer pymysql
import structuur
hostnaam = 'lokale host'
gebruikersnaam = 'datasrc'
wachtwoord = 'datasrc000'
database = 'SensorBug'
#Voer het MAC-adres van de sensor uit de lescan in
SENSOR_ADDRESS = ["ec:fe:7e:10:b9:92", "ec:fe:7e:10:b9:93"]
SENSOR_LOCATION = ["Garage", "Exterieur"]
klasse DecodeErrorException (uitzondering):
def _init_(zelf, waarde):
zelf.waarde = waarde
def _str_(zelf):
return repr(self.value)
klasse ScanDelegate (DefaultDelegate):
def _init_(zelf):
StandaardDelegeren._init_(zelf)
def handleDiscovery(self, dev, isNewDev, isNewData):
als isNewDev:
print "Ontdekt apparaat", dev.addr
elif isNieuweData:
print "Nieuwe gegevens ontvangen van", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor tabel is datum, tijd, adres, locatie, temp, accero
cur = conn.cursor()
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 (host=hostnaam, gebruiker=gebruikersnaam, passwd=wachtwoord, db=database)
ManuDataHex =
ReadLoop = True
proberen:
terwijl (ReadLoop):
apparaten = scanner.scan(2.0)
ManuData = ""
voor dev in-apparaten:
invoer = 0
AcceroData = 0
AcceroType = 0
TempData = 0
voor saddr in SENSOR_ADDRESS:
invoer += 1
if (dev.addr == saddr):
print "Apparaat %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION[entry-1]
for (advertentietype, desc, waarde) in dev.getScanData():
print " %s = %s" % (desc, waarde)
if (desc == "Fabrikant"):
ManuData = waarde
if (ManuData == ""):
print "Geen gegevens ontvangen, einde decodering"
doorgaan met
#print ManuData
voor i, j in zip (ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i+j, 16))
#Start met het decoderen van de onbewerkte gegevens van de fabrikant
if ((ManuDataHex[0] == 0x85) en (ManuDataHex[1] == 0x00)):
print "Headerbyte 0x0085 gevonden"
anders:
print "Headerbyte 0x0085 niet gevonden, decodering stop"
doorgaan met
#Skip Major/Minor
#Index 5 is 0x3c, geef batterijniveau en configuratie aan #
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 "Data: " + hex(ManuDataHex[idx])
if (ManuDataHex[idx] == 0x41):
#Accerometergegevens
idx += 1
AcceleroType = ManuDataHex[idx]
AcceleroData = ManuDataHex[idx+1]
idx += 2
elif (ManuDataHex[idx] == 0x43):
#Temperatuurgegevens
idx += 1
TempData = ManuDataHex[idx]
TempData += ManuDataHex[idx+1] * 0x100
TempData = TempData * 0.0625
idx += 2
anders:
idx += 1
print "Apparaatadres: " + CurrentDevAddr
print "Apparaatlocatie: " + CurrentDevLoc
print "Batterijniveau: " + str(Batterijniveau) + "%"
print "Config Counter: " + str(ConfigCounter)
print "Accelero Data: " + hex(AcceleroType) + " " + hex(AcceleroData)
print "Temp Data: " + str(TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
behalve DecodeErrorException:
doorgang
Stap 7: Test het Python-script uit
Het script moet in root worden uitgevoerd, dus:
$ sudo python bscan.pyDiscovered device ec:6e:7e:10:b1:92 Device ec:6e:7e:10:b1:92 (public), RSSI=-80 dB Flags = 06 Incomplete 16b Services = 0a18 Fabrikant = 850002003c25094102024309016f Headerbyte 0x0085 gevonden Apparaatadres: ec:6e:7e:10:b1:92 Apparaatlocatie: Garage Batterijniveau: 37% Configuratieteller: 9 Accero-gegevens: 0x2 0x2 Temp-gegevens: 16.5625
Stap 8: Voeg het Python-script toe aan de Crontab
Het python-script moet in root worden uitgevoerd, dus als je de gegevens automatisch wilt vastleggen, moet het worden toegevoegd aan de crontab van de root. Voor dit voorbeeld voer ik het script elke 20 minuten uit. Gebruik de opdracht:
$ sudo crontab -e
# Bewerk dit bestand om taken te introduceren die door cron moeten worden uitgevoerd.
# # Elke uit te voeren taak moet worden gedefinieerd door een enkele regel # die met verschillende velden aangeeft wanneer de taak zal worden uitgevoerd # en welk commando voor de taak moet worden uitgevoerd # # Om de tijd te definiëren, kunt u concrete waarden opgeven voor # minuut (m), uur (h), dag van de maand (dom), maand (mon), # en dag van de week (dow) of gebruik '*' in deze velden (voor 'any').# # Merk op dat taken worden gestart gebaseerd op de cron's system # daemon's notie van tijd en tijdzones. # # Uitvoer van de crontab-taken (inclusief fouten) wordt via # e-mail verzonden naar de gebruiker waartoe het crontab-bestand behoort (tenzij omgeleid). # # U kunt bijvoorbeeld elke week een back-up maken van al uw gebruikersaccounts # om 5 uur 's ochtends met: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Zie voor meer informatie de handleidingen van crontab(5) en cron(8) # # mh dom mon dow commando 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
Dat is het. Het python-script wordt met regelmatige tussenpozen uitgevoerd en de uitvoer wordt opnieuw gecodeerd in de SQL-database
Stap 9: Extra: Configureer de SensorBug voor Positiedetectie-uitgang
Het is mogelijk om de SensorBug op Android te configureren voor positiedetectie-uitvoer. Voor positieveranderingsdetectie, zogenaamde garagedeurdetectie, detecteert de SensorBug of het apparaat rechtop staat of plat ligt. Als het apparaat plat is, is de geregistreerde waarde 0x20 terwijl als het apparaat rechtop staat, de waarde 0x02 is. Het maakt geen onderscheid of de X- of Y-positie omhoog is, zolang de Z-as niet omhoog of omlaag is. De eenvoudigste manier om dit te doen is door de LightBlue-app te gebruiken. De SensorBug zou in het scanmenu moeten verschijnen. Selecteer het apparaat dat u wilt configureren, ga naar de GATT-kenmerken voor configuratie van de versnellingsmeter UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11
Zie afbeelding:Schrijf een nieuwe configuratiestring:
010d3f02020000002d00000002Lees de configuratiereeks terug om het schrijven te bevestigen. Hierdoor kan de versnellingsmeter positiebepaling uitvoeren.
Aanbevolen:
Temperatuur- en vochtigheidsindicator door Arduino 7 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Temperatuur- en vochtigheidsindicator door Arduino: deze instructie laat zien hoe je een doos kunt maken die de temperatuur en vochtigheid kan aangeven met Arduino. Je kunt deze doos op tafel zetten voor het meten van temperatuur en vochtigheid in je kamer. gecomprimeerd v
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
Hoe maak je een Bluetooth-gestuurde simplistische RC-auto: 7 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe maak je een Bluetooth-gestuurde simplistische RC-auto Hallo allemaal, ik ben Bryan Tee Pak Hong. Ik ben momenteel een jaar één student in Singapore Polytechnic en studeer Computer Engineering. Toen ik een kind was, was ik altijd gefascineerd door RC-auto's en hoe ze werken. Toen ik het uit elkaar haalde, zag ik alleen maar stukjes
Hoe maak je Bluetooth Shields voor Upload Sketch naar Arduino 9 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe maak je Bluetooth-schilden voor het uploaden van schets naar Arduino: je kunt een schets naar Arduino uploaden vanaf Android of pc via Bluetooth, om het te doen heb je een klein extra onderdeel nodig, zoals een Bluetooth-module, condensator, weerstand, baardbord en jumperdraden, dan haak je samen omhoog en verbind met Arduino-pin
Hoe u de temperatuur en zwaartekracht van biergisting vanaf uw smartphone kunt regelen: 4 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Hoe u de temperatuur en zwaartekracht van biergisting vanaf uw smartphone kunt regelen: Wanneer bier aan het gisten is, moet u de zwaartekracht en temperatuur dagelijks controleren. Het is gemakkelijk om dit te vergeten, en onmogelijk als je weg bent. Na wat googlen vond ik verschillende oplossingen voor geautomatiseerde zwaartekrachtmonitoring (een, twee, drie). Een van d