Sisällysluettelo:

Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla: 9 vaihetta (kuvilla)
Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla: 9 vaihetta (kuvilla)

Video: Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla: 9 vaihetta (kuvilla)

Video: Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla: 9 vaihetta (kuvilla)
Video: Yksi kuuloke "Xiaomi Airdots" ei lataudu 2024, Marraskuu
Anonim
Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla
Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla
Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla
Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla

Tässä ohjeessa kerrotaan, kuinka kootaan monisolmun lämpötilanseurantajärjestelmä, jossa on Bluetooth LE -anturivika Blue Radiosilta (BLEHome) ja RaspberryPi 3B Bluetooth LE -standardin kehityksen ansiosta markkinoilla on nyt saatavilla pienitehoisia langattomia antureita erittäin edulliseen hintaan ja voi toimia yhdellä nappiparilla kuukausia kerrallaan. Yksi näistä anturista, jonka otin, on Blue Radiosta nimeltä Sensor Bugs. Se maksaa noin 25 dollaria Amazonissa, ja se on Bluetooth LE -laite, jossa on lämpötila -anturi, valoanturi ja akkumittari..

Vaihe 1: Asenna Raspberry Pi

Ensimmäinen askel on hankkia toimiva Raspberry Pi -asetus. Noudata Raspberry Pi -verkkosivuston ohjeita, lataa Raspbian SD -kortille, aseta se Raspberry Pi -laitteeseen ja käynnistä se. aikavyöhyke nykyiseen aikavyöhykkeeseen UTC: n sijaan. Voit tehdä tämän komennolla: $ sudo dpkg-reconfigure tzdataRest käskystä olettaa, että asennus suoritetaan komentorivikäyttöliittymän kautta.

Vaihe 2: MySQL: n määrittäminen Raspberry Pi: lle

On hyödyllistä asentaa tietokanta paikallisesti tallentamaan kaikki kaapatut tiedot. MySQL: n asentaminen Raspberry Pi: hen on erittäin helppoa. Ei ole myöskään vaikeaa muokata komentosarjaa, jotta se voi muodostaa yhteyden SQL -palvelimeen ulkoisesti, voit ohittaa tämän vaiheen, jos haluat käyttää SQL -palvelinta verkossa. Verkossa on monia ohjeita, ehdotan tätä: https:// www.stewright.me/2014/06/tutorial-install-…

Kun SQL -palvelin on asennettu, voit luoda käyttäjän, tietokannan ja taulukon MySQL CLI -asiakasohjelman avulla.

$ sudo mysql -uroot -pLuo ensin paikallinen käyttäjä, joka voi lisätä kaapatut tiedot:> LUO KÄYTTÄJÄ 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; Luo seuraavaksi tietokanta ja taulukko:> LUO DATABASE SensorBug; Käyttäjän määrittäminen lupa:> ANNA KAIKKI OIKEUDET SensorBugille.* 'datasrc'@'localhost'; Lisää nyt uusi taulukko tietokantaan. Tässä esimerkissä aion lisätä taulukon, jossa on seuraavat sarakkeet: DATE, TIME, ADDRESS, LOCATION, LÄMPÖTILA ja ACCEROMETER

  • DATE/TIME - Tämä on päivämäärä ja kellonaika, jolloin tiedot tallennetaan
  • OSOITE - Tämä on SensorBugin MAC, josta viesti on kaapattu
  • SIJAINTI - Ihmisen luettavissa oleva merkkijono ilmaisee, missä anturi sijaitsee
  • LÄMPÖTILA - Tämä on tallennettu lämpötila
  • ACCELE - Tämä on kiihtyvyysmittarin ulostulon arvo, hyödyllinen anturin asennon tallennukseen (jos käytössä)

Tämä komento on:> USE SensorBug; > LUO TAULUKON tiedot (päivämäärä PÄIVÄMÄÄRÄ, aika TIME, osoite TINYTEXT, sijainti TINYTEXT, lämpötila FLOAT, kiihtyvyys INT); Nyt tietokanta on valmis, voimme siirtyä sensorBugs -asetusten määrittämiseen.

Vaihe 3: Asenna SensorBugs

Anturivirheet ovat melko siistejä pieniä laitteita. Valitettavasti valmistaja tarjosi vain IOS -sovelluksen sen ohjelmointiin. Siitä huolimatta on mahdollista työskennellä sen kanssa, jos sinulla on vain Android -laite. Ensimmäinen vaihe, muodosta laitepari puhelimen kanssa. SensorBug ei mainosta tietoja ilman pariliitosta. Yritin nähdä, voinko tehdä tämän suoraan RaspberryPillä, valitettavasti näyttää siltä, että RaspberryPi: n Bluetooth LE -ohjain on edelleen kokeellinen ja sisältää virheitä, jotka estävät sen muodostamasta pariliitosta Bluetooth LE -laitteiden kanssa. BlueZ -ohjaimen tuleva versio saattaa korjata tämän, mutta nykyisen kirjoituksen mukaan SensorBugia ei voi yhdistää pariksi RaspberryPi -laitteen kanssa. Tarvitsemme vain puhelimen SensorBugin määrittämiseen. Oletuksena SensorBug alkaa mainostaa lämpötilatietoja 1 sekunnin välein, kun se on pariliitetty laitteen kanssa. Lämpötilatietojen talteenottoon tarvitaan kaikki. Jos aiot laajentaa asento- tai valoanturin käyttöä, laite on määritettävä. Ensinnäkin pariliitämme laitteen ja katkaisemme yhteyden. Tämä on tarpeeksi hyvä lämpötilan tallentamiseen. Aloita painamalla SensorBugin molempia painikkeita. Sininen/vihreä LED vilkkuu, mikä osoittaa, että se on kytketty päälle. Paina yhtä painiketta, vihreä merkkivalo syttyy, mikä osoittaa, että virta on päällä. Jos vihreä LED -valo ei pala, yritä käynnistää laite uudelleen painamalla molempia painikkeita. Paina ja pidä painettuna yhtä painiketta, kunnes sininen LED -valo alkaa vilkkua. Siirry puhelimen Bluetooth -asetusvalikkoon ja etsi SensorBug -laite. Kun se tulee näkyviin, valitse se laitepariksi laitteen kanssa. Siinä se on, nyt SensorBug saa virtaa ja mainostaa lämpötilatietoja

Vaihe 4: Bluetooth LE Python Wrapperin asentaminen

Seuraavaksi meidän on asennettava python -kirjasto Bluetooth LE -pinoon puhumiseen. Ohje löytyy täältä: https://github.com/IanHarvey/bluepy Python 2.7: lle se on yhtä helppoa kuin seuraavien komentojen syöttäminen:

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

Vaihe 5: Skannaa ja selvitä SensorBug -osoitteen osoite

Selvittääksesi SensorBug MAC -osoitteen, käytä tätä komentoa: $ sudo hcitool lescan Sinun pitäisi nähdä tulosteet kuten:

EC: FE: 7E: 10: B1: 92 (tuntematon) Jos ympärilläsi on paljon Bluetooth -LE -laitteita, saattaa olla vaikea selvittää, kenelle puhut. Voit kokeilla bluetoothctl -yhteyttä, joka antaa lisätietoja:

$ sudo bluetoothctl [bluetooth]# scan on [NEW] Device EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Key: 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] -laite 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 Arvo: 0x01 [CHG] Laite EC: FE: 7E: 10: B1: 92 Valmistajan tiedot Arvo: 0x6f

Tallenna MAC -osoite, tämä on syötettävä python -komentosarjaan, jotta suodatetaan pois ei -toivotut Bluetooth LE -laitteet

Vaihe 6: Lisää Python -komentosarja

Kopio Python -komentosarjasta on saatavana osoitteesta:

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

Tässä on sama tiedosto, huolehdi sisennyksestä kopioidessasi:

Päivitä myös python -tiedoston MAC -osoite vastaamaan anturin osoitetta, joka on saatu skannaustuloksesta.

# Tämä ohjelma on ilmainen ohjelmisto: voit jakaa sen uudelleen ja/tai muokata sitä

# sen julkaiseman GNU General Public License -ehdon mukaisesti

# Free Software Foundation, joko lisenssin versio 3 tai

# (valintasi mukaan) mikä tahansa myöhempi versio.

#

# Tämä ohjelma jaetaan toivossa, että siitä on hyötyä, # mutta ILMAN MITÄÄN TAKUUA; ilman edes oletettua takuuta

# KAUPPALAISUUS tai KÄYTTÖÖNOTTO TIETTYYN TARKOITUKSEEN. Katso

# GNU General Public License saadaksesi lisätietoja.

#

# Sinun olisi pitänyt saada kopio GNU General Public License -lisenssistä

# yhdessä tämän ohjelman kanssa. Jos ei, katso.

# bscan.py - Yksinkertainen Bluetooth LE -skanneri ja tiedonsiirto

from bluepy.btle import Scanner, DefaultDelegate

tuonnin aika

tuo pymysql

tuontirakenne

hostname = 'paikallinen isäntä'

käyttäjätunnus = 'datasrc'

password = 'datasrc000'

database = 'SensorBug'

#Anna sensorin MAC -osoite lescanista

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

SENSOR_LOCATION = ["Autotalli", "Ulkopuoli"]

luokka DecodeErrorException (poikkeus):

def _init _ (itse, arvo):

self.value = arvo

def _str _ (itse):

paluu repr (itsearvo)

luokka ScanDelegate (oletusDelegate):

def _init _ (itse):

OletusDelegate._ init _ (itse)

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

if isNewDev:

tulosta "Löydetty laite", dev.addr

elif onUusia tietoja:

tulosta "Uusia tietoja vastaanotettu", dev.addr

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

#blesensor -taulukko on päivämäärä, kellonaika, addr, sijainti, lämpötila, accero

cur = jatko -osoitin ()

dostr = 'INSERT INTO Data VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

skanneri = Skanneri (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (isäntä = isäntänimi, käyttäjä = käyttäjätunnus, salasana = salasana, db = tietokanta)

ManuDataHex =

ReadLoop = Totta

yrittää:

samalla (ReadLoop):

laitteet = scanner.scan (2.0)

ManuData = ""

laitteiden kehittäjille:

merkintä = 0

AcceroData = 0

AcceroType = 0

Lämpötilatiedot = 0

saddr: SENSOR_ADDRESS:

merkintä += 1

jos (dev.addr == saddr):

tulosta "Laite %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [merkintä-1]

for (adtype, desc, value) in dev.getScanData ():

tulosta " %s = %s" %(kuva, arvo)

jos (desc == "Valmistaja"):

ManuData = arvo

jos (ManuData == ""):

tulosta "Tietoja ei vastaanotettu, lopeta dekoodaus"

jatkaa

#tulosta ManuData

i, j in zip (ManuData [:: 2], ManuData [1:: 2]):

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

#Aloita raakavalmistajatietojen dekoodaus

jos ((ManuDataHex [0] == 0x85) ja (ManuDataHex [1] == 0x00)):

tulosta "Otsikkotavu 0x0085 löydetty"

muu:

tulosta "Otsikkotavu 0x0085 ei löydy, dekoodauksen pysäytys"

jatkaa

#Ohita suuri/pieni

#Indeksi 5 on 0x3c, ilmoita akun varaustaso ja kokoonpano #

jos (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])

jos (ManuDataHex [idx] == 0x41):

#Akkometrin tiedot

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Lämpötilatiedot

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

muu:

idx += 1

tulosta "Laitteen osoite:" + CurrentDevAddr

tulosta "Laitteen sijainti:" + CurrentDevLoc

tulosta "Akun varaustaso:" + str (BatteryLevel) + "%"

tulosta "Config Counter:" + str (ConfigCounter)

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

tulosta "Väliaikaiset tiedot:" + str (TempData)

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

ReadLoop = False

paitsi DecodeErrorException:

kulkea

Vaihe 7: Testaa Python -komentosarja

Skripti on suoritettava rootissa, joten:

$ sudo python bscan.py Löydetty laite ec: 6e: 7e: 10: b1: 92 Device ec: 6e: 7e: 10: b1: 92 (public), RSSI = -80 dB Liput = 06 Vaillinaiset 16b Palvelut = 0a18 Valmistaja = 850002003c25094102024309016f Otsikkotavu 0x0085 löydetty Laiteosoite: ec: 6e: 7e: 10: b1: 92 Laitteen sijainti: Autotalli Akun varaustaso: 37% Konfigurointilaskuri: 9 Accero -data: 0x2 0x2 Lämpötilatiedot: 16.5625

Vaihe 8: Lisää Python Scrip Crontabiin

Python -komentosarja on suoritettava pääkäyttäjänä, joten jos haluat kaapata tiedot automaattisesti, se on lisättävä rootin crontab -tiedostoon. Tässä esimerkissä suoritan komentosarjan 20 minuutin välein Käytä komentoa:

$ sudo crontab -e

# Muokkaa tätä tiedostoa ja ota käyttöön cronin suorittamat tehtävät.

# # Jokainen suoritettava tehtävä on määritettävä yhdellä rivillä #, joka ilmaisee eri kentillä, milloin tehtävä suoritetaan # ja mikä komento suoritetaan tehtävälle # # Määritä aika, jonka voit antaa konkreettisia arvoja # minuutille (m), tunti (h), kuukauden päivä (dom), kuukausi (ma), # ja viikonpäivä (dow) tai käytä '*' näissä kentissä (mitä tahansa). # # Huomaa, että tehtävät aloitetaan perustuu cronin järjestelmän # daemonin käsitykseen ajasta ja aikavyöhykkeistä. # # Crontab -töiden tulos (mukaan lukien virheet) lähetetään # sähköpostilla käyttäjälle, jolle crontab -tiedosto kuuluu (ellei uudelleenohjattu). # # Voit esimerkiksi tehdä varmuuskopion kaikista käyttäjätilistäsi # 5 joka viikko seuraavilla tavoilla: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Lisätietoja on manuaaliset sivut: crontab (5) ja 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

Se siitä. Python -komentosarja suoritetaan säännöllisin väliajoin ja koodataan tulos uudelleen SQL -tietokantaan

Vaihe 9: Lisäominaisuudet: Määritä SensorBug asennon tunnistuksen lähdölle

Lisäominaisuudet: Määritä SensorBug asentoanturin lähdölle
Lisäominaisuudet: Määritä SensorBug asentoanturin lähdölle
Lisäominaisuudet: Määritä SensorBug asentoanturin lähdölle
Lisäominaisuudet: Määritä SensorBug asentoanturin lähdölle

On mahdollista määrittää SensorBug Android -laitteelle asennon tunnistustulostetta varten Asennonvaihtotunnistusta varten, niin kutsuttu Garage door. Sensing, SensorBug tunnistaa, onko laite pystyasennossa vai makaa makuulla. kun laite seisoo pystyasennossa, arvo on 0x02 Se ei tee eroa siitä, onko X- tai Y -asema ylöspäin, kunhan Z -akseli ei ole ylös- tai alaspäin. Helpoin tapa tehdä tämä on käyttää LightBlue -sovellusta. SensorBugin pitäisi näkyä skannausvalikossa. Valitse laite, jonka haluat määrittää, siirry kiihtyvyysmittarin konfiguroinnin GATT-ominaisuuksiin UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Katso kuva: Kirjoita uusi määritysjono:

010d3f02020000002d00000002 Lue määritysmerkkijono vahvistaaksesi kirjoituksen, mikä mahdollistaa kiihtyvyysmittarin asennon tunnistamiseen.

Suositeltava: