Isi kandungan:

Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi: 9 Langkah (dengan Gambar)
Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi: 9 Langkah (dengan Gambar)

Video: Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi: 9 Langkah (dengan Gambar)

Video: Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi: 9 Langkah (dengan Gambar)
Video: 3 Bocah Terlindas Truk Saat Selfie Di Atas Motor 2024, Julai
Anonim
Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Catat Suhu Dengan Bluetooth LE dan RaspberryPi

Instruksional ini adalah mengenai bagaimana menyatukan sistem pemantauan suhu pelbagai nod dengan bug sensor Bluetooth LE dari Blue Radios (BLEHome) dan RaspberryPi 3BTerima kasih kepada pengembangan standard Bluetooth LE, kini terdapat sensor tanpa wayar berkuasa rendah yang tersedia di pasaran dengan kos yang sangat rendah dan dapat dijalankan pada sel duit syiling selama berbulan-bulan dalam satu masa. Salah satu sensor yang saya ambil adalah dari Blue Radio yang disebut Sensor Bugs. Harganya sekitar $ 25 di Amazon, ia adalah peranti Bluetooth LE dengan sensor Suhu, sensor cahaya dan akerometer semuanya dibina ke dalam unit kecil yang dapat berkomunikasi tanpa wayar. Ini adalah padanan yang sesuai untuk Raspberry Pi 3B, yang mempunyai sokongan untuk radio Bluetooth LE.

Langkah 1: Sediakan Raspberry Pi

Langkah pertama adalah mendapatkan persediaan Raspberry Pi yang berfungsi. Ikuti arahan dari laman web Raspberry Pi, muatkan Raspbian pada kad SD, masukkan ke dalam Raspberry Pi dan boot. Saya menyediakan sistem saya dengan versi Raspbian Stretch Lite (No GUI) Nov 2017. Siapkan WiFi jika diperlukan, saya lebih suka menyesuaikan zon waktu ke zon waktu semasa dan bukannya UTC. Anda boleh melakukan ini walaupun arahannya: $ sudo dpkg-reconfigure tzdataRest of instruksi menganggap penyediaan dilakukan walaupun antara muka baris perintah.

Langkah 2: Menyiapkan MySQL pada Raspberry Pi

Adalah berguna untuk memasang pangkalan data secara tempatan untuk menyimpan semua data yang ditangkap. Memasang MySQL pada Raspberry Pi sangat mudah. Juga tidak sukar untuk mengubah skrip untuk menyambung ke pelayan SQL secara luaran, anda boleh melangkau langkah ini jika anda ingin menggunakan pelayan SQL di rangkaian. Terdapat banyak arahan di internet, saya mencadangkan ini: https:// www.stewright.me/2014/06/tutorial-install-…

Setelah pelayan SQL dipasang, anda boleh menggunakan klien MySQL CLI untuk membuat pengguna, pangkalan data dan jadual. Untuk memasukkan MySQL CLI, gunakan perintah:

$ sudo mysql -uroot-pFirst, buat pengguna tempatan untuk memasukkan data yang ditangkap:> BUAT PENGGUNA 'datasrc' @ 'localhost' DIENTIFKAN OLEH 'datasrc000'; Seterusnya, buat pangkalan data dan jadual:> BUAT DATABASE SensorBug; Menyiapkan pengguna kebenaran:> MEMBERIKAN SEMUA KEISTIMEWAAN PADA SensorBug. * KE 'datasrc' @ 'localhost'; Sekarang tambahkan jadual baru ke pangkalan data. Untuk contoh ini, saya akan menambahkan jadual dengan lajur berikut: TARIKH, MASA, ALAMAT, LOKASI, SUHU dan ACCEROMETER

  • TARIKH / MASA - Ini adalah tarikh dan masa data direkodkan
  • ALAMAT - Ini adalah MAC SensorBug yang diambil dari mesej
  • LOKASI - Rentetan yang dapat dibaca manusia untuk menunjukkan di mana sensor berada
  • SUHU - Ini adalah suhu yang direkodkan
  • ACCELE - Ini adalah nilai output accelerometer, berguna untuk merakam kedudukan sensor (jika diaktifkan)

Perintah yang melakukan ini adalah:> GUNAKAN SensorBug; > BUAT data TABLE (tarikh DATE, waktu WAKTU, alamat TINYTEXT, lokasi TINYTEXT, suhu FLOAT, accele INT); Kini pangkalan data sudah siap, kita dapat beralih ke pengaturan sensorBugs.

Langkah 3: Menyiapkan SensorBugs

Bug sensor adalah peranti kecil yang cukup kemas. Malangnya, pengeluar hanya menyediakan aplikasi IOS untuk memprogramkannya. Walau bagaimanapun, masih boleh digunakan dengannya jika anda hanya mempunyai peranti Android. Langkah pertama, pasangkan peranti dengan telefon. Tanpa memasangkan peranti, SensorBug tidak akan mengiklankan data. Saya cuba melihat sama ada saya dapat melakukan ini secara langsung dengan RaspberryPi, malangnya, sepertinya pemacu Bluetooth LE pada RaspberryPi masih eksperimen dan mengandungi pepijat untuk mengelakkannya berpasangan dengan peranti Bluetooth LE. Versi pemacu blueZ masa depan mungkin memperbaikinya, tetapi seperti penulisan semasa, tidak ada cara untuk memasangkan SensorBug dengan RaspberryPi. Nasib baik, kami tidak perlu memasangkan peranti untuk menangkap data yang diiklankan. Satu-satunya perkara yang kita perlukan ialah telefon untuk mengkonfigurasi SensorBug. Secara lalai, SensorBug akan mula mengiklankan data suhu pada selang 1 saat setelah dipasangkan dengan peranti. Untuk data suhu tangkapan, hanya itu yang diperlukan. Sekiranya anda merancang untuk memperluas untuk menggunakan kedudukan atau sensor cahaya, daripada konfigurasi, peranti akan diperlukan. Untuk pemula, kami akan memasangkan peranti dan memutuskan sambungan. Ini akan cukup baik untuk tujuan penangkapan suhu. Mulakan dengan menekan kedua-dua butang pada SensorBug. LED biru / hijau akan berkelip, yang menunjukkan ia dihidupkan. Tekan salah satu butang, LED hijau akan menyala, menunjukkan bahawa suaranya sudah menyala. Sekiranya LED hijau tidak menyala, tekan kedua-dua butang untuk mencuba menghidupkan semula peranti. Tekan dan tahan salah satu butang sehingga LED biru mula berkedip. Ini akan menjadikan peranti menjadi mod pasangan. Pergi ke menu konfigurasi Bluetooth di telefon dan cari peranti SensorBug. Setelah muncul, pilih untuk dipasangkan dengan peranti. Itu sahaja, sekarang SensorBug diaktifkan dan mengiklankan data suhu

Langkah 4: Memasang Bluetooth LE Python Wrapper

Seterusnya kita perlu memasang perpustakaan untuk python untuk bercakap dengan Bluetooth LE stack. Arahan boleh didapati di sini: https://github.com/IanHarvey/bluepy Untuk Python 2.7, semudah memasukkan arahan berikut:

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

Langkah 5: Imbas dan Cari Alamat SensorBug

Untuk mengetahui alamat MAC SensorBug, gunakan arahan ini: $ sudo hcitool lescan Anda akan melihat output seperti:

EC: FE: 7E: 10: B1: 92 (tidak diketahui) Sekiranya anda mempunyai banyak peranti bluetooth LE, mungkin sukar untuk mengetahui yang mana anda bercakap. Anda boleh mencuba bluetoothctl yang memberikan lebih banyak butiran:

$ sudo bluetoothctl [bluetooth] # scan pada [BARU] EC Peranti: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Key: 0x0085 [CHG] EC Device: FE: 7E: 10: B1: 92 PengeluarData Nilai: 0x02 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x25 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] EC Device: FE: 7E: 10: B1: 92 PembuatData Nilai: 0x41 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] EC Device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 Nilai Data Pengilang: 0x43 [CHG] EC Peranti: FE: 7E: 10: B1: 92 Nilai Pengeluar Data: 0x0b [CHG] EC Peranti: FE: 7E: 10: B1: 92 ManufacturerData Nilai: 0x01 [CHG] EC Peranti: FE: 7E: 10: B1: 92 Pengilang Nilai Data: 0x6f

Catat alamat MAC, ini perlu dimasukkan ke dalam skrip python untuk menyaring peranti Bluetooth LE yang tidak diingini

Langkah 6: Tambahkan Skrip Python

Salinan skrip Python boleh didapati dari:

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

Berikut adalah fail yang sama, jaga indent ketika menyalin:

Juga, kemas kini alamat MAC dalam fail python agar sesuai dengan alamat sensor yang diperoleh dari hasil imbasan.

# Program ini adalah perisian percuma: anda boleh mengagihkannya dan / atau mengubah suai

# di bawah syarat-syarat Lesen Awam Umum GNU seperti yang diterbitkan oleh

# Yayasan Perisian Percuma, sama ada versi 3 dari Lesen, atau

# (mengikut pilihan anda) versi lain.

#

# Program ini diedarkan dengan harapan dapat bermanfaat, # tetapi TANPA JAMINAN; tanpa jaminan tersirat dari

# KELEBIHAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat

# GNU General Public License untuk maklumat lebih lanjut.

#

# Anda semestinya telah menerima salinan GNU General Public License

# bersama dengan program ini. Sekiranya tidak, lihat.

# bscan.py - Pengimbas bluetooth LE ringkas dan pengekstrak data

dari pengimbas import bluepy.btle, DefaultDelegate

masa import

import pymysql

struktur import

nama hos = 'localhost'

nama pengguna = 'datasrc'

kata laluan = 'datasrc000'

pangkalan data = 'SensorBug'

#Masukkan alamat MAC sensor dari lescan

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

SENSOR_LOCATION = ["Garage", "Exterior"]

kelas DecodeErrorException (Pengecualian):

def _init _ (diri, nilai):

diri.nilai = nilai

def _str _ (diri):

return repr (nilai diri.)

kelas ScanDelegate (DefaultDelegate):

def _init _ (diri):

DefaultDelegate._ init _ (diri)

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

jika isNewDev:

cetak "Perisian yang ditemui", dev.addr

elif isNewData:

cetak "Menerima data baru dari", dev.addr

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

Jadual #blesensor adalah tarikh, masa, addr, lokasi, temp, accero

cur = conn.cursor ()

dostr = 'MASUKKAN NILAI data (CURRENT_DATE (), SEKARANG (),% s,% s,% s,% s);'

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

conn.commit ()

scanner = Pengimbas (). denganDelegate (ScanDelegate ())

myConnection = pymysql.connect (host = nama host, pengguna = nama pengguna, passwd = kata laluan, db = pangkalan data)

ManuDataHex =

ReadLoop = Betul

cuba:

semasa (ReadLoop):

devices = scanner.scan (2.0)

ManuData = ""

untuk peranti dalam peranti:

kemasukan = 0

AcceroData = 0

Jenis Accero = 0

TempData = 0

untuk saddr di SENSOR_ADDRESS:

kemasukan + = 1

jika (dev.addr == saddr):

cetak "Peranti% s (% s), RSSI =% d dB"% (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION [entri-1]

untuk (adtype, desc, value) dalam dev.getScanData ():

cetak "% s =% s"% (turun, nilai)

jika (desc == "Pengilang"):

ManuData = nilai

jika (ManuData == ""):

cetak "Tidak ada data yang diterima, penyahkodan akhir"

teruskan

#cetak ManuData

untuk i, j dalam zip (ManuData [:: 2], ManuData [1:: 2]):

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

#Mulakan penyahkodan data Pengilang mentah

jika ((ManuDataHex [0] == 0x85) dan (ManuDataHex [1] == 0x00)):

cetak "Header byte 0x0085 ditemui"

lain:

cetak "Header byte 0x0085 tidak dijumpai, penyahkodan berhenti"

teruskan

#Skip Major / Minor

#Index 5 adalah 0x3c, menunjukkan tahap bateri dan konfigurasi #

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

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

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

sementara (idx <len (ManuDataHex)):

#print "Idx:" + str (idx)

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

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

Data #Accerometer

idx + = 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx + 1]

idx + = 2

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

Data suhu

idx + = 1

TempData = ManuDataHex [idx]

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

TempData = TempData * 0.0625

idx + = 2

lain:

idx + = 1

cetak "Alamat Peranti:" + CurrentDevAddr

cetak "Lokasi Peranti:" + CurrentDevLoc

cetak "Level Battery:" + str (BatteryLevel) + "%"

cetak "Config Counter:" + str (ConfigCounter)

cetak "Data Accelero:" + hex (Jenis Accelero) + "" + hex (AcceleroData)

cetak "Data Temp:" + str (TempData)

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

ReadLoop = Salah

kecuali DecodeErrorException:

lulus

Langkah 7: Uji Skrip Python

Skrip mesti dijalankan secara root, jadi:

$ sudo python bscan.pyPerisian yang dijumpai ec: 6e: 7e: 10: b1: 92 Peranti ec: 6e: 7e: 10: b1: 92 (awam), RSSI = -80 dB Bendera = 06 Perkhidmatan 16b Tidak Lengkap = 0a18 Pengilang = 850002003c25094102024309016f Header byte 0x0085 dijumpai Alamat Peranti: ec: 6e: 7e: 10: b1: 92 Lokasi Peranti: Garasi Bateri Aras: 37% Konfigurasi Konter: 9 Data Accero: 0x2 0x2 Data Temp: 16.5625

Langkah 8: Tambahkan Python Scrip ke Crontab

Skrip python mesti dijalankan dalam root, jadi jika anda ingin menangkap data secara automatik, ia perlu ditambahkan ke crontab root. Untuk contoh ini, saya menjalankan skrip setiap 20 minit Gunakan arahan:

$ sudo crontab -e

# Edit fail ini untuk memperkenalkan tugas yang akan dijalankan oleh cron.

# # Setiap tugas yang dijalankan harus ditentukan melalui satu baris # menunjukkan dengan medan yang berlainan ketika tugas akan dijalankan # dan perintah apa yang akan dijalankan untuk tugas tersebut # # Untuk menentukan waktu anda dapat memberikan nilai konkrit selama # minit (m), jam (h), hari bulan (dom), bulan (mon), # dan hari dalam seminggu (dow) atau gunakan '*' dalam bidang ini (untuk 'mana-mana'). # # Perhatikan bahawa tugas akan dimulakan berdasarkan pengertian sistem daemon # daemon mengenai zon waktu dan waktu. # # Output dari pekerjaan crontab (termasuk kesalahan) dihantar melalui # e-mel kepada pengguna yang dimiliki oleh file crontab (kecuali diarahkan). # # Contohnya, anda boleh menjalankan sandaran semua akaun pengguna anda # jam 5 pagi setiap minggu dengan: # 0 5 * * 1 tar -zcf /var/backups/home.tgz / home / # # Untuk maklumat lebih lanjut, lihat halaman manual crontab (5) dan 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

Itu sahaja. Skrip python akan dijalankan secara berkala dan mengekod semula output ke pangkalan data SQL

Langkah 9: Tambahan: Konfigurasikan SensorBug untuk Output Sensing Position

Tambahan: Konfigurasikan SensorBug untuk Output Sensing Posisi
Tambahan: Konfigurasikan SensorBug untuk Output Sensing Posisi
Tambahan: Konfigurasikan SensorBug untuk Output Sensing Posisi
Tambahan: Konfigurasikan SensorBug untuk Output Sensing Posisi

Adalah mungkin untuk mengkonfigurasi SensorBug pada Android untuk output penderiaan kedudukan Untuk penginderaan perubahan kedudukan, yang disebut pintu Garage. Sensor, SensorBug akan mengesan jika peranti berdiri tegak atau berbaring rata. Apabila peranti rata, nilai yang dicatat adalah 0x20 semasa peranti berdiri tegak, nilainya adalah 0x02. Ia tidak membezakan jika kedudukan X atau Y naik, selagi paksi Z tidak naik atau turun. Cara termudah untuk melakukannya adalah dengan menggunakan Aplikasi LightBlue. SensorBug akan muncul di menu imbasan. Pilih peranti yang ingin anda konfigurasikan, pergi ke ciri GATT untuk konfigurasi Accelerometer UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

Lihat gambar: Tulis rentetan konfigurasi baru:

010d3f02020000002d00000002Baca semula rentetan konfigurasi untuk mengesahkan penulisan. Ini membolehkan pecutan untuk pengesanan kedudukan.

Disyorkan: