Satura rādītājs:
- 1. darbība: iestatiet Raspberry Pi
- 2. darbība. MySQL iestatīšana Raspberry Pi
- 3. darbība. SensorBugs iestatīšana
- 4. solis: Bluetooth LE Python Wrapper instalēšana
- 5. darbība: skenējiet un uzziniet SensorBug adresi
- 6. darbība: pievienojiet Python skriptu
- 7. darbība: pārbaudiet Python skriptu
- 8. darbība: pievienojiet Python skriptu Crontab
- 9. darbība. Papildu: konfigurējiet SensorBug pozīcijas noteikšanas izejai
Video: Uzraugiet un ierakstiet temperatūru, izmantojot Bluetooth LE un RaspberryPi: 9 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:55
Šī 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
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:
IoT ESP8266 sērija: 2- Uzraugiet datus, izmantojot ThingSpeak.com: 5 soļi
IoT ESP8266 sērija: 2- Uzraugiet datus, izmantojot ThingSpeak.com: Šī ir IoT ESP8266 sērijas otrā daļa. Lai skatītu 1. daļu, skatiet šo pamācāmo IoT ESP8266 sēriju
Uzraugiet temperatūru un mitrumu, izmantojot AM2301 NodeMCU un Blynk: 3 soļi
Temperatūras un mitruma kontrole Izmantojot AM2301 uz NodeMCU & Blynk: Ir ļoti labi zināms fakts, ka lielākajā daļā nozares vertikālu temperatūra, mitrums, spiediens, gaisa kvalitāte, ūdens kvalitāte utt. brīdinājuma sistēmām ir jābūt ieviestām, kad vērtība
Uzraugiet sildošās eļļas tvertnes galonus ar e -pastu, SMS un pushbullet brīdinājumu: 9 soļi (ar attēliem)
Uzraugiet sildošās eļļas tvertnes galonus ar e -pasta, SMS un pushbullet brīdinājumu: DROŠĪBAS INFORMĀCIJA: Gadījumā, ja kāds vēlas uzzināt, vai " to ir droši būvēt/uzstādīt " - Esmu nosūtījis to 2 dažādām naftas kompānijām, lai saņemtu atsauksmes/drošības apsvērumus, un esmu to vadījis ugunsdzēsības dienesta ugunsdrošības vietnieks C
Tastatūras ievadīšana/automātiski ierakstiet paroli ar vienu klikšķi!: 4 soļi (ar attēliem)
Tastatūras ievadīšana/automātiski ierakstiet paroli ar vienu klikšķi !: Paroles ir smagas … un atcerēties drošu paroli ir vēl grūtāk! Turklāt, ja jums ir garlaicīga, sarežģīta parole, tās ierakstīšana prasīs laiku. Bet nebaidieties, mani draugi, man ir risinājums! Es izveidoju nelielu automātiskās rakstīšanas mašīnu, kas darbosies
Siltumnīcas projekts (RAS): uzraugiet elementus, kas reaģē uz mūsu stādījumu: 18 soļi (ar attēliem)
Siltumnīcas projekts (RAS): Uzraudzīt elementus, kas reaģē uz mūsu stādījumu: Šis projekts piedāvā uzraudzīt gaisa temperatūru, spožumu un mitrumu, kā arī birzs temperatūru un mitrumu. Tā arī ierosina izveidot šos pasākumus, kas ir tik nolasāmi vietnē Actoborad.com. Lai to izdarītu, mēs savienojam 4 sensorus ar N