Daftar Isi:

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

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

Video: Pantau dan Rekam Suhu Dengan Bluetooth LE dan RaspberryPi: 9 Langkah (dengan Gambar)
Video: PART 2 SETTING LENGKAP MINING VERUS COIN - STB HG680P 2024, November
Anonim
Pantau dan Rekam Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Rekam Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Rekam Suhu Dengan Bluetooth LE dan RaspberryPi
Pantau dan Rekam Suhu Dengan Bluetooth LE dan RaspberryPi

Instruksi ini adalah tentang bagaimana menyusun sistem pemantauan suhu multi-node dengan bug sensor Bluetooth LE dari Blue Radios (BLEHome) dan RaspberryPi 3BBerkat pengembangan standar Bluetooth LE, sekarang tersedia sensor nirkabel berdaya rendah di pasar untuk biaya yang sangat rendah dan dapat berjalan pada sel koin tunggal selama berbulan-bulan pada suatu waktu. Salah satu sensor yang saya ambil adalah dari Blue Radio yang disebut Sensor Bugs. Dengan biaya sekitar $25 di Amazon, ini adalah perangkat Bluetooth LE dengan Sensor suhu, sensor cahaya, dan akselometer, semuanya dibangun menjadi unit kecil yang dapat berkomunikasi secara nirkabel. Ini sangat cocok untuk Raspberry Pi 3B, yang memiliki dukungan bawaan untuk radio Bluetooth LE.

Langkah 1: Siapkan Raspberry Pi

Langkah pertama adalah mendapatkan pengaturan Raspberry Pi yang berfungsi. Ikuti instruksi dari situs web Raspberry Pi, muat Raspbian pada kartu SD, masukkan ke Raspberry Pi dan boot. Saya mengatur sistem saya dengan Raspbian Stretch Lite (Tanpa GUI) versi Nov 2017. Atur WiFi jika diperlukan, saya lebih suka menyesuaikan zona waktu ke zona waktu saat ini, bukan UTC. Anda dapat melakukan ini melalui perintah: $ sudo dpkg-reconfigure tzdataRest dari instruksi menganggap pengaturan dilakukan melalui antarmuka baris perintah.

Langkah 2: Menyiapkan MySQL di Raspberry Pi

Ini berguna untuk memiliki database yang diinstal secara lokal untuk menyimpan semua data yang diambil. Menginstal MySQL di Raspberry Pi sangat mudah. Juga tidak sulit untuk memodifikasi skrip untuk terhubung ke server SQL secara eksternal, Anda dapat melewati langkah ini jika Anda ingin menggunakan server SQL di jaringan. Ada banyak instruksi di internet, saya sarankan ini: https:// www.stewright.me/2014/06/tutorial-install-…

Setelah SQL server diinstal, Anda dapat menggunakan klien MySQL CLI untuk membuat pengguna, database, dan tabel. Untuk masuk ke MySQL CLI, gunakan perintah:

$ sudo mysql -uroot-pPertama, buat pengguna lokal untuk memasukkan data yang diambil: > CREATE USER 'datasrc'@'localhost' DIIDENTIFIKASI OLEH 'datasrc000';Selanjutnya, buat database dan tabel: > CREATE DATABASE SensorBug;Menyiapkan pengguna izin: > BERIKAN SEMUA HAK ISTIMEWA PADA SensorBug.* KE 'datasrc'@'localhost';Sekarang tambahkan tabel baru ke database. Untuk contoh ini, saya akan menambahkan tabel dengan kolom berikut: TANGGAL, WAKTU, ALAMAT, LOKASI, SUHU dan ACCEROMETER

  • TANGGAL/WAKTU - Ini adalah tanggal dan waktu data direkam
  • ADDRESS - Ini adalah MAC dari SensorBug tempat pesan diambil
  • LOKASI - String yang dapat dibaca manusia untuk menunjukkan di mana sensor berada
  • SUHU - Ini adalah suhu yang tercatat
  • ACCELE - Ini adalah nilai output accelerometer, berguna untuk merekam posisi sensor (jika diaktifkan)

Perintah yang melakukan ini adalah: > GUNAKAN SensorBug; > CREATE TABLE data (tanggal TANGGAL, WAKTU waktu, alamat TINYTEXT, lokasi TINYTEXT, suhu FLOAT, accele INT);Sekarang database sudah siap, kita dapat melanjutkan untuk menyiapkan sensorBugs.

Langkah 3: Menyiapkan SensorBugs

Bug sensor adalah perangkat kecil yang cukup rapi. Sayangnya, pabrikan hanya menyediakan aplikasi iOS untuk memprogramnya. Namun demikian, masih mungkin untuk bekerja dengannya jika Anda hanya memiliki perangkat Android. Langkah pertama, pasangkan perangkat dengan telepon. Tanpa memasangkan perangkat, SensorBug tidak akan mengiklankan data. Saya mencoba melihat apakah saya dapat melakukan ini secara langsung dengan RaspberryPi, sayangnya, sepertinya driver Bluetooth LE di RaspberryPi masih eksperimental dan mengandung bug untuk mencegahnya dipasangkan dengan perangkat Bluetooth LE. Versi driver blueZ yang akan datang mungkin memperbaikinya, tetapi seperti tulisan saat ini, tidak ada cara untuk memasangkan SensorBug dengan RaspberryPi. Untungnya, kita tidak perlu memasangkan perangkat untuk menangkap data yang diiklankan. Satu-satunya hal yang kita butuhkan adalah telepon untuk mengkonfigurasi SensorBug. Secara default, SensorBug akan mulai mengiklankan data suhu pada interval 1 detik setelah dipasangkan dengan perangkat. Untuk menangkap data suhu, hanya itu yang diperlukan. Jika Anda berencana untuk memperluas menggunakan sensor posisi atau cahaya, maka konfigurasi perangkat akan diperlukan. Sebagai permulaan, kami akan memasangkan perangkat dan memutuskan sambungan. Ini akan cukup baik untuk tujuan penangkapan suhu. Mulailah dengan menekan kedua tombol pada SensorBug. LED biru/hijau akan berkedip, yang menunjukkan bahwa itu dihidupkan. Tekan salah satu tombol, LED hijau akan menyala, menunjukkan daya menyala. Jika LED hijau tidak menyala, tekan kedua tombol untuk mencoba menghidupkan perangkat lagi. Tekan dan tahan salah satu tombol hingga LED biru mulai berkedip. Ini akan menempatkan perangkat ke mode berpasangan. Masuk ke menu konfigurasi Bluetooth di telepon dan cari perangkat SensorBug. Setelah muncul, pilih untuk dipasangkan dengan perangkat. Itu saja, sekarang SensorBug diaktifkan dan mengiklankan data suhu

Langkah 4: Memasang Bluetooth LE Python Wrapper

Selanjutnya kita perlu menginstal perpustakaan untuk python untuk berbicara dengan Bluetooth LE stack. Instruksi dapat ditemukan di sini: https://github.com/IanHarvey/bluepyUntuk Python 2.7, semudah memasukkan perintah berikut:

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

Langkah 5: Pindai dan Temukan Alamat SensorBug

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

EC:FE:7E:10:B1:92 (tidak diketahui)Jika Anda memiliki banyak perangkat bluetooth LE, mungkin sulit untuk mengetahui perangkat mana yang Anda ajak bicara. Anda dapat mencoba bluetoothctl yang memberikan detail lebih lanjut:

$ sudo bluetoothctl[bluetooth]# scan pada [BARU] Perangkat EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenKunci Data: 0x0085 [CHG] Perangkat EC: FE:7E:10:B1:92 ProdusenNilai Data: 0x02 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x00 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x3c [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x25 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x09 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x41 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x02 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x02 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x43 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x0b [CHG] Perangkat EC:FE:7E:10:B1:92 ManufacturerData Nilai: 0x01 [CHG] Perangkat EC:FE:7E:10:B1:92 ProdusenNilai Data: 0x6f

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

Langkah 6: Tambahkan Skrip Python

Salinan skrip Python tersedia dari:

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

Ini file yang sama, jaga indentasi saat menyalin:

Juga, perbarui alamat MAC dalam file python agar sesuai dengan alamat sensor yang diperoleh dari hasil pemindaian.

# Program ini adalah perangkat lunak gratis: Anda dapat mendistribusikannya kembali dan/atau memodifikasi

# di bawah ketentuan Lisensi Publik Umum GNU sebagaimana diterbitkan oleh

# Yayasan Perangkat Lunak Bebas, baik versi 3 dari Lisensi, atau

# (sesuai pilihan Anda) versi yang lebih baru.

#

# Program ini disebarluaskan semoga bermanfaat, # tapi TANPA JAMINAN APAPUN; bahkan tanpa jaminan tersirat dari

# DAGANG atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat

# Lisensi Publik Umum GNU untuk lebih jelasnya.

#

# Anda seharusnya telah menerima salinan GNU General Public License

# bersama dengan program ini. Jika tidak, lihat.

# bscan.py - Pemindai LE bluetooth sederhana dan pengekstrak data

dari bluepy.btle import Scanner, DefaultDelegate

waktu impor

impor pymysql

struktur impor

nama host = 'host lokal'

nama pengguna = 'datasrc'

kata sandi = 'datasrc000'

database = 'Sensor Bug'

#Masukkan alamat MAC sensor dari lescan

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

SENSOR_LOCATION = ["Garasi", "Eksterior"]

kelas DecodeErrorException(Pengecualian):

def _init_(diri, nilai):

diri.nilai = nilai

def _str_(sendiri):

kembali repr(nilai diri sendiri)

kelas ScanDelegate (DefaultDelegate):

def _init_(sendiri):

DefaultDelegate._init_(mandiri)

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

jika adalahNewDev:

print "Perangkat yang ditemukan", dev.addr

elif adalahDataBaru:

print "Menerima data baru dari", dev.addr

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

Tabel #blesensor adalah tanggal, waktu, addr, lokasi, suhu, accero

skr = penghubung.kursor()

dostr = 'INSERT INTO data VALUES (CURRENT_DATE(), NOW(), %s, %s, %s, %s);'

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

samb.komit()

pemindai = Pemindai().denganDelegasi(ScanDelegate())

myConnection = pymysql.connect (host=hostname, user=username, passwd=password, db=database)

ManuDataHex =

ReadLoop = Benar

mencoba:

sementara (ReadLoop):

perangkat = scanner.scan(2.0)

ManuData = ""

untuk dev di perangkat:

entri = 0

AcceroData = 0

Tipe Akero = 0

TempData = 0

untuk saddr di SENSOR_ADDRESS:

entri += 1

jika (dev.addr == saddr):

print "Perangkat %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION[entri-1]

for (adtype, desc, value) di dev.getScanData():

print " %s = %s" % (desc, nilai)

if (desc == "Produsen"):

ManuData = nilai

jika (ManuData == ""):

print "Tidak ada data yang diterima, akhiri decoding"

melanjutkan

#cetak ManuData

untuk saya, j di zip (ManuData[::2], ManuData[1::2]):

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

#Mulai decoding data Pabrikan mentah

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

print "Byte header 0x0085 ditemukan"

lain:

print "Header byte 0x0085 tidak ditemukan, decoding berhenti"

melanjutkan

#Lewati Mayor/Minor

#Indeks 5 adalah 0x3c, menunjukkan level baterai dan konfigurasi #

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

Tingkat Baterai = ManuDataHex[5]

ConfigCounter = ManuDataHex[6]

idx = 7

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

while (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

print "Alamat Perangkat: " + CurrentDevAddr

print "Lokasi Perangkat: " + CurrentDevLoc

print "Level Baterai: " + str(Level Baterai) + "%"

print "Penghitung Konfigurasi: " + str(Penghitung Konfigurasi)

print "Data Accelero: " + hex(AcceleroType) + " " + hex(AcceleroData)

print "Data Suhu: " + str(Data Suhu)

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

ReadLoop = Salah

kecuali DecodeErrorException:

lulus

Langkah 7: Uji Skrip Python

Script harus dijalankan di root, jadi:

$ sudo python bscan.pyPerangkat yang ditemukan ec:6e:7e:10:b1:92 Perangkat ec:6e:7e:10:b1:92 (publik), RSSI=-80 dB Bendera = 06 Layanan 16b Tidak Lengkap = 0a18 Produsen = 850002003c25094102024309016f Header byte 0x0085 ditemukan Alamat Perangkat: ec:6e:7e:10:b1:92 Lokasi Perangkat: Garasi Tingkat Baterai: 37% Penghitung Konfigurasi: 9 Data Accero: 0x2 0x2 Data Suhu: 16.5625

Langkah 8: Tambahkan Script Python ke Crontab

Skrip python harus dijalankan di root, jadi jika Anda ingin mengambil data secara otomatis, itu perlu ditambahkan ke crontab root. Untuk contoh ini, saya menjalankan skrip setiap 20 menit Gunakan perintah:

$ sudo crontab -e

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

# # Setiap tugas yang akan dijalankan harus didefinisikan melalui satu baris # menunjukkan dengan bidang yang berbeda kapan tugas akan dijalankan # dan perintah apa yang harus dijalankan untuk tugas tersebut # # Untuk menentukan waktu Anda dapat memberikan nilai konkret untuk # menit (m), jam (h), hari dalam bulan (dom), bulan (sen), # dan hari dalam seminggu (dow) atau gunakan '*' di kolom ini (untuk 'apa saja').# # Perhatikan bahwa tugas akan dimulai berdasarkan sistem cron # gagasan daemon tentang waktu dan zona waktu. # # Output dari tugas crontab (termasuk kesalahan) dikirim melalui # email ke pengguna yang memiliki file crontab (kecuali dialihkan). # # Misalnya, Anda dapat menjalankan pencadangan semua akun pengguna Anda # pada jam 5 pagi setiap minggu dengan: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Untuk informasi lebih lanjut, lihat halaman manual crontab(5) dan cron(8) # # mh dom mon dow perintah 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Itu dia. Skrip python akan dijalankan secara berkala dan mengkode ulang output ke dalam database SQL

Langkah 9: Ekstra: Konfigurasikan SensorBug untuk Output Penginderaan Posisi

Ekstra: Konfigurasikan SensorBug untuk Output Penginderaan Posisi
Ekstra: Konfigurasikan SensorBug untuk Output Penginderaan Posisi
Ekstra: Konfigurasikan SensorBug untuk Output Penginderaan Posisi
Ekstra: Konfigurasikan SensorBug untuk Output Penginderaan Posisi

Dimungkinkan untuk mengonfigurasi SensorBug di Android untuk keluaran penginderaan posisiUntuk penginderaan perubahan posisi, disebut Garage door.sensing, SensorBug akan mendeteksi apakah perangkat berdiri tegak atau berbaring datar. Saat perangkat datar, nilai yang tercatat adalah 0x20 sedangkan jika perangkat berdiri tegak, nilainya 0x02Tidak membedakan apakah posisi X atau Y naik, selama sumbu Z tidak naik atau turun. Cara termudah untuk melakukannya adalah dengan menggunakan Aplikasi LightBlue. SensorBug akan muncul di menu pemindaian. Pilih perangkat yang ingin Anda konfigurasi, buka karakteristik GATT untuk konfigurasi Akselerometer UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11

Lihat gambar: Tulis string konfigurasi baru:

010d3f02020000002d000000002Baca kembali string konfigurasi untuk mengonfirmasi penulisan. Ini mengaktifkan akselerometer untuk penginderaan posisi.

Direkomendasikan: