Sisällysluettelo:
- Vaihe 1: Asenna Raspberry Pi
- Vaihe 2: MySQL: n määrittäminen Raspberry Pi: lle
- Vaihe 3: Asenna SensorBugs
- Vaihe 4: Bluetooth LE Python Wrapperin asentaminen
- Vaihe 5: Skannaa ja selvitä SensorBug -osoitteen osoite
- Vaihe 6: Lisää Python -komentosarja
- Vaihe 7: Testaa Python -komentosarja
- Vaihe 8: Lisää Python Scrip Crontabiin
- Vaihe 9: Lisäominaisuudet: Määritä SensorBug asennon tunnistuksen lähdölle
Video: Valvo ja tallenna lämpötila Bluetooth LE: n ja RaspberryPi: n avulla: 9 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
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
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:
Valvo lämpötilaa ja kosteutta AM2301: n avulla NodeMCU: ssa ja Blynkissä: 3 vaihetta
Tarkkaile lämpötilaa ja kosteutta AM2301: n avulla NodeMCU: ssa ja Blynkissä: On hyvin tunnettu tosiasia, että useimmilla alan vertikaaleilla lämpötila, kosteus, paine, ilmanlaatu, veden laatu jne. Ovat tärkeitä tekijöitä, joita on seurattava jatkuvasti ja tarpeen hälytysjärjestelmien on oltava käytössä, kun arvo
Tallenna ja kuvaa EC/pH/ORP -tiedot TICK -pinon ja NoCAN -alustan avulla: 8 vaihetta
Tallenna ja kuvaa EC/pH/ORP -tiedot TICK Stack- ja NoCAN -alustalla: Tässä kerrotaan, miten Omzlo- ja uFire -antureiden NoCAN -alustaa käytetään EC: n, pH: n ja ORP: n mittaamiseen. Kuten heidän verkkosivustonsa sanoo, joskus on helpompaa käyttää vain kaapelia anturisolmuihisi. CAN: n etuna on viestintä ja teho yhdessä c
Valvo lämmitysöljysäiliön gallonaa sähköpostilla, tekstiviestillä ja push -bullet -hälytyksellä: 9 vaihetta (kuvilla)
Valvo lämmitysöljysäiliön gallonaa sähköpostilla, tekstiviestillä ja push -bullet -hälytyksellä: TURVALLISUUSTIEDOT: Jos joku haluaa tietää, onko "tämän rakentaminen/asentaminen turvallista"? - Olen vienyt tämän kahdelle eri öljy-yhtiölle palautetta/turvallisuussyistä, ja olen hoitanut tämän palokunnan palontorjuntavara C
Tallenna Arduino -anturitiedot MYsql -palveluun käsittelyn avulla: 6 vaihetta
Tallenna Arduino -anturitiedot MYsql -palveluun käsittelyn avulla: Rehellisesti sanottuna on vaikea tallentaa Arduino -tietoja suoraan MySQL: ään niin, että Arduino IDE -riippuvuudessa käytin Processing IDE: tä, joka on samanlainen kuin Arduino IDE, mutta jolla on paljon erilaista käyttöä ja voit koodata sen java.Huomautus: älä käytä Arduinon sarjamonia
VALVO PIETARASI: 16 vaihetta (kuvilla)
VALVOI PUUTARHASI: Valvo puutarhaasi mistä tahansa, käytä paikallista näyttöä maaperän olosuhteiden paikalliseen seurantaan tai käytä Mobilea etävalvontaan. Piiri käyttää maaperän kosteusanturia yhdessä lämpötilan ja kosteuden kanssa tietoiseksi maaperän ympäristön tilasta