İçindekiler:

Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleme ve Kaydetme: 9 Adım (Resimlerle)
Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleme ve Kaydetme: 9 Adım (Resimlerle)

Video: Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleme ve Kaydetme: 9 Adım (Resimlerle)

Video: Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleme ve Kaydetme: 9 Adım (Resimlerle)
Video: Savaş Cebeci ile Kaan Kazgan yakında yine kapışabilir | 2024, Temmuz
Anonim
Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleyin ve Kaydedin
Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleyin ve Kaydedin
Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleyin ve Kaydedin
Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleyin ve Kaydedin

Bu talimat, Blue Radios (BLEHome) ve RaspberryPi 3B'den Bluetooth LE sensör hatası ile çok düğümlü bir sıcaklık izleme sisteminin nasıl bir araya getirileceği hakkındadır. Bluetooth LE standardının geliştirilmesi sayesinde, artık piyasada kolayca bulunabilen düşük güçlü kablosuz sensörler var çok düşük maliyetle ve tek bir madeni para hücresinde aylarca çalışabilir. Aldığım bu sensörlerden biri, Sensor Bugs adlı Blue Radio'dan. Amazon'da yaklaşık 25 $'a mal olan bu, Sıcaklık sensörü, ışık sensörü ve ivmeölçer içeren, tümü kablosuz olarak iletişim kurabilen küçük bir üniteye yerleştirilmiş bir Bluetooth LE cihazıdır. Bu, Bluetooth LE radyo desteğine sahip Raspberry Pi 3B için mükemmel bir eşleşmedir..

Adım 1: Raspberry Pi'yi Kurun

İlk adım, çalışan bir Raspberry Pi kurulumu elde etmektir. Raspberry Pi'nin web sitesindeki talimatları izleyin, Raspbian'ı bir SD karta yükleyin, Raspberry Pi'ye takın ve başlatın. Sistemimi Raspbian Stretch Lite (GUI Yok) Kasım 2017 sürümüyle kurdum. Gerekirse WiFi kurun, saat dilimini UTC yerine geçerli saat dilimine çevirin. Bunu şu komutla yapabilirsiniz: $ sudo dpkg-reconfigure tzdata Talimatın geri kalanı, kurulumun komut satırı arabirimi aracılığıyla yapıldığını varsayar.

2. Adım: Raspberry Pi'de MySQL Kurulumu

Yakalanan tüm verileri depolamak için yerel olarak kurulmuş bir veritabanına sahip olmak yararlıdır. MySQL'i Raspberry Pi'ye kurmak çok kolaydır. Ayrıca scripti harici olarak bir SQL server'a bağlanacak şekilde değiştirmek de zor değil, ağ üzerinde bir SQL server kullanmak istiyorsanız bu adımı atlayabilirsiniz. Nette bir çok talimat var, şunu öneririm:https:// www.stewright.me/2014/06/tutorial-install-…

SQL sunucusu kurulduktan sonra, kullanıcı, veritabanı ve tablo oluşturmak için MySQL CLI istemcisini kullanabilirsiniz. MySQL CLI'ye girmek için şu komutu kullanın:

$ sudo mysql -uroot-pFirst, yakalanan verileri eklemek için yerel bir kullanıcı oluşturun: > 'datasrc000' TARAFINDAN TANIMLANAN KULLANICI 'datasrc'@'localhost' OLUŞTURUN;Ardından, bir veritabanı ve tablo oluşturun: > CREATE DATABASE SensorBug;Kullanıcıyı ayarlama izin: > SensorBug ÜZERİNDEKİ TÜM AYRICALIKLARI VERİN.* 'datasrc'@'localhost' İÇİN;Şimdi veritabanına yeni bir tablo ekleyin. Bu örnek için şu sütunları içeren bir tablo ekleyeceğim: TARİH, SAAT, ADRES, KONUM, SICAKLIK ve AKSEROMETRE

  • TARİH/SAAT - Bu, verilerin kaydedildiği tarih ve saattir
  • ADRES - Bu, mesajın alındığı SensorBug'un MAC'idir.
  • KONUM - Sensörün nerede olduğunu gösteren insan tarafından okunabilen bir dize
  • SICAKLIK - Bu, kaydedilen sıcaklıktır
  • ACCELE - Bu, ivmeölçer çıkışının değeridir, sensör konumunu kaydetmek için kullanışlıdır (etkinleştirilmişse)

Bunu yapan komut: > USE SensorBug; > CREATE TABLE data (tarih DATE, saat TIME, TINYTEXT adresi, TINYTEXT lokasyonu, sıcaklık FLOAT, accele INT);Artık veri tabanı hazır, sensorBugs kurulumuna geçebiliriz.

Adım 3: SensorBugs'ı Ayarlama

Sensör hataları oldukça temiz küçük cihazlardır. Ne yazık ki, üretici sadece programlamak için IOS uygulamasını sağladı. Yine de, yalnızca bir Android cihazınız varsa, onunla çalışmak hala mümkündür. İlk adım, cihazı bir telefonla eşleştirin. Cihazı eşleştirmeden, SensorBug veri reklamı yapmaz. Bunu doğrudan RaspberryPi ile yapıp yapamayacağımı görmeye çalıştım, ne yazık ki RaspberryPi'deki Bluetooth LE sürücüsü hala deneysel ve Bluetooth LE cihazlarıyla eşleşmesini önlemek için hatalar içeriyor gibi görünüyor. blueZ sürücüsünün gelecekteki sürümü bunu düzeltebilir, ancak şu anki yazı olarak, SensorBug'u RaspberryPi ile eşleştirmenin bir yolu yok. Neyse ki, reklamı yapılan verilerini yakalamak için cihazı eşleştirmemize gerek yok. İhtiyacımız olan tek şey SensorBug'ı yapılandırmak için bir telefon. Varsayılan olarak, SensorBug, bir cihazla eşleştirildikten sonra 1s aralıklarla sıcaklık verilerinin reklamını yapmaya başlayacaktır. Sıcaklık verilerini yakalamak için gereken tek şey bu. Konum veya ışık sensörünü kullanmak için genişletmeyi planlıyorsanız, konfigürasyondan daha fazla cihaza ihtiyaç duyulacaktır. Başlangıç için cihazı eşleştireceğiz ve bağlantısını keseceğiz. Bu, sıcaklık yakalama amacı için yeterince iyi olacaktır. SensorBug üzerindeki her iki düğmeye basarak başlayın. Açık olduğunu gösteren mavi/yeşil LED yanıp sönecektir. Düğmelerden birine basın, yeşil LED yanmalıdır, gücün açık olduğunu gösterir. Yeşil LED yanmıyorsa, cihazı tekrar açmayı denemek için her iki düğmeye de basın. Mavi LED yanıp sönmeye başlayana kadar düğmelerden birini basılı tutun. Bu, cihazı eşleştirme moduna geçirecektir. Telefondaki Bluetooth yapılandırma menüsüne gidin ve SensorBug cihazını arayın. Göründüğünde, cihazla eşleştirmek için seçin. İşte bu kadar, şimdi SensorBug'a güç sağlanıyor ve sıcaklık verilerinin reklamını yapıyor

Adım 4: Bluetooth LE Python Wrapper'ı Yükleme

Ardından, Bluetooth LE yığını ile konuşmak için python kütüphanesini kurmamız gerekiyor. Talimat burada bulunabilir:https://github.com/IanHarvey/bluepyPython 2.7 için, aşağıdaki komutları girmek kadar basittir:

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

Adım 5: SensorBug'ın Adresini Tara ve Bulun

SensorBug MAC adresini bulmak için şu komutu kullanın: $ sudo hcitool lescan Çıktıyı şöyle görmelisiniz:

EC:FE:7E:10:B1:92 (bilinmiyor)Etrafınızda çok sayıda bluetooth LE cihazınız varsa, hangisiyle konuştuğunuzu bulmak zor olabilir. Daha fazla ayrıntı veren bluetoothctl'yi deneyebilirsiniz:

$ sudo bluetoothctl[bluetooth]# [YENİ] Cihaz EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Cihaz EC:FE:7E:10:B1:92 ManufacturerData Anahtarında tarama: 0x0085 [CHG] Cihaz EC: FE:7E:10:B1:92 ManufacturerData Değeri: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x00 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x3c [CHG] Cihaz EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x25 [CHG] Cihaz EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x09 [CHG] Cihaz EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x41 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x43 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değeri: 0x0b [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Değer: 0x01 [CHG] Cihaz EC:FE:7E:10:B1:92 ManufacturerData Değer: 0x6f

MAC adresini kaydedin, istenmeyen Bluetooth LE cihazlarını filtrelemek için bunun python komut dosyasına girilmesi gerekir.

6. Adım: Python Komut Dosyasını Ekleyin

Python betiğinin bir kopyası şuradan edinilebilir:

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

İşte aynı dosya, kopyalarken girintiye dikkat edin:

Ayrıca, python dosyasındaki MAC adresini, tarama sonucundan elde edilen sensör adresiyle eşleşecek şekilde güncelleyin.

# Bu program ücretsiz bir yazılımdır: yeniden dağıtabilir ve/veya değiştirebilirsiniz

# tarafından yayınlanan GNU Genel Kamu Lisansı koşulları altında

# Özgür Yazılım Vakfı, Lisansın 3. sürümü veya

# (isteğe bağlı olarak) herhangi bir sonraki sürüm.

#

# Bu program faydalı olması ümidiyle dağıtılmıştır, # ancak HİÇBİR GARANTİ YOKTUR; zımni garanti bile olmadan

# SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK. Bkz.

# Daha fazla ayrıntı için GNU Genel Kamu Lisansı.

#

# GNU Genel Kamu Lisansının bir kopyasını almış olmalısınız

# bu programla birlikte. Değilse, bkz.

# bscan.py - Basit bluetooth LE tarayıcı ve veri çıkarıcı

bluepy.btle import Scanner'dan, DefaultDelegate

ithalat zamanı

pymysql'i içe aktar

ithalat yapısı

ana bilgisayar adı = 'yerel ana bilgisayar'

kullanıcı adı = 'datasrc'

şifre = 'datasrc000'

veritabanı = 'SensorBug'

#Lescan'dan sensörün MAC adresini girin

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

SENSOR_LOCATION = ["Garaj", "Dış Mekan"]

sınıf DecodeErrorException(İstisna):

def _init_(kendi, değer):

öz.değer = değer

tanım _str_(kendi):

dönüş repr(self.value)

sınıf ScanDelegate(DefaultDelegate):

tanım _init_(kendi):

DefaultDelegate._init_(self)

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

isNewDev ise:

"Keşfedilen cihaz" yazdır, dev.addr

elif isNewData:

"Şuradan yeni veri alındı" yazdır, dev.addr

def doQueryInsert (bağlantı, addr, loc, temp, accero):

#blesensor tablosu tarih, saat, adres, konum, sıcaklık, accero'dur

cur = conn.imleç()

dostr = 'VERİ DEĞERLERİNE GİRİN (CURRENT_DATE(), NOW(), %s, %s, %s, %s);'

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

conn.commit()

tarayıcı = Tarayıcı().withDelegate(ScanDelegate())

myConnection = pymysql.connect (ana bilgisayar=ana bilgisayar adı, kullanıcı=kullanıcı adı, parola=parola, db=veritabanı)

ManuDataHex =

ReadLoop = Doğru

denemek:

iken (Okuma Döngüsü):

cihazlar = tarayıcı.scan(2.0)

ManuData = ""

cihazlarda dev için:

giriş = 0

AcceroData = 0

Hızlanma Türü = 0

TempData = 0

SENSOR_ADDRESS içindeki saddr için:

giriş += 1

if (dev.addr == saddr):

"Aygıt %s (%s), RSSI=%d dB" % yazdır (dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = saddr

CurrentDevLoc = SENSOR_LOCATION[giriş-1]

dev.getScanData() içindeki (adtype, desc, value) için:

yazdır " %s = %s" % (azalan, değer)

if (desc == "Üretici"):

ManuData = değer

if (ManuData == ""):

"Veri alınmadı, kod çözmeyi sonlandır" yazdır

devam et

#print ManuData

i, j için zip dosyasında (ManuData[::2], ManuData[1::2]):

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

#Ham Üretici verilerinin kodunu çözmeye başla

if ((ManuDataHex[0] == 0x85) ve (ManuDataHex[1] == 0x00)):

print "Başlık baytı 0x0085 bulundu"

Başka:

print "Başlık baytı 0x0085 bulunamadı, kod çözme durduruldu"

devam et

#Majör/Minör Atla

#Index 5, 0x3c'dir, pil seviyesini ve yapılandırmayı gösterir #

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

BatteryLevel = ManuDataHex[5]

ConfigCounter = ManuDataHex[6]

idx = 7

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

while (idx < len(ManuDataHex)):

#print "Idx: " + str(idx)

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

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

#İvmeölçer verileri

idx += 1

AcceleroType = ManuDataHex[idx]

AcceleroData = ManuDataHex[idx+1]

idx += 2

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

#Sıcaklık verileri

idx += 1

TempData = ManuDataHex[idx]

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

TempData = TempData * 0.0625

idx += 2

Başka:

idx += 1

"Aygıt Adresi: " + CurrentDevAddr yazdır

"Aygıt Konumu: " + CurrentDevLoc yazdır

"Pil Seviyesi: " + str(BatteryLevel) + "%" yazdır

"Konfigürasyon Sayacı: " + str(ConfigCounter) yazdır

"Accelero Data: " + hex(AcceleroType) + " " + hex(AcceleroData) yazdır

"Temp Data: " + str(TempData) yazdır

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

ReadLoop = Yanlış

DecodeErrorException hariç:

geçmek

7. Adım: Python Komut Dosyasını Test Edin

Komut dosyası kökte çalıştırılmalıdır, bu nedenle:

$ sudo python bscan.pyKeşfedilen cihaz ec:6e:7e:10:b1:92 Cihaz ec:6e:7e:10:b1:92 (genel), RSSI=-80 dB Bayraklar = 06 Eksik 16b Hizmetler = 0a18 Üretici = 850002003c25094102024309016f Başlık baytı 0x0085 bulundu Aygıt Adresi: ec:6e:7e:10:b1:92 Aygıt Konumu: Garaj Pil Düzeyi: %37 Yapılandırma Sayacı: 9 Accero Verisi: 0x2 0x2 Sıcaklık Verisi: 16.5625

Adım 8: Python Komut Dosyasını Crontab'a Ekleyin

Python betiği kökte çalıştırılmalıdır, bu nedenle verileri otomatik olarak yakalamak istiyorsanız, kökün crontab'ına eklenmesi gerekir. Bu örnek için, betiği her 20 dakikada bir çalıştırıyorum Komutu kullanın:

$ sudo crontab -e

# Cron tarafından çalıştırılacak görevleri tanıtmak için bu dosyayı düzenleyin.

# # Çalıştırılacak her görev tek bir satır üzerinden tanımlanmalıdır # farklı alanlar ile görevin ne zaman çalıştırılacağını ve görev için hangi komutun çalıştırılacağını gösterir # # Süreyi belirlemek için # dakika (m) için somut değerler sağlayabilirsiniz.), saat (h), ayın günü (dom), ay (mon), # ve haftanın günü (dow) veya bu alanlarda '*' kullanın ('herhangi' için).# # Görevlerin başlatılacağına dikkat edin cron'un sistemi # arka plan programının zaman ve saat dilimleri kavramına dayalıdır. # # crontab işlerinin çıktısı (hatalar dahil), crontab dosyasının ait olduğu kullanıcıya (yeniden yönlendirilmediği sürece) # e-posta yoluyla gönderilir. # # Örneğin, tüm kullanıcı hesaplarınızın yedeğini her hafta sabah 5'te # ile çalıştırabilirsiniz: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Daha fazla bilgi için bkz. crontab(5) ve cron(8) manuel sayfaları # # mh dom mon dow komutu 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py

Bu kadar. Python betiği düzenli aralıklarla çalıştırılacak ve çıktıyı SQL veritabanına yeniden kodlayacaktır.

Adım 9: Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın

Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın
Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın
Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın
Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın

Android'de SensorBug'u konum algılama çıkışı için yapılandırmak mümkündür. Garaj kapısı algılama olarak adlandırılan konum değişikliği algılama için, SensorBug cihazın dik mi durduğunu yoksa düz yatıp uzanmadığını mı algılar. Cihaz düz olduğunda, kaydedilen değer 0x20'dir. cihaz dik dururken değer 0x02'dir Z ekseni yukarı veya aşağı olmadığı sürece X veya Y konumunun yukarı olması fark etmez. Bunu yapmanın en kolay yolu LightBlue Uygulamasını kullanmaktır. SensorBug tarama menüsünde görünmelidir. Yapılandırmak istediğiniz cihazı seçin, İvmeölçer yapılandırması için GATT özelliklerine gidin UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11

Resme bakın: Yeni bir yapılandırma dizesi yazın:

010d3f02020000002d00000002Yazmayı onaylamak için yapılandırma dizisini tekrar okuyun. Bu, ivmeölçerin konum algılaması için etkinleştirilmesini sağlar.

Önerilen: