Orodha ya maudhui:

Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi: Hatua 9 (na Picha)
Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi: Hatua 9 (na Picha)

Video: Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi: Hatua 9 (na Picha)

Video: Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi: Hatua 9 (na Picha)
Video: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Julai
Anonim
Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi
Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi
Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi
Kufuatilia na Kurekodi Joto na Bluetooth LE na RaspberryPi

Mafundisho haya ni juu ya jinsi ya kuweka pamoja mfumo wa ufuatiliaji wa joto la nodi nyingi na kifaa cha senji cha Bluetooth LE kutoka Redio za Bluu (BLEHome) na RaspberryPi 3B Shukrani kwa ukuzaji wa kiwango cha Bluetooth LE, sasa kuna sensorer za nguvu za chini za umeme zinazopatikana kwa urahisi kwenye soko kwa gharama ya chini sana na inaweza kukimbia kwenye seli moja ya sarafu kwa miezi moja kwa wakati. Moja ya sensorer hizi nilizozichukua ni kutoka kwa Redio ya Bluu iitwayo Sensor Bugs. Kugharimu karibu $ 25 kwa Amazon, ni kifaa cha Bluetooth LE kilicho na sensor ya Joto, sensor nyepesi na kiashiria cha kujiboresha vyote vinajengwa kwenye kitengo kidogo kinachoweza kuwasiliana bila waya. Hii ni mechi inayofaa kwa Raspberry Pi 3B, ambayo imeunda msaada wa redio ya LE LE.

Hatua ya 1: Sanidi Raspberry Pi

Hatua ya kwanza ni kupata usanidi wa Raspberry Pi inayofanya kazi. Fuata maagizo kutoka kwa wavuti ya Raspberry Pi, pakia Raspbian kwenye kadi ya SD, ingiza kwenye Raspberry Pi na uiwashe. Ninaweka mfumo wangu na toleo la Raspbian Stretch Lite (No GUI) Novemba 2017. Weka WiFi ikiwa inahitajika, napendelea kurekebisha eneo la saa kwa saa ya sasa badala ya UTC. Unaweza kufanya hivyo ingawa amri:

Hatua ya 2: Kuanzisha MySQL kwenye Raspberry Pi

Ni muhimu kuwa na hifadhidata iliyosanikishwa ndani ili kuhifadhi data zote zilizonaswa. Kuweka MySQL kwenye Raspberry Pi ni rahisi sana. Pia sio ngumu kurekebisha hati ili kuungana na seva ya SQL nje, unaweza kuruka hatua hii ikiwa unataka kutumia seva ya SQL kwenye mtandao. Kuna maagizo mengi kwenye wavu, ninashauri hii: https:// www.stewright.me/2014/06/install-install-

Mara tu seva ya SQL imewekwa, unaweza kutumia mteja wa MySQL CLI kuunda mtumiaji, hifadhidata na meza. Ili kuingia MySQL CLI, tumia amri:

$ sudo mysql -uroot-p Kwanza, tengeneza mtumiaji wa mahali kuingiza data iliyonaswa:> Unda Mtumiaji 'datasrc' @ 'localhost' INAYOTAMBULISHWA NA 'datasrc000'; Ifuatayo, tengeneza hifadhidata na meza: ruhusa:> TOA MAHAKAMA YOTE KWENYE SensorBug. * KWA 'datasrc' @ 'localhost'; Kwa mfano huu, nitaongeza meza na safu zifuatazo: TAREHE, MUDA, ANWANI, MAHALI, JOTO NA AJIRA

  • DATE / MUDA - Hii ni tarehe na wakati data imeandikwa
  • ANWANI - Hii ni MAC ya SensorBug ujumbe umechukuliwa kutoka
  • MAHALI - Kamba inayoweza kusomwa na mwanadamu kuonyesha mahali sensor iko
  • JOTO - Hii ndio joto lililorekodiwa
  • ACCELE - Hii ndio thamani ya pato la kuharakisha, muhimu kwa nafasi ya sensa ya kurekodi (ikiwa imewezeshwa)

Amri inayofanya hivi ni:> TUMIA SensorBug; > Tengeneza data ya JEDWALI (tarehe TAREHE, saa TIME, anwani TINYTEXT, eneo TINYTEXT, joto FLOAT, accele INT); Sasa hifadhidata iko tayari, tunaweza kuendelea na kuanzisha sensorBugs.

Hatua ya 3: Kuanzisha SensorBugs

Mende za sensorer ni vifaa vyenye nadhifu. Kwa bahati mbaya, mtengenezaji alitoa tu programu ya IOS kwa kuipangilia. Kamwe kidogo, bado inawezekana kufanya kazi nayo ikiwa una kifaa cha Android tu. Hatua ya kwanza, unganisha kifaa na simu. Bila kuoanisha kifaa, SensorBug haitatangaza data. Nilijaribu kuona ikiwa ninaweza kufanya hivyo moja kwa moja na RaspberryPi, kwa bahati mbaya, inaonekana kama dereva wa Bluetooth LE kwenye RaspberryPi bado ni wa majaribio na ana mende kuizuia kuoana na vifaa vya Bluetooth LE. Toleo la baadaye la dereva wa blueZ linaweza kurekebisha hii, lakini kama maandishi ya sasa, hakuna njia ya kuoanisha SensorBug na RaspberryPi. Kwa bahati nzuri, hatuitaji kuoanisha kifaa ili kunasa data iliyotangazwa. Kitu pekee tunachohitaji ni simu kusanidi SensorBug. Kwa chaguo-msingi, SensorBug itaanza kutangaza data ya joto kwa muda wa 1s mara tu iwe imeunganishwa na kifaa. Kwa data ya joto ya kukamata, hiyo ndiyo tu ambayo inahitajika. Ikiwa unapanga kupanua kutumia nafasi au sensorer ya taa, kuliko usanidi kifaa kitahitajika. Kwa kuanza, tutaunganisha kifaa na tukate muunganisho. Hii itakuwa nzuri kwa kusudi la kukamata hali ya joto Anza kwa kubonyeza vifungo vyote kwenye SensorBug. LED ya bluu / kijani itang'aa, ambayo inaonyesha inawashwa. Bonyeza kitufe kimoja, LED ya kijani inapaswa kuwasha, onyesha nguvu imewashwa. Ikiwa taa ya kijani kibichi haijawashwa, bonyeza kitufe zote mbili ili kujaribu kuwasha kifaa tena. Bonyeza na ushikilie kitufe kimoja hadi LED ya bluu ianze kupepesa. Hii itaweka kifaa katika hali ya jozi. Nenda kwenye menyu ya usanidi wa Bluetooth kwenye simu na utafute kifaa cha SensorBug. Mara tu inapojitokeza, chagua kuoanisha na kifaa. Hiyo ndio, sasa SensorBug inatumiwa na kutangaza data ya joto

Hatua ya 4: Kusanikisha kifuniko cha Bluetooth LE Python

Ifuatayo tunahitaji kusanikisha maktaba ya chatu kuzungumza na mpangilio wa Bluetooth LE. Maagizo yanaweza kupatikana hapa:

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

Hatua ya 5: Changanua na Tafuta Anwani ya SensorBug

Ili kujua anwani ya SensorBug MAC, tumia amri hii: $ sudo hcitool lescan Unapaswa kuona pato kama:

EC: FE: 7E: 10: B1: 92 (haijulikani) Ikiwa una vifaa vingi vya Bluetooth LE karibu, inaweza kuwa ngumu kujua ni ipi unazungumza nayo. Unaweza kujaribu bluetoothctl ambayo inatoa maelezo zaidi:

$ sudo Bluetooth FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji: 0x02 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji: 0x00 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji wa Takwimu: 0x3c [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji: 0x25 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji Data: 0x09 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Mtengenezaji Thamani ya data: 0x41 [CHG] EC ya Kifaa: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji: 0x02 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji wa Takwimu: 0x02 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji: 0x43 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Thamani ya Mtengenezaji wa Takwimu: 0x0b [CHG] Kifaa EC: FE: 7E: 10: B1: 92 ManufacturerData Thamani: 0x01 [CHG] Kifaa EC: FE: 7E: 10: B1: 92 Mtengenezaji Thamani ya Data: 0x6f

Rekodi anwani ya MAC, hii itahitaji kuingizwa kwenye hati ya chatu ili kuchuja vifaa visivyohitajika vya Bluetooth LE

Hatua ya 6: Ongeza hati ya Python

Nakala ya hati ya Python inapatikana kutoka:

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

Hapa kuna faili hiyo hiyo, tunza indent wakati wa kunakili:

Pia, sasisha anwani ya MAC katika faili ya chatu ili ilingane na anwani ya kitambuzi iliyopatikana kutoka kwa matokeo ya skana.

# Programu hii ni programu ya bure: unaweza kuisambaza tena na / au kurekebisha

# chini ya masharti ya Leseni Kuu ya Umma ya GNU kama ilivyochapishwa na

# Free Software Foundation, ama toleo la 3 la Leseni, au

# (kwa chaguo lako) toleo lolote la baadaye.

#

# Programu hii inasambazwa kwa matumaini kwamba itakuwa muhimu, # lakini BILA DHAMANA YOYOTE; bila hata dhamana ya kusema

# Uuzaji au ustadi kwa MADHUMUNI FULANI. Tazama

# GNU General Leseni ya Umma kwa maelezo zaidi.

#

# Ungekuwa umepokea nakala ya Leseni Kuu ya Umma ya GNU

# pamoja na mpango huu. Ikiwa sivyo, ona.

# bscan.py - Rahisi skana ya Bluetooth LE na dondoo la data

kutoka kwa bluepy.btle kuagiza Scanner, DefaultDelegate

muda wa kuagiza

kuagiza pymysql

kuagiza muundo

jina la mwenyeji = 'localhost'

jina la mtumiaji = 'datasrc'

nywila = 'datasrc000'

hifadhidata = 'SensorBug'

Ingiza anwani ya MAC ya sensa kutoka kwa lescan

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

SENSOR_LOCATION = ["Gereji", "Nje"]

darasa DecodeErrorException (Isipokuwa):

def _init _ (binafsi, thamani):

thamani ya kibinafsi = thamani

def _str _ (binafsi):

kurudi repr (self. Value)

darasa ScanDelegate (DefaultDelegate):

def _init _ (binafsi):

DefaultDelegate._ init _ (binafsi)

ugunduzi wa defDisvery (self, dev, isNewDev, isNewData):

ikiwa niNewDev:

chapa "Kifaa kilichopatikana", dev.addr

Elif niNewData:

chapa "Imepokea data mpya kutoka", dev.addr

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

Jedwali la #sensensor ni tarehe, saa, nyongeza, eneo, temp, accero

cur = conn.cursor ()

dostr = 'Ingiza kwenye Maadili ya data (CURRENT_DATE (), SASA (),% s,% s,% s,% s);'

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

kujitolea ()

skana = skana () naDelegate (ScanDelegate ())

myConnection = pymysql.connect (mwenyeji = jina la mwenyeji, mtumiaji = jina la mtumiaji, passwd = nywila, db = hifadhidata)

ManuDataHex =

ReadLoop = Kweli

jaribu:

wakati (ReadLoop):

vifaa = skana. skan (2.0)

ManuData = ""

kwa dev katika vifaa:

kuingia = 0

AcceroData = 0

Aina ya Accero = 0

TempData = 0

kwa saddr katika SENSOR_ADDRESS:

kuingia + = 1

ikiwa (dev.addr == saddr):

chapisha "Kifaa% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [ingizo-1]

kwa (adtype, desc, value) katika dev.getScanData ():

chapisha "% s =% s"% (chini, thamani)

ikiwa (desc == "Mtengenezaji"):

ManuData = thamani

ikiwa (ManuData == ""):

chapisha "Hakuna data iliyopokea, mwisho kusimbua"

endelea

#print ManuData

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

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

#Anza kuondoa data mbichi ya Mtengenezaji

ikiwa ((ManuDataHex [0] == 0x85) na (ManuDataHex [1] == 0x00)):

chapisha "Kichwa cha kichwa 0x0085 kimepatikana"

mwingine:

chapa "Kichwa cha kichwa 0x0085 haipatikani, uamua kuacha"

endelea

#Ruka Kubwa / Ndogo

#Index 5 ni 0x3c, onyesha kiwango cha betri na usanidi #

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

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

wakati (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

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

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

Takwimu za #Accerometer

idx + = 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx + 1]

idx + = 2

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

Takwimu za #Joto

idx + = 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx + = 2

mwingine:

idx + = 1

chapa "Anwani ya Kifaa:" + CurrentDevAddr

chapa "Mahali pa Kifaa:" + CurrentDevLoc

chapisha "Kiwango cha Betri:" + str (BatteryLevel) + "%"

chapisha "Config Counter:" + str (ConfigCounter)

chapisha "Data ya Accelero:" + hex (AcceleroType) + "" + hex (AcceleroData)

chapisha "Takwimu za Muda:" + str (TempData)

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

ReadLoop = Uongo

isipokuwa DecodeErrorException:

kupita

Hatua ya 7: Jaribu Hati ya Python

Hati lazima iendeshwe kwenye mizizi, kwa hivyo:

$ sudo python bscan. Kichwa cha kichwa 0x0085 kimepatikana Anwani ya Kifaa: ec: 6e: 7e: 10: b1: 92 Mahali pa Kifaa: Garage Kiwango cha Betri: 37% Sanidi Kadi: 9 Data ya Accero: 0x2 0x2 Takwimu za Temp: 16.5625

Hatua ya 8: Ongeza Chombo cha Python kwenye Crontab

Hati ya chatu lazima iendeshwe kwenye mizizi, kwa hivyo ikiwa unataka kukamata data kiotomatiki, itahitaji kuongezwa kwenye crontab ya mzizi. Kwa mfano huu, ninaendesha hati kila dakika 20 Tumia amri:

$ sudo crontab -e

# Hariri faili hii ili kuanzisha kazi zinazoendeshwa na cron.

# # Kila kazi ya kukimbia lazima ifafanuliwe kupitia laini moja # inayoonyesha na uwanja tofauti wakati kazi itaendeshwa # na ni amri gani ya kukimbia kwa kazi # # Kufafanua wakati unaweza kutoa maadili halisi kwa dakika # (m), saa (h), siku ya mwezi (dom), mwezi (mon), # na siku ya wiki (chini) au tumia '*' katika sehemu hizi (kwa 'yoyote'). # # Ona kwamba kazi zitaanza kulingana na mfumo wa cron # daemon wazo la saa na saa za eneo. Pato la kazi za crontab (pamoja na makosa) hutumwa kupitia barua pepe # kwa mtumiaji faili ya crontab ni ya (isipokuwa itaelekezwa). # # Kwa mfano, unaweza kutumia chelezo ya akaunti zako zote za mtumiaji # saa 5 asubuhi kila wiki na: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Kwa habari zaidi angalia kurasa za mwongozo za crontab (5) na cron (8) # # mh dom mon dow amri 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * chatu / nyumba/pi/bscan.py

Hiyo tu. Hati ya chatu itaendeshwa kwa muda wa kawaida na kurudisha pato kwenye hifadhidata ya SQL

Hatua ya 9: Ziada: Sanidi SensorBug kwa Position Sensing Output

Ziada: Sanidi SensorBug kwa Pato la Kuhisi Pato
Ziada: Sanidi SensorBug kwa Pato la Kuhisi Pato
Ziada: Sanidi SensorBug kwa Pato la Kuhisi Pato
Ziada: Sanidi SensorBug kwa Pato la Kuhisi Pato

Inawezekana kusanidi SensorBug kwenye Android kwa pato la kuhisi nafasi Kwa kuhisi mabadiliko ya msimamo, inayoitwa mlango wa Garage. Sensorer, SensorBug itagundua ikiwa kifaa kimesimama wima au kimelala chini. Wakati kifaa kiko gorofa, thamani iliyorekodiwa ni 0x20 wakati kifaa kimesimama wima, thamani ni 0x02 Haitofautishi ikiwa nafasi ya X au Y iko juu, ikiwa mhimili wa Z sio juu au chini Njia rahisi zaidi ya kufanya hivyo ni kutumia LightBlue App. SensorBug inapaswa kuonekana kwenye menyu ya skana. Chagua kifaa unachotaka kusanidi, nenda kwa sifa za GATT za usanidi wa Accelerometer UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Tazama picha: Andika kamba mpya ya usanidi:

010d3f02020000002d00000002 Soma tena kamba ya usanidi ili kudhibitisha maandishi.

Ilipendekeza: