Satura rādītājs:

Uzraugiet un ierakstiet temperatūru, izmantojot Bluetooth LE un RaspberryPi: 9 soļi (ar attēliem)
Uzraugiet un ierakstiet temperatūru, izmantojot Bluetooth LE un RaspberryPi: 9 soļi (ar attēliem)

Video: Uzraugiet un ierakstiet temperatūru, izmantojot Bluetooth LE un RaspberryPi: 9 soļi (ar attēliem)

Video: Uzraugiet un ierakstiet temperatūru, izmantojot Bluetooth LE un RaspberryPi: 9 soļi (ar attēliem)
Video: How to use 4 channel Relay to control AC load with Arduino code 2024, Jūlijs
Anonim
Uzraugiet un reģistrējiet temperatūru, izmantojot Bluetooth LE un RaspberryPi
Uzraugiet un reģistrējiet temperatūru, izmantojot Bluetooth LE un RaspberryPi
Uzraugiet un reģistrējiet temperatūru, izmantojot Bluetooth LE un RaspberryPi
Uzraugiet un reģistrējiet temperatūru, izmantojot Bluetooth LE un RaspberryPi

Šī pamācība ir par to, kā salikt daudzmezglu temperatūras uzraudzības sistēmu ar Bluetooth LE sensora kļūdu no Blue Radios (BLEHome) un RaspberryPi 3B Pateicoties Bluetooth LE standarta izstrādei, tagad tirgū ir pieejami viegli pieejami mazjaudas bezvadu sensori par ļoti zemām izmaksām un var darboties vienā monētas šūnā vairākus mēnešus vienlaikus. Viens no šiem sensoriem, ko es paņēmu, ir no Blue Radio ar nosaukumu Sensor Bugs. Amazon maksā aptuveni 25 ASV dolārus, tā ir Bluetooth LE ierīce ar temperatūras sensoru, gaismas sensoru un akerometru, kas ir iebūvēti nelielā ierīcē, kas var sazināties bezvadu režīmā. Tas ir ideāli piemērots Raspberry Pi 3B, kas atbalsta Bluetooth LE radio..

1. darbība: iestatiet Raspberry Pi

Pirmais solis ir iegūt funkcionējošu Raspberry Pi iestatījumu. Izpildiet Raspberry Pi tīmekļa vietnes norādījumus, ielādējiet Raspbian SD kartē, ievietojiet Raspberry Pi un palaidiet to. Es iestatīju savu sistēmu ar Raspbian Stretch Lite (bez GUI) versiju 2017. gada novembris. Ja nepieciešams, iestatiet WiFi, es labprātāk pielāgotu laika joslu uz pašreizējo laika joslu, nevis UTC. To var izdarīt, izmantojot komandu: $ sudo dpkg-reconfigure tzdataRest no instrukcijas pieņem, ka iestatīšana tiek veikta, izmantojot komandrindas saskarni.

2. darbība. MySQL iestatīšana Raspberry Pi

Ir lietderīgi lokāli instalēt datu bāzi, lai saglabātu visus iegūtos datus. MySQL instalēšana Raspberry Pi ir ļoti vienkārša. Nav arī grūti mainīt skriptu, lai ārēji izveidotu savienojumu ar SQL serveri. Ja vēlaties tīklā izmantot SQL serveri, varat šo darbību izlaist. Tīklā ir daudz norādījumu, es iesaku to: https:// www.stewright.me/2014/06/tutorial-install-…

Kad SQL serveris ir instalēts, varat izmantot MySQL CLI klientu, lai izveidotu lietotāju, datu bāzi un tabulu. Lai ievadītu MySQL CLI, izmantojiet komandu:

Vispirms izveidojiet vietējo lietotāju, lai ievietotu iegūtos datus:> CREATE USER 'datasrc'@'localhost' IDENTIFYED by 'datasrc000'; Pēc tam izveidojiet datu bāzi un tabulu:> CREATE DATABASE SensorBug; Lietotāja iestatīšana atļauja:> Piešķiriet visas privilēģijas SensorBug.* Uz 'datasrc'@'localhost'; Tagad pievienojiet datu bāzei jaunu tabulu. Šajā piemērā es pievienošu tabulu ar šādām kolonnām: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE un ACCEROMETER

  • DATE/TIME - datums un laiks, kad dati tiek ierakstīti
  • ADRESE - šis ir SensorBug MAC, no kura tiek uztverts ziņojums
  • LOCATION - Cilvēka lasāma virkne, kas norāda sensora atrašanās vietu
  • TEMPERATURE - Šī ir reģistrētā temperatūra
  • ACCELE - šī ir akselerometra izejas vērtība, kas noder sensora pozīcijas ierakstīšanai (ja ir iespējota)

Komanda, kas to dara, ir:> USE SensorBug; > CREATE TABLE dati (datums DATE, laiks TIME, adrese TINYTEXT, atrašanās vieta TINYTEXT, temperatūra FLOAT, paātrinājums INT); Tagad datu bāze ir gatava, mēs varam pāriet uz sensorBugs iestatīšanu.

3. darbība. SensorBugs iestatīšana

Sensora kļūdas ir diezgan glītas mazas ierīces. Diemžēl ražotājs sniedza tikai IOS lietotni tā programmēšanai. Tomēr ar to joprojām ir iespējams strādāt, ja jums ir tikai Android ierīce. Vispirms savienojiet ierīci pārī ar tālruni. Bez ierīces savienošanas pārī SensorBug nereklamēs datus. Es mēģināju noskaidrot, vai es to varu izdarīt tieši ar RaspberryPi, diemžēl šķiet, ka Bluetooth LE draiveris RaspberryPi joprojām ir eksperimentāls un satur kļūdas, lai novērstu tā savienošanu pārī ar Bluetooth LE ierīcēm. Nākamā blueZ draivera versija to varētu labot, taču, kā rakstīts pašreiz, nav iespējams savienot pārī SensorBug ar RaspberryPi. Par laimi, mums nav nepieciešams savienot pārī ierīci, lai uzņemtu tās reklamētos datus. Vienīgais, kas mums nepieciešams, ir tālrunis, lai konfigurētu SensorBug. Pēc noklusējuma SensorBug sāks reklamēt temperatūras datus ar 1 s intervālu, tiklīdz tas būs savienots pārī ar ierīci. Lai iegūtu temperatūras datus, tas ir viss, kas nepieciešams. Ja plānojat paplašināties, lai izmantotu pozīcijas vai gaismas sensoru, ierīce būs nepieciešama konfigurācija. Sākumā mēs savienosim ierīci pārī un atvienosim. Tas būs pietiekami labs temperatūras fiksēšanai. Sāciet, nospiežot abas SensorBug pogas. Mirgos zilā/zaļā gaismas diode, kas norāda, ka tā ir ieslēgta. Nospiediet vienu no pogām, zaļajai gaismas diodei vajadzētu iedegties, norādot, ka barošana ir ieslēgta. Ja zaļā gaismas diode nedeg, nospiediet abas pogas, lai mēģinātu vēlreiz ieslēgt ierīci. Nospiediet un turiet vienu no pogām, līdz zilā gaismas diode sāk mirgot. Ierīce tiks ieslēgta pāra režīmā. Tālrunī dodieties uz Bluetooth konfigurācijas izvēlni un atrodiet ierīci SensorBug. Kad tas tiek parādīts, atlasiet to pārī ar ierīci. Tieši tā, tagad SensorBug tiek darbināts un reklamē temperatūras datus

4. solis: Bluetooth LE Python Wrapper instalēšana

Tālāk mums ir jāinstalē bibliotēka, lai python varētu runāt ar Bluetooth LE steku. Instrukcija ir atrodama šeit:

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

5. darbība: skenējiet un uzziniet SensorBug adresi

Lai uzzinātu SensorBug MAC adresi, izmantojiet šo komandu: $ sudo hcitool lescan Jums vajadzētu redzēt šādu izvadi:

EC: FE: 7E: 10: B1: 92 (nezināms) Ja jums apkārt ir daudz Bluetooth LE ierīču, var būt grūti noskaidrot, ar kuru jūs runājat. Varat izmēģināt bluetoothctl, kas sniedz sīkāku informāciju:

$ sudo bluetoothctl [bluetooth]# skenēšana [NEW] Ierīces EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Ierīces EC: FE: 7E: 10: B1: 92 Ražotāja datu atslēga: 0x0085 [CHG] Ierīces EC: FE: 7E: 10: B1: 92 Ražotāja datu vērtība: 0x02 [CHG] Ierīce EC: FE: 7E: 10: B1: 92 Ražotāja datu vērtība: 0x00 [CHG] Ierīce EC: FE: 7E: 10: B1: 92 Ražotāja datu vērtība: 0x3c [CHG] ierīce 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ērtība: 0x01 [CHG] Ierīce EC: FE: 7E: 10: B1: 92 Ražotāja datu vērtība: 0x6f

Ierakstiet MAC adresi, tā būs jāievada python skriptā, lai filtrētu nevēlamās Bluetooth LE ierīces

6. darbība: pievienojiet Python skriptu

Python skripta kopija ir pieejama:

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

Šeit ir tas pats fails, kopējot, ņemiet vērā atkāpi:

Tāpat atjauniniet python faila MAC adresi, lai tā atbilstu sensora adresei, kas iegūta no skenēšanas rezultāta.

# Šī programma ir bezmaksas programmatūra: varat to pārdalīt un/vai modificēt

# to saskaņā ar GNU vispārējās publiskās licences noteikumiem, kā publicējusi

# Free Software Foundation, vai nu licences 3. versija, vai

# (pēc jūsu izvēles) jebkura jaunāka versija.

#

# Šī programma tiek izplatīta, cerot, ka tā būs noderīga, # bet BEZ JEBKURAS GARANTIJAS; pat bez netiešās garantijas

# TIRDZNIECĪBA vai PIEMĒROTĪBA ĪPAŠAM MĒRĶIM. Skatīt

# GNU vispārējā publiskā licence, lai iegūtu sīkāku informāciju.

#

# Jums vajadzēja saņemt GNU vispārējās publiskās licences kopiju

# kopā ar šo programmu. Ja nē, skat.

# bscan.py - vienkāršs Bluetooth LE skeneris un datu nosūcējs

no bluepy.btle importēšanas skenera, DefaultDelegate

importa laiks

importēt pymysql

importa struktūra

saimniekdatora nosaukums = 'localhost'

lietotājvārds = 'datasrc'

parole = 'datasrc000'

database = 'SensorBug'

#Ievadiet sensora MAC adresi

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

SENSOR_LOCATION = ["Garāža", "Ārpuse"]

klase DecodeErrorException (izņēmums):

def _init _ (sevi, vērtību):

self.value = vērtība

def _str _ (sevi):

atgriešanās repr (pašvērtība)

klases ScanDelegate (DefaultDelegate):

def _init _ (sevi):

DefaultDelegate._ init _ (self)

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

ja isNewDev:

drukāt "Atklātā ierīce", dev.addr

elif isNewData:

drukāt "Saņēma jaunus datus no", dev.addr

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

#sensoru tabula ir datums, laiks, addr, atrašanās vieta, temp, accero

cur = kursors ()

dostr = 'IEVIETOT DATU VĒRTĪBĀS (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

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

conn.commit ()

skeneris = Skeneris (). arDelegate (ScanDelegate ())

myConnection = pymysql.connect (resursdators = resursdatora nosaukums, lietotājs = lietotājvārds, parole = parole, db = datu bāze)

ManuDataHex =

ReadLoop = True

pamēģini:

kamēr (ReadLoop):

ierīces = scanner.scan (2.0)

ManuData = ""

ierīču izstrādātājiem:

ieraksts = 0

AcceroData = 0

AcceroType = 0

TempData = 0

saddr SENSOR_ADDRESS:

ieraksts += 1

ja (dev.addr == saddr):

drukāt "Ierīce %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [ieraksts-1]

par (adtype, desc, value) dev.getScanData ():

drukāt " %s = %s" %(apraksts, vērtība)

ja (desc == "Ražotājs"):

ManuData = vērtība

ja (ManuData == ""):

drukāt "Nav saņemti dati, beidziet dekodēšanu"

Turpināt

#print ManuData

i, j ZIP formātā (ManuData [:: 2], ManuData [1:: 2]):

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

#Sāciet ražotāja neapstrādāto datu atšifrēšanu

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

izdrukāt "Atrasts galvenes baits 0x0085"

cits:

drukāt "Galvenes baits 0x0085 nav atrasts, atšifrēšanas pārtraukšana"

Turpināt

#Izlaist galveno/mazo

#Indekss 5 ir 0x3c, norādiet akumulatora uzlādes līmeni un konfigurāciju #

ja (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#print "TotalLen:" + str (len (ManuDataHex))

kamēr (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

#print "Dati:" + hex (ManuDataHex [idx])

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

#Accerometer dati

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

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

#Temperatūras dati

idx += 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0,0625

idx += 2

cits:

idx += 1

drukāt "Ierīces adrese:" + CurrentDevAddr

drukāt "Ierīces atrašanās vieta:" + CurrentDevLoc

drukāt "Akumulatora uzlādes līmenis:" + str (BatteryLevel) + "%"

drukāt "Config Counter:" + str (ConfigCounter)

drukāt "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

drukāt "Temp Data:" + str (TempData)

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

ReadLoop = False

izņemot DecodeErrorException:

iziet

7. darbība: pārbaudiet Python skriptu

Skriptam jābūt izpildītam saknē, tāpēc:

$ sudo python bscan.pyAtklāta ierīce ec: 6e: 7e: 10: b1: 92 Ierīce ec: 6e: 7e: 10: b1: 92 (publiska), RSSI = -80 dB karodziņi = 06 Nepilnīgi 16b pakalpojumi = 0a18 Ražotājs = 850002003c25094102024309016f Atrasts galvenes baits 0x0085 Ierīces adrese: ec: 6e: 7e: 10: b1: 92 Ierīces atrašanās vieta: Garāžas akumulatora līmenis: 37% Konfigurācijas skaitītājs: 9 Accero dati: 0x2 0x2 Temp Dati: 16.5625

8. darbība: pievienojiet Python skriptu Crontab

Python skriptam jābūt palaistam saknē, tādēļ, ja vēlaties automātiski uztvert datus, tas būs jāpievieno saknes crontab. Šajā piemērā es skriptu palaižu ik pēc 20 minūtēm Izmantojiet komandu:

$ sudo crontab -e

# Rediģējiet šo failu, lai ieviestu uzdevumus, kas jāveic cron.

# # Katrs veicamais uzdevums ir jādefinē, izmantojot vienu rindu #, kas norāda ar dažādiem laukiem, kad uzdevums tiks izpildīts # un kādu komandu izpildīt uzdevumam # # Lai noteiktu laiku, varat sniegt konkrētas vērtības # minūtei (m), stunda (h), mēneša diena (dom), mēnesis (pirmdiena), # un nedēļas diena (dow) vai šajos laukos izmantojiet “*” (“jebkuram”). # # Ievērojiet, ka tiks sākti uzdevumi pamatojoties uz krona sistēmas # dēmona laika un laika joslu priekšstatu. # # Crontab uzdevumu izvade (ieskaitot kļūdas) tiek nosūtīta pa e -pastu lietotājam, kuram crontab fails pieder (ja vien netiek novirzīts). # # Piemēram, katru nedēļu pulksten 5 no rīta varat palaist visu savu lietotāju kontu dublējumkopiju, izmantojot: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Lai iegūtu vairāk informācijas, skatiet rokasgrāmatas lapas crontab (5) un cron (8) # # mh dom mon dow komanda 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Tieši tā. Python skripts tiks palaists ar regulāriem intervāliem un pārkodēs izvadi SQL datu bāzē

9. darbība. Papildu: konfigurējiet SensorBug pozīcijas noteikšanas izejai

Papildus: konfigurējiet SensorBug pozīcijas noteikšanas izejai
Papildus: konfigurējiet SensorBug pozīcijas noteikšanas izejai
Papildus: konfigurējiet SensorBug pozīcijas noteikšanas izejai
Papildus: konfigurējiet SensorBug pozīcijas noteikšanas izejai

Ir iespējams konfigurēt SensorBug operētājsistēmā Android pozīcijas noteikšanas izvadam. Lai noteiktu atrašanās vietas maiņu, tā saukto garāžas durvju. Sensor, SensorBug noteiks, vai ierīce stāv vertikāli vai guļ. Ja ierīce ir plakana, reģistrētā vērtība ir 0x20 kamēr ierīce stāv vertikāli, vērtība ir 0x02. Tas neatšķir, vai X vai Y pozīcija ir uz augšu, kamēr Z ass nav uz augšu vai uz leju. Vienkāršākais veids, kā to izdarīt, ir lietotni LightBlue. SensorBug vajadzētu parādīties skenēšanas izvēlnē. Izvēlieties ierīci, kuru vēlaties konfigurēt, dodieties uz GATT raksturlielumiem akselerometra konfigurācijai UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Skatīt attēlu: uzrakstiet jaunu konfigurācijas virkni:

Lasiet atpakaļ konfigurācijas virkni, lai apstiprinātu rakstīšanu. Tas ļauj akselerometram noteikt atrašanās vietu.

Ieteicams: