İçindekiler:
- Adım 1: Raspberry Pi'yi Kurun
- 2. Adım: Raspberry Pi'de MySQL Kurulumu
- Adım 3: SensorBugs'ı Ayarlama
- Adım 4: Bluetooth LE Python Wrapper'ı Yükleme
- Adım 5: SensorBug'ın Adresini Tara ve Bulun
- 6. Adım: Python Komut Dosyasını Ekleyin
- 7. Adım: Python Komut Dosyasını Test Edin
- Adım 8: Python Komut Dosyasını Crontab'a Ekleyin
- Adım 9: Ekstra: Konum Algılama Çıkışı için SensorBug'ı yapılandırın
Video: Bluetooth LE ve RaspberryPi ile Sıcaklığı İzleme ve Kaydetme: 9 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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:
NodeMCU ve Blynk'te AM2301 ile Sıcaklığı ve Nemi İzleme: 3 Adım
NodeMCU & Blynk'te AM2301 ile Sıcaklık ve Nemi İzleme: Endüstrinin çoğunda dikey, sıcaklık, nem, basınç, hava kalitesi, su kalitesi vb. değer olduğunda uyarı sistemlerinin yerinde olması gerekir
BLYNK ESP8266 ve DHT11 ile İnternet Üzerinden Oda Sıcaklığı: 5 Adım (Resimlerle)
BLYNK ESP8266 & DHT11 İle İnternet Üzerinden Oda Sıcaklığı: Merhaba arkadaşlar bugün dünyanın her yerinden odamızı izlemek için kullanabileceğimiz bir oda sıcaklığı monitörü yapacağız ve bunun için BLYNK IoT plateformu kullanacağız ve kullanacağız. Oda sıcaklığını okumak için DHT11, erişmek için bir ESP8266 kullanacağız
Python Komut Dosyası ile Windows'ta Ekran Görüntülerini Otomatik Olarak Kaydetme: 4 Adım
Python Komut Dosyası ile Windows'ta Ekran Görüntülerini Otomatik Olarak Kaydetme: Genellikle pencerelerde, bir ekran görüntüsünü (baskı ekranı) kaydetmek için önce bir ekran görüntüsü almamız ve ardından paint'i açmamız, ardından yapıştırmamız ve son olarak kaydetmemiz gerekir. Şimdi size otomatik hale getirmek için bir python programı yapmayı öğreteceğim. Bu program bir klasör oluşturacak
RaspberryPi ve Cloud4Rpi ile Kendin Yap Ev İzleme: 5 Adım
RaspberryPi ve Cloud4Rpi ile Kendin Yap Evi İzleme: Bir kış hafta sonu kır evime gittim ve orasının çok soğuk olduğunu öğrendim. Elektrikle ilgili bir şey oldu ve RCD kesici onu kapattı ve ısıtma da gitti. Oraya geldiğim için şanslıydım, yoksa birkaç gün sonra
NFC (TfCD) ile Önceden Ayarlanmış Değerleri Kaydetme ve Geri Yükleme: 4 Adım
NFC (TfCD) ile Önceden Ayarlanmış Değerleri Kaydetme ve Geri Yükleme: Belirli bir değeri veya ayarı ayarlamanın nasıl çalıştığını test etmek ve daha sonra bu ayarı geri çağırmak istiyoruz. Bu deney için, değeri okumak ve üzerine kaydetmek için bir NFC etiketi kullandık. Daha sonra etiket tekrar taranabilir ve bir sertifikayı geri yüklemek için değeri geri gönderebilir