Taula de continguts:
- Pas 1: configureu Raspberry Pi
- Pas 2: Configuració de MySQL a Raspberry Pi
- Pas 3: Configuració de SensorBugs
- Pas 4: Instal·lació del Bluetooth LE Python Wrapper
- Pas 5: escanejar i esbrinar l'adreça de SensorBug
- Pas 6: afegiu l'script Python
- Pas 7: proveu l'script Python
- Pas 8: afegiu el Python Scrip al Crontab
- Pas 9: addicional: configureu SensorBug per a la sortida de detecció de posició
Vídeo: Superviseu i registreu la temperatura amb Bluetooth LE i RaspberryPi: 9 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Aquest instructiu tracta sobre com muntar un sistema de monitorització de temperatura de diversos nodes amb un error del sensor Bluetooth LE de Blue Radios (BLEHome) i RaspberryPi 3B Gràcies al desenvolupament de l’estàndard Bluetooth LE, ara hi ha al mercat uns sensors sense fils de baixa potència disponibles. per un cost molt baix i pot funcionar amb una sola cel·la de moneda durant mesos alhora. Un d’aquests sensors que he recollit és de Blue Radio anomenat Sensor Bugs. Amb un cost d’uns 25 dòlars a Amazon, es tracta d’un dispositiu Bluetooth LE amb sensor de temperatura, sensor de llum i aceròmetre que es converteix en una petita unitat que es pot comunicar sense fils. És un partit perfecte per a Raspberry Pi 3B, que compta amb suport per a la ràdio Bluetooth LE.
Pas 1: configureu Raspberry Pi
El primer pas és aconseguir una configuració de Raspberry Pi que funcioni. Seguiu les instruccions del lloc web de Raspberry Pi, carregueu Raspbian en una targeta SD, inseriu-lo a Raspberry Pi i arrenceu-lo. Configuro el sistema amb la versió Raspbian Stretch Lite (sense GUI) de novembre de 2017. Configureu el WiFi si cal, prefereixo ajustar el zona horària a la zona horària actual en lloc de UTC. Podeu fer-ho mitjançant l'ordre: $ sudo dpkg-reconfigure tzdataRest de la instrucció suposem que la configuració es fa mitjançant la interfície de línia d'ordres.
Pas 2: Configuració de MySQL a Raspberry Pi
És útil tenir instal·lada una base de dades localment per emmagatzemar totes les dades capturades. Instal·lar MySQL a Raspberry Pi és molt fàcil. Tampoc no és difícil modificar l'script per connectar-vos externament a un servidor SQL, podeu ometre aquest pas si voleu utilitzar un servidor SQL a la xarxa. Hi ha moltes instruccions a la xarxa, us suggereixo: https:// www.stewright.me/2014/06/tutorial-install-…
Un cop instal·lat el servidor SQL, podeu utilitzar el client MySQL CLI per crear usuaris, bases de dades i taules. Per introduir MySQL CLI, utilitzeu l'ordre:
$ sudo mysql -uroot-pPrimer, creeu un usuari local per inserir les dades capturades:> CREA USUARI 'datasrc' @ 'localhost' IDENTIFICAT PER 'datasrc000'; A continuació, creeu una base de dades i una taula:> CREA BASE DE DATES SensorBug; Configuració de l'usuari permís:> CONCEDIU TOTS ELS PRIVILEGIS A SensorBug. * A 'datasrc' @ 'localhost'; ara afegiu una nova taula a la base de dades. Per a aquest exemple, afegiré una taula amb les columnes següents: DATA, HORA, ADREÇA, UBICACIÓ, TEMPERATURA i ACCEROMETRE
- DATA / HORA: és la data i hora en què es registren les dades
- ADREÇA: aquest és el MAC del SensorBug des del qual es captura el missatge
- UBICACIÓ: una cadena llegible per humans per indicar on es troba el sensor
- TEMPERATURA: és la temperatura registrada
- ACCELE: aquest és el valor de la sortida de l’acceleròmetre, útil per enregistrar la posició del sensor (si està activat)
L'ordre que fa això és:> USAR SensorBug; > CREAR dades de TAULA (data DATA, hora HORA, adreça TINYTEXT, ubicació TINYTEXT, temperatura FLOAT, accele INT); Ara la base de dades està preparada, podem passar a configurar els sensorBugs.
Pas 3: Configuració de SensorBugs
Els errors del sensor són petits dispositius força curats. Malauradament, el fabricant només va proporcionar l'aplicació iOS per programar-la. Tot i això, encara és possible treballar-hi si només teniu un dispositiu Android. En primer lloc, vincleu el dispositiu amb un telèfon. Sense aparellar-lo, SensorBug no publicitarà dades. He intentat veure si puc fer-ho directament amb RaspberryPi, malauradament, sembla que el controlador Bluetooth LE de RaspberryPi encara és experimental i conté errors per evitar que s’aparellin amb dispositius Bluetooth LE. La futura versió del controlador blueZ podria solucionar-ho, però, com s’escriu actualment, no hi ha manera d’aparellar SensorBug amb RaspberryPi. Afortunadament, no necessitem aparellar el dispositiu per capturar les dades publicades. L’únic que necessitem és un telèfon per configurar SensorBug. Per defecte, SensorBug començarà a anunciar les dades de temperatura a un interval d’1 s un cop estigui emparellat amb un dispositiu. Per a la captura de dades de temperatura, això és tot el que cal. Si teniu previst expandir-vos per utilitzar el sensor de posició o llum, la configuració serà necessària. Per començar, aparellarem el dispositiu i el desconnectarem. Serà prou bo per capturar la temperatura. Comenceu prement els dos botons del SensorBug. El LED blau / verd parpellejarà, cosa que indica que està encès. Premeu un dels botons; el LED verd s'hauria d'encendre i indica que està encès. Si el LED verd no està encès, premeu els dos botons per tornar a engegar el dispositiu. Mantingueu premut un dels botons fins que el LED blau comenci a parpellejar. Això posarà el dispositiu en mode de parell. Aneu al menú de configuració de Bluetooth al telèfon i busqueu el dispositiu SensorBug. Un cop aparegui, seleccioneu-lo per emparellar-lo amb el dispositiu. Ja està, ara el SensorBug s’alimenta i anuncia les dades de temperatura.
Pas 4: Instal·lació del Bluetooth LE Python Wrapper
A continuació, hem d’instal·lar la biblioteca perquè Python parli amb la pila Bluetooth LE. Les instruccions es poden trobar aquí: https://github.com/IanHarvey/bluepy Per a Python 2.7, és tan senzill com introduir les ordres següents:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Pas 5: escanejar i esbrinar l'adreça de SensorBug
Per esbrinar l'adreça MAC de SensorBug, utilitzeu aquesta ordre: $ sudo hcitool lescan Hauríeu de veure una sortida com:
EC: FE: 7E: 10: B1: 92 (desconegut) Si teniu molts dispositius Bluetooth LE al voltant, pot ser difícil esbrinar amb quin parleu. Podeu provar bluetoothctl, que proporciona més detalls:
$ sudo bluetoothctl [bluetooth] # scan on [NOU] EC del dispositiu: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Clau de dades del fabricant: 0x0085 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x02 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x00 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x3c [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x25 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x09 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x41 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de les dades del fabricant: 0x02 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x02 [CHG] EC: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x43 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x0b [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Dades del fabricant Valor: 0x01 [CHG] EC del dispositiu: FE: 7E: 10: B1: 92 Valor de dades del fabricant: 0x6f
Registre l'adreça MAC; caldrà introduir-la a l'script python per filtrar els dispositius Bluetooth LE no desitjats
Pas 6: afegiu l'script Python
Hi ha disponible una còpia de l'script de Python a:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Aquí teniu el mateix fitxer, teniu cura del sagnat quan copieu:
A més, actualitzeu l'adreça MAC al fitxer python perquè coincideixi amb l'adreça del sensor obtinguda del resultat de l'escaneig.
# Aquest programa és programari lliure: el podeu redistribuir i / o modificar
# it sota els termes de la Llicència Pública General GNU tal com la publica
# Free Software Foundation, ja sigui la versió 3 de la llicència, o bé
# (a la vostra opció) qualsevol versió posterior.
#
# Aquest programa es distribueix amb l'esperança que sigui útil, # però SENSE CAP GARANTIA; sense ni tan sols la garantia implícita de
# COMERCIALITZACIÓ o IDONEITAT PER A UN PROPOSESIT PARTICULAR. Vegeu el
# GNU General Public License per obtenir més informació.
#
# Hauríeu d'haver rebut una còpia de la llicència pública general de GNU
# juntament amb aquest programa. Si no, vegeu.
# bscan.py: escàner de Bluetooth LE simple i extractor de dades
de bluepy.btle import Scanner, DefaultDelegate
temps d'importació
importació pymysql
importació d’estructures
hostname = 'localhost'
nom d'usuari = 'datasrc'
password = 'datasrc000'
database = "SensorBug"
# Introduïu l'adreça MAC del sensor des del làscan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garatge", "Exterior"]
classe DecodeErrorException (excepció):
def _init _ (auto, valor):
self.value = valor
def _str _ (auto):
retorn repr (self.value)
classe ScanDelegate (DefaultDelegate):
def _init _ (auto):
DefaultDelegate._ init _ (auto)
def handleDiscovery (self, dev, isNewDev, isNewData):
si isNewDev:
imprimeix "Dispositiu descobert", dev.addr
elif isNewData:
imprimir "Noves dades rebudes de", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
La taula #blesensor és data, hora, addr, ubicació, temperatura, accer
cur = conn.cursor ()
dostr = 'INSERT INTO data VALUES (CURRENT_DATE (), NOW (),% s,% s,% s,% s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
escàner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (amfitrió = nom d'amfitrió, usuari = nom d'usuari, passwd = contrasenya, db = base de dades)
ManuDataHex =
ReadLoop = Cert
provar:
mentre que (ReadLoop):
dispositius = scanner.scan (2.0)
ManuData = ""
per a desenvolupadors en dispositius:
entrada = 0
AcceroData = 0
AcceroType = 0
TempData = 0
per saddr a SENSOR_ADDRESS:
entrada + = 1
if (dev.addr == saddr):
imprimeix "Dispositiu% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [entrada-1]
per a (adtype, desc, value) a dev.getScanData ():
imprimeix "% s =% s"% (desc, valor)
if (desc == "Fabricant"):
ManuData = valor
if (ManuData == ""):
imprimir "No s'ha rebut cap dada, finalitza la descodificació"
continuar
#print ManuData
per a i, j en zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i + j, 16))
#Comenceu a descodificar les dades brutes del fabricant
if ((ManuDataHex [0] == 0x85) i (ManuDataHex [1] == 0x00)):
imprimir "S'ha trobat un byte de capçalera 0x0085"
en cas contrari:
imprimir "Byte de capçalera 0x0085 no trobat, parada de descodificació"
continuar
# Saltar Major / Menor
#Index 5 és 0x3c, indiqueu el nivell de la bateria i configureu #
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 "Dades:" + hexadecimal (ManuDataHex [idx])
if (ManuDataHex [idx] == 0x41):
# Dades de l’acceleròmetre
idx + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
idx + = 2
elif (ManuDataHex [idx] == 0x43):
#Dades de temperatura
idx + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0,0625
idx + = 2
en cas contrari:
idx + = 1
imprimeix "Adreça del dispositiu:" + CurrentDevAddr
imprimeix "Ubicació del dispositiu:" + CurrentDevLoc
imprimeix "Nivell de bateria:" + str (BatteryLevel) + "%"
imprimeix "Config Counter:" + str (ConfigCounter)
imprimeix "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
imprimeix "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Fals
excepte DecodeErrorException:
passar
Pas 7: proveu l'script Python
L'escriptura s'ha d'executar a l'arrel, de manera que:
$ sudo python bscan.py Ec del dispositiu descobert: 6e: 7e: 10: b1: 92 Ec del dispositiu: 6e: 7e: 10: b1: 92 (públic), RSSI = -80 dB Indicadors = 06 Incomplets 16b Serveis = 0a18 Fabricant = 850002003c25094102024309016f Byte de capçalera 0x0085 trobat Adreça del dispositiu: ec: 6e: 7e: 10: b1: 92 Ubicació del dispositiu: Nivell de bateria del garatge: 37% Comptador de configuració: 9 Dades d'accero: 0x2 0x2 Dades temporals: 16.5625
Pas 8: afegiu el Python Scrip al Crontab
L’escriptura python s’ha d’executar a root, de manera que si voleu capturar les dades automàticament, s’haurà d’afegir al crontab de l’arrel. Per a aquest exemple, executo l'script cada 20 minuts. Utilitzeu l'ordre:
$ sudo crontab -e
# Editeu aquest fitxer per introduir tasques que executarà cron.
# # Cada tasca que cal executar s'ha de definir a través d'una única línia # que indica amb camps diferents quan s'executarà la tasca # i quina ordre cal executar per a la tasca # # Per definir el temps que podeu proporcionar valors concrets durant # minut (m), hora (h), dia del mes (dom), mes (dilluns), # i dia de la setmana (dow) o utilitzeu "*" en aquests camps (per a "qualsevol"). # # Tingueu en compte que s'iniciaran les tasques. basat en la noció de temps i zones horàries del sistema daemon del cron. # # La sortida dels treballs crontab (inclosos els errors) s'envia mitjançant # correu electrònic a l'usuari al qual pertany el fitxer crontab (tret que es redirigeixi). # # Per exemple, podeu executar una còpia de seguretat de tots els vostres comptes d'usuari # a les 5 de la matinada cada setmana amb: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Per obtenir més informació, consulteu el pàgines manuals de crontab (5) i 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
Això és. L'escriptura python s'executarà a intervals regulars i recodificarà la sortida a la base de dades SQL
Pas 9: addicional: configureu SensorBug per a la sortida de detecció de posició
És possible configurar el SensorBug a Android per a la sortida de detecció de posició. Per a la detecció de canvis de posició, l’anomenat Garage door.sensing, el SensorBug detectarà si el dispositiu està en posició vertical o està pla. Quan el dispositiu està pla, el valor registrat és 0x20 mentre que si el dispositiu està en posició vertical, el valor és 0x02. No es diferencia si la posició X o Y està cap amunt, sempre que l'eix Z no estigui cap amunt o cap avall. La manera més senzilla de fer-ho és utilitzar l'aplicació LightBlue. El SensorBug apareixerà al menú d’escaneig. Seleccioneu el dispositiu que voleu configurar, aneu a les característiques GATT per a la configuració de l’acceleròmetre UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Veure imatge: Escriviu una nova cadena de configuració:
010d3f02020000002d00000002 Llegiu de nou la cadena de configuració per confirmar l’escriptura. Això permet que l’acceleròmetre permeti la detecció de posició.
Recomanat:
Superviseu la temperatura i la humitat amb AM2301 a NodeMCU i Blynk: 3 passos
Superviseu la temperatura i la humitat amb AM2301 a NodeMCU i Blynk: és un fet molt conegut que a la majoria de verticals de la indústria, la temperatura, la humitat, la pressió, la qualitat de l’aire, la qualitat de l’aigua, etc. els sistemes d'alerta han d'estar al seu lloc quan el valor
Monitor de temps M5Stack M5stick C basat en ESP32 amb DHT11 - Superviseu l’índex d’humitat i calor de la temperatura a M5stick-C amb DHT11: 6 passos
Monitor de temps M5Stack M5stick C basat en ESP32 amb DHT11 | Superviseu l’índex d’humitat i calor de la temperatura a M5stick-C amb DHT11: Hola, en aquest instructable aprendrem com connectar el sensor de temperatura DHT11 amb m5stick-C (una placa de desenvolupament de m5stack) i mostrar-lo a la pantalla de m5stick-C. Així, en aquest tutorial llegirem la temperatura, la humitat i l’amp; escalfa jo
Superviseu els galons del dipòsit de gasoil de calefacció amb alertes de correu electrònic, SMS i pulsador: 9 passos (amb imatges)
Superviseu els galons del dipòsit de gasoil de calefacció amb alertes de correu electrònic, SMS i pulsador: INFORMACIÓ DE SEGURETAT: en cas que algú vulgui saber si " és segur de construir / instal·lar " - Ho he portat a dues companyies petrolieres diferents per qüestions de retroalimentació / seguretat, i ho he dirigit pel subdirector C de prevenció d'incendis dels bombers
Registreu dades i dibuixeu un gràfic en línia mitjançant NodeMCU, MySQL, PHP i Chartjs.org: 4 passos
Registreu dades i dibuixeu un gràfic en línia mitjançant NodeMCU, MySQL, PHP i Chartjs.org: aquest manual descriu com podem utilitzar la placa Node MCU per recopilar dades de diversos sensors, enviar aquestes dades a un fitxer PHP allotjat que després afegeix les dades a una base de dades MySQL. Les dades es poden veure en línia com a gràfic, mitjançant chart.js.A ba
Superviseu la temperatura de l’habitació a l’escriptori a casa / oficina: 4 passos
Superviseu la temperatura de l’habitació / oficina a l’escriptori: per supervisar habitacions o oficines o qualsevol lloc on puguem utilitzar aquest projecte, que es mostra amb tants detalls com ara gràfics, temperatura en temps real i molt més. Estem utilitzant: https://thingsio.ai/ Primer de tot, hem de tenir compte en aquesta plataforma IoT, un