Talaan ng mga Nilalaman:
- Hakbang 1: I-setup ang Raspberry Pi
- Hakbang 2: Pagse-set up ng MySQL sa Raspberry Pi
- Hakbang 3: Pag-set up ng SensorBugs
- Hakbang 4: Pag-install ng Bluetooth LE Python Wrapper
- Hakbang 5: I-scan at Alamin ang Address ng SensorBug
- Hakbang 6: Idagdag ang Python Script
- Hakbang 7: Subukan ang Python Script
- Hakbang 8: Idagdag ang Python Scrip sa Crontab
- Hakbang 9: Dagdag: I-configure ang SensorBug para sa Output ng Sensing ng Posisyon
Video: Subaybayan at Itala ang Temperatura Sa Bluetooth LE at RaspberryPi: 9 Mga Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Ang itinuturo na ito ay tungkol sa kung paano pagsamahin ang isang multi-node temperatura monitoring system na may Bluetooth LE sensor bug mula sa Blue Radios (BLEHome) at RaspberryPi 3BThanks sa pagbuo ng pamantayang Bluetooth LE, madali na ngayong magagamit ang mga mababang power wireless sensor sa merkado. para sa napakababang gastos at maaaring tumakbo sa isang solong coin cell nang maraming buwan nang paisa-isa. Isa sa mga sensor na kinuha ko ay mula sa Blue Radio na tinatawag na Sensor Bugs. Nagkakahalaga ng humigit-kumulang na $ 25 sa Amazon, ito ay isang aparato na Bluetooth LE na may Temperatura sensor, light sensor at accerometer na lahat ay nabubuo sa isang maliit na yunit na maaaring makipag-usap nang walang wireless. Ito ay isang perpektong tugma para sa Raspberry Pi 3B, na bumuo ng suporta para sa Bluetooth LE radio.
Hakbang 1: I-setup ang Raspberry Pi
Ang unang hakbang ay upang makakuha ng isang gumaganang pag-setup ng Raspberry Pi. Sundin ang tagubilin mula sa website ng Raspberry Pi, i-load ang Raspbian sa isang SD card, ipasok sa Raspberry Pi at i-boot ito. Itinakda ko ang aking system sa bersyon ng Raspbian Stretch Lite (No GUI) Nob 2017. I-set up ang WiFi kung kinakailangan, mas gusto kong ayusin ang time zone sa kasalukuyang time zone sa halip na UTC. Maaari mong gawin ito kahit na ang utos: $ sudo dpkg-reconfigure tzdataRest ng tagubilin ipagpalagay na ang pag-set up ay tapos na kahit na ang linya ng command interface.
Hakbang 2: Pagse-set up ng MySQL sa Raspberry Pi
Kapaki-pakinabang na magkaroon ng isang lokal na database na naka-install upang maiimbak ang lahat ng mga nakuhang data. Ang pag-install ng MySQL sa Raspberry Pi ay napakadali. Hindi rin mahirap baguhin ang script upang kumonekta sa isang SQL server sa labas, maaari mong laktawan ang hakbang na ito kung nais mong gumamit ng isang SQL server sa network. Maraming mga tagubilin sa net, iminumungkahi ko ito: https:// www.stewright.me/2014/06/tutorial-install-…
Kapag na-install na ang SQL server, maaari mong gamitin ang MySQL CLI client upang lumikha ng gumagamit, database at talahanayan. Upang ipasok ang MySQL CLI, gamitin ang utos:
$ sudo mysql -uroot-pFirst, lumikha ng isang lokal na gumagamit upang magsingit ng nakuhang data:> GUMAWA NG USER 'datasrc' @ 'localhost' IDENTIFYED BY 'datasrc000'; Susunod, lumikha ng isang database at talahanayan:> GUMAWA NG DATABASE SensorBug; Pagse-set up ng gumagamit pahintulot:> bigyan ANG LAHAT NG PRIVILEGES SA SensorBug. * SA 'datasrc' @ 'localhost'; Ngayon magdagdag ng isang bagong talahanayan sa database. Para sa halimbawang ito, magdaragdag ako ng isang talahanayan na may mga sumusunod na haligi: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE at ACCEROMETER
- PETSA / PANAHON - Ito ang petsa at oras na naitala ang data
- ADDRESS - Ito ang MAC ng SensorBug kung saan nakuha ang mensahe
- LOKASYON - Isang nababasa na string ng tao upang ipahiwatig kung saan matatagpuan ang sensor
- TEMPERATURE - Ito ang naitala na temperatura
- ACCELE - Ito ang halaga ng output ng accelerometer, kapaki-pakinabang para sa pag-record ng posisyon ng sensor (kung pinagana)
Ang utos na ginagawa ito ay:> GAMITIN ang SensorBug; > GUMAWA ng data ng TABLE (petsa DATE, oras TIME, address TINYTEXT, lokasyon TINYTEXT, temperatura FLOAT, accele INT); Ngayon handa na ang database, maaari tayong magpatuloy sa pag-set up ng mga sensorBugs.
Hakbang 3: Pag-set up ng SensorBugs
Ang mga sensor bug ay medyo maayos na maliliit na aparato. Sa kasamaang palad, ang tagagawa ay nagbigay lamang ng IOS app para sa pag-program nito. Huwag kailanman mas kaunti, posible pa ring makipagtulungan dito kung mayroon ka lamang isang Android device. Unang hakbang, ipares ang aparato sa isang telepono. Nang walang pagpapares ng aparato, ang SensorBug ay hindi mag-a-advertise ng data. Sinubukan kong tingnan kung magagawa ko ito nang direkta sa RaspberryPi, sa kasamaang palad, tila ang driver ng Bluetooth LE sa RaspberryPi ay pang-eksperimento pa rin at naglalaman ng mga bug upang mapigilan ito mula sa pagpapares sa mga aparatong Bluetooth LE. Maaaring ayusin ito ng hinaharap na bersyon ng driver ng blueZ, ngunit tulad ng kasalukuyang pagsulat, walang paraan upang ipares ang SensorBug sa RaspberryPi. Sa kabutihang palad, hindi namin kailangang ipares ang aparato upang makuha ang nai-advertise nitong data. Ang tanging bagay na kailangan namin ay isang telepono upang mai-configure ang SensorBug. Bilang default, magsisimulang mag-advertise ang data ng temperatura ng SensorBug sa pagitan ng 1s sa sandaling ito ay ipinares sa isang aparato. Para sa data ng temperatura ng pagkuha, iyon lang ang kailangan. Kung balak mong palawakin upang magamit ang posisyon o light sensor, kaysa sa pagsasaayos ay kailangan ang aparato. Para sa nagsisimula, ipares namin ang aparato at idiskonekta. Ito ay magiging sapat para sa layunin ng pagkuha ng temperatura. Magsimula sa pamamagitan ng pagpindot sa parehong mga pindutan sa SensorBug. Ang asul / berde na LED ay magpikit, na nagpapahiwatig na ito ay pinalakas. Pindutin ang isa sa mga pindutan, ang berdeng LED ay dapat na ilaw, ipahiwatig na ang lakas ay nakabukas. Kung hindi naiilawan ang berdeng LED, pindutin ang parehong pindutan upang subukang muling buksan ang aparato. Pindutin nang matagal ang isa sa mga pindutan hanggang sa magsimulang kumurap ang asul na LED. Ilalagay nito ang aparato sa pares mode. Pumunta sa menu ng pagsasaayos ng Bluetooth sa telepono at hanapin ang SensorBug aparato. Kapag nagpakita ito, piliin ito upang ipares sa aparato. Iyon lang, ngayon ang SensorBug ay pinapagana at ina-advertise ang data ng temperatura
Hakbang 4: Pag-install ng Bluetooth LE Python Wrapper
Susunod na kailangan naming i-install ang library para sa python upang makipag-usap sa Bluetooth LE stack. Ang tagubilin ay matatagpuan dito: https://github.com/IanHarvey/bluepyFor Python 2.7, ito ay kasing simple ng pagpasok ng mga sumusunod na utos:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Hakbang 5: I-scan at Alamin ang Address ng SensorBug
Upang malaman ang SensorBug MAC address, gamitin ang utos na ito: $ sudo hcitool lescan Dapat mong makita ang output tulad ng:
EC: FE: 7E: 10: B1: 92 (hindi alam) Kung mayroon kang maraming mga aparato ng Bluetooth blu sa paligid, maaaring mahirap malaman kung alin ang kausap mo. Maaari mong subukan ang blu Bluetoothctl na nagbibigay ng higit pang mga detalye:
$ sudo bluetoothctl [bluetooth] # scan sa [BAGO] Device EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaData Key: 0x0085 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaMga Halaga ng Data: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaMga Halaga ng Data: 0x3c [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x25 [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x09 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaHalaga ng Data: 0x41 [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaMga Halaga ng Data: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x43 [CHG] Device EC: FE: 7E: 10: B1: 92 Halaga ng GumagawaData: 0x0b [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaData Halaga: 0x01 [CHG] Device EC: FE: 7E: 10: B1: 92 TagagawaMga Halaga ng Data: 0x6f
Itala ang MAC address, kakailanganin itong ipasok sa script ng sawa upang salain ang mga hindi ginustong mga aparato ng Bluetooth LE
Hakbang 6: Idagdag ang Python Script
Ang isang kopya ng script ng Python ay magagamit mula sa:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Narito ang parehong file, alagaan ang indent kapag kumopya:
Gayundin, i-update ang MAC address sa python file upang maitugma ang sensor address na nakuha mula sa resulta ng pag-scan.
# Ang program na ito ay libre software: maaari mo itong ipamahagi muli at / o baguhin
# ito sa ilalim ng mga tuntunin ng GNU General Public Lisensya tulad ng nai-publish ng
# ang Libreng Software Foundation, alinman sa bersyon 3 ng Lisensya, o
# (sa iyong pagpipilian) anumang susunod na bersyon.
#
# Ang program na ito ay ipinamamahagi sa pag-asang ito ay magiging kapaki-pakinabang, # ngunit WALANG ANUMANG WARRANTY; nang hindi man ipinahiwatig ang warranty ng
# MERCHANTABILITY o FITNESS PARA SA ISANG KASUNDUAN NA LAYUNIN. Tingnan ang
# GNU Pangkalahatang Lisensya ng Publiko para sa higit pang mga detalye.
#
# Dapat nakatanggap ka ng isang kopya ng GNU General Public Lisensya
# kasama ang program na ito. Kung hindi, kita n'yo.
# bscan.py - Simpleng bluetooth LE scanner at pagkuha ng data
mula sa bluepy.btle import Scanner, DefaultDelegate
oras ng pag-import
i-import ang pymysql
import na istruktura
hostname = 'localhost'
username = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
# Ipasok ang MAC address ng sensor mula sa lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garage", "Exterior"]
klase DecodeErrorException (Exception):
def _init _ (sarili, halaga):
self.value = halaga
def _str _ (sarili):
return repr (self.value)
klase ScanDelegate (DefaultDelegate):
def _init _ (sarili):
DefaultDelegate._ init _ (sarili)
def handleDiscovery (sarili, dev, isNewDev, ayNewData):
kung isNewDev:
i-print ang "Natuklasan na aparato", dev.addr
elif ayNewData:
i-print ang "Nakatanggap ng bagong data mula sa", dev.addr
def doQueryInsert (kon, addr, loc, temp, accero):
Ang talahanayan ng #blesensor ay petsa, oras, addr, lokasyon, temp, accero
cur = conn.cursor ()
dostr = 'INSERT SA data VALUES (CURRENT_DATE (), NGAYON (),% s,% s,% s,% s);'
cur.execut (dostr, (addr, loc, temp, accero))
conn.commit ()
scanner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = hostname, user = username, passwd = password, db = database)
ManuDataHex =
ReadLoop = Tama
subukan:
habang (ReadLoop):
mga aparato = scanner.scan (2.0)
ManuData = ""
para sa dev sa mga aparato:
entry = 0
AcceroData = 0
AcceroType = 0
TempData = 0
para sa saddr sa SENSOR_ADDRESS:
entry + = 1
kung (dev.addr == saddr):
i-print ang "Device% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [entry-1]
para sa (adtype, desc, halaga) sa dev.getScanData ():
i-print ang "% s =% s"% (pagbaba, halaga)
kung (desc == "Tagagawa"):
ManuData = halaga
kung (ManuData == ""):
i-print ang "Walang natanggap na data, tapusin ang pag-decode"
magpatuloy
#print ManuData
para sa i, j sa zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i + j, 16))
#Simulan ang pag-decode ng raw na data ng Tagagawa
kung ((ManuDataHex [0] == 0x85) at (ManuDataHex [1] == 0x00)):
i-print ang "Header byte 0x0085 found"
iba pa:
i-print ang "Hindi nahanap ang header byte 0x0085, pag-decode stop"
magpatuloy
#Skip Major / Minor
Ang #Index 5 ay 0x3c, ipahiwatig ang antas ng baterya at config #
kung (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
habang (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Data:" + hex (ManuDataHex [idx])
kung (ManuDataHex [idx] == 0x41):
Data ng #Atometometro
idx + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
idx + = 2
elif (ManuDataHex [idx] == 0x43):
Data ng #Temperature
idx + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0.0625
idx + = 2
iba pa:
idx + = 1
i-print ang "Address ng Device:" + KasalukuyangDevAddr
i-print ang "Lokasyon ng Device:" + KasalukuyangDevLoc
i-print ang "Antas ng Baterya:" + str (BatteryLevel) + "%"
i-print ang "Config Counter:" + str (ConfigCounter)
i-print ang "Data ng Accelero:" + hex (AcceleroType) + "" + hex (AcceleroData)
i-print ang "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Mali
maliban sa DecodeErrorException:
pumasa
Hakbang 7: Subukan ang Python Script
Ang script ay dapat na patakbuhin sa root, kaya:
$ sudo python bscan.pyDiskubre ang aparato ec: 6e: 7e: 10: b1: 92 Device ec: 6e: 7e: 10: b1: 92 (publiko), RSSI = -80 dB Mga Bandila = 06 Hindi kumpleto ang 16b Mga Serbisyo = 0a18 Tagagawa = 850002003c25094102024309016f Nakita ang header byte 0x0085 Address ng Device: ec: 6e: 7e: 10: b1: 92 Lokasyon ng Device: Antas ng Baterya ng Garage: 37% Config Counter: 9 Data ng Accero: 0x2 0x2 Temp Data: 16.5625
Hakbang 8: Idagdag ang Python Scrip sa Crontab
Ang script ng python ay dapat na patakbuhin sa ugat, kaya kung nais mong awtomatikong makuha ang data, kakailanganin itong idagdag sa crontab ng ugat. Para sa halimbawang ito, pinapatakbo ko ang script tuwing 20 minuto Gumamit ng utos:
$ sudo crontab -e
# I-edit ang file na ito upang ipakilala ang mga gawain na tatakbo sa pamamagitan ng cron.
# # Ang bawat gawain na tatakbo ay dapat na tinukoy sa pamamagitan ng isang solong linya # na nagpapahiwatig na may iba't ibang mga patlang kung kailan tatakbo ang gawain # at kung anong utos ang tatakbo para sa gawain # # Upang tukuyin ang oras na maaari kang magbigay ng mga kongkretong halaga para sa # minuto (m), oras (h), araw ng buwan (dom), buwan (mon), # at araw ng linggo (dow) o paggamit ng '*' sa mga patlang na ito (para sa 'anumang'). # # Pansinin na magsisimula ang mga gawain batay sa sistema ng cron na # daemon's paniwala ng oras at timezones. # # Output ng mga trabaho sa crontab (kabilang ang mga error) ay ipinadala sa pamamagitan ng # email sa gumagamit na ang crontab file ay kabilang (maliban kung nai-redirect). # # Halimbawa, maaari kang magpatakbo ng isang backup ng lahat ng iyong mga account ng gumagamit # alas-5 ng umaga bawat linggo kasama ang: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Para sa karagdagang impormasyon tingnan ang mga manu-manong pahina ng crontab (5) at cron (8) # # mh dom mon dow utos 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python / home /pi /bscan.py
Ayan yun. Ang script ng sawa ay tatakbo sa regular na agwat at muling ibabalik ang output sa database ng SQL
Hakbang 9: Dagdag: I-configure ang SensorBug para sa Output ng Sensing ng Posisyon
Posibleng i-configure ang SensorBug sa Android para sa output sensing output Para sa pagbabago ng posisyon sa sensing, tinatawag ding Garage door.sensing, matutukoy ng SensorBug kung ang aparato ay nakatayo nang patayo o nahuhiga nang patag. Kapag ang aparato ay flat, ang halagang naitala ay 0x20 habang kung ang aparato ay nakatayo nang patayo, ang halaga ay 0x02 Hindi ito naiiba kung ang posisyon ng X o Y ay pataas, basta ang Z axis ay hindi pataas o pababa. Ang pinakamadaling paraan upang gawin ito ay ang paggamit ng LightBlue App. Dapat ipakita ang SensorBug sa menu ng pag-scan. Piliin ang aparato na nais mong i-configure, pumunta sa mga katangian ng GATT para sa pagsasaayos ng Accelerometer UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Tingnan ang imahe: Sumulat ng isang bagong string ng pagsasaayos:
010d3f02020000002d00000002Basahin muli ang string ng pagsasaayos upang kumpirmahin ang pagsulat. Nagbibigay-daan ito sa accelerometer para sa sensasyong posisyon.
Inirerekumendang:
Subaybayan ang COVID-19 Outbreak ng ESP8266: 11 Mga Hakbang (na may Mga Larawan)
Subaybayan ang COVID-19 Outbreak ng ESP8266: Tutulungan ka ng maliit na gadget na ito na maging napapanahon tungkol sa pagsiklab sa coronavirus at ang sitwasyon sa iyong bansa. Ito ay isang proyekto na nakabatay sa IoT na nagpapakita ng real-time na data ng mga kaso, pagkamatay at nakuhang mga tao ng coronavirus (COVID-19).
Subaybayan at subaybayan para sa Mga Maliit na Tindahan: 9 Mga Hakbang (na may Mga Larawan)
Subaybayan at subaybayan ang para sa Mga Maliit na Tindahan: Ito ay isang sistema na ginawa para sa maliliit na tindahan na dapat na mai-mount sa mga e-bike o e-scooter para sa maihatid na saklaw, halimbawa isang panaderya na nais maghatid ng mga pastry. Ano ang ibig sabihin ng Track and Trace? Ang track at trace ay isang sistema na ginamit ng ca
Subaybayan ang Mga Heon ng Litrong Pang-Heine ng Langis Gamit ang Email, SMS, at Alerto sa Pushbullet: 9 Mga Hakbang (na may Mga Larawan)
Subaybayan ang Mga Heon ng Litrong Pang-Heine ng Langis Gamit ang Email, SMS, at Alerto sa Pushbullet: IMPORMASYON SA KALIGTASAN: Kung sakaling may nais malaman kung " ligtas itong itayo / i-install " - Dinala ko ito sa 2 magkakaibang mga kumpanya ng Langis para sa mga pagsasaalang-alang sa feedback / kaligtasan, at pinatakbo ko ito ng Kagawaran ng Pag-iingat sa Fire Fire ng kagawaran ng bumbero
Paano Gumawa ng isang Device ng IoT upang Makontrol ang Mga Kagamitan at Subaybayan ang Panahon Gamit ang Esp8266: 5 Mga Hakbang
Paano Gumawa ng isang IoT Device upang Makontrol ang Mga Kagamitan at Subaybayan ang Panahon Gamit ang Esp8266: Ang Internet ng mga bagay (IoT) ay ang inter-networking ng mga pisikal na aparato (tinukoy din bilang " mga konektadong aparato " at " mga smart device "), mga gusali, at iba pang mga item - naka-embed sa electronics, software, sensor, actuators, at
Subaybayan ang Damit - Ikonekta ang Mga Senyas sa Puso sa IoT: 18 Hakbang (na may Mga Larawan)
Monitor Dress - Ikonekta ang Mga Senyas sa Puso sa IoT: Ang Monitor Dress ay isang eksperimento sa pagsasaliksik ng iba't ibang mga paraan ng pag-digitalize ng aktibidad ng puso ng tagapagsuot pati na rin ang pagproseso ng data. Tatlong mga electrode sa loob ng damit ang sumusukat sa mga signal ng elektrikal na tumatakbo sa pamamagitan ng tagapagsuot bod