Spisu treści:
- Krok 1: Skonfiguruj Raspberry Pi
- Krok 2: Konfiguracja MySQL na Raspberry Pi
- Krok 3: Konfiguracja SensorBugs
- Krok 4: Instalowanie opakowania Bluetooth LE Python
- Krok 5: Skanuj i znajdź adres SensorBug
- Krok 6: Dodaj skrypt Pythona
- Krok 7: Przetestuj skrypt Pythona
- Krok 8: Dodaj skrypt Pythona do Crontab
- Krok 9: Dodatkowo: Skonfiguruj SensorBug dla sygnału wyjściowego wykrywania pozycji
Wideo: Monitoruj i rejestruj temperaturę za pomocą Bluetooth LE i RaspberryPi: 9 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Ta instrukcja dotyczy zestawienia wielowęzłowego systemu monitorowania temperatury z błędem czujnika Bluetooth LE od Blue Radios (BLEHome) i RaspberryPi 3BDzięki opracowaniu standardu Bluetooth LE, na rynku są teraz łatwo dostępne czujniki bezprzewodowe o niskim poborze mocy za bardzo niski koszt i może działać na jednej baterii monetowej przez wiele miesięcy. Jeden z tych czujników, które wybrałem, pochodzi z Blue Radio o nazwie Sensor Bugs. Kosztujące około 25 USD na Amazon, jest to urządzenie Bluetooth LE z czujnikiem temperatury, czujnikiem światła i akcelerometrem, które jest wbudowane w małe urządzenie, które może komunikować się bezprzewodowo. Jest to idealne dopasowanie do Raspberry Pi 3B, które ma wbudowaną obsługę radia Bluetooth LE.
Krok 1: Skonfiguruj Raspberry Pi
Pierwszym krokiem jest uzyskanie działającej konfiguracji Raspberry Pi. Postępuj zgodnie z instrukcjami ze strony Raspberry Pi, załaduj Raspbian na kartę SD, włóż do Raspberry Pi i uruchom go. Konfiguruję swój system z Raspbian Stretch Lite (bez GUI) w wersji listopad 2017. W razie potrzeby skonfiguruj WiFi, wolę dostosować strefę czasową do bieżącej strefy czasowej zamiast UTC. Możesz to zrobić za pomocą polecenia: $ sudo dpkg-reconfigure tzdata Pozostała część instrukcji zakłada, że konfiguracja jest wykonywana przez interfejs wiersza poleceń.
Krok 2: Konfiguracja MySQL na Raspberry Pi
Warto mieć lokalnie zainstalowaną bazę danych do przechowywania wszystkich przechwyconych danych. Instalacja MySQL na Raspberry Pi jest bardzo łatwa. Nie jest również trudno zmodyfikować skrypt, aby połączyć się z serwerem SQL zewnętrznie, możesz pominąć ten krok, jeśli chcesz korzystać z serwera SQL w sieci. W sieci jest wiele instrukcji, sugeruję: https:// www.stewright.me/2014/06/tutorial-install-…
Po zainstalowaniu serwera SQL możesz użyć klienta MySQL CLI do utworzenia użytkownika, bazy danych i tabeli. Aby wprowadzić MySQL CLI, użyj polecenia:
$ sudo mysql -uroot-pFirst, utwórz lokalnego użytkownika do wstawiania przechwyconych danych: > CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000';Następnie stwórz bazę danych i tabelę: > CREATE DATABASE SensorBug;Konfiguracja użytkownika uprawnienie: > PRZYZNAJ WSZYSTKIE UPRAWNIENIA DLA SensorBug.* TO 'datasrc'@'localhost';Teraz dodaj nową tabelę do bazy danych. W tym przykładzie dodam tabelę z następującymi kolumnami: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE i ACCEROMETER
- DATA/CZAS - Jest to data i godzina zapisu danych
- ADRES - jest to adres MAC czujnika SensorBug, z którego wiadomość została przechwycona
- LOKALIZACJA - ciąg znaków czytelny dla człowieka wskazujący lokalizację czujnika
- TEMPERATURA - To jest zarejestrowana temperatura
- ACCELE - Jest to wartość wyjścia akcelerometru, przydatna do rejestrowania pozycji czujnika (jeśli jest włączony)
Polecenie, które to robi to: > USE SensorBug; > CREATE TABLE dane (data DATE, godzina TIME, adres TINYTEXT, lokalizacja TINYTEXT, temperatura FLOAT, accele INT); Teraz baza danych jest gotowa, możemy przejść do konfiguracji sensorBugs.
Krok 3: Konfiguracja SensorBugs
Błędy czujników to całkiem zgrabne małe urządzenia. Niestety producent udostępnił jedynie aplikację na IOS do jej programowania. Niemniej jednak nadal można z nim pracować, jeśli masz tylko urządzenie z systemem Android. Najpierw sparuj urządzenie z telefonem. Bez sparowania urządzenia SensorBug nie będzie reklamował danych. Próbowałem sprawdzić, czy mogę to zrobić bezpośrednio z RaspberryPi, niestety wygląda na to, że sterownik Bluetooth LE na RaspberryPi jest nadal eksperymentalny i zawiera błędy, które uniemożliwiają jego parowanie z urządzeniami Bluetooth LE. Przyszła wersja sterownika blueZ może to naprawić, ale w obecnej wersji nie ma możliwości sparowania SensorBug z RaspberryPi. Na szczęście nie musimy parować urządzenia, aby przechwytywać jego reklamowane dane. Jedyne czego potrzebujemy to telefon do konfiguracji SensorBug. Domyślnie SensorBug zacznie ogłaszać dane o temperaturze w odstępach 1s po sparowaniu z urządzeniem. Do przechwytywania danych o temperaturze to wszystko, co jest potrzebne. Jeśli planujesz rozbudować o wykorzystanie czujnika położenia lub światła, wówczas konfiguracja urządzenia będzie potrzebna. Na początek sparujemy urządzenie i rozłączymy. To wystarczy do pomiaru temperatury. Zacznij od wciśnięcia obu przycisków SensorBug. Niebiesko-zielona dioda LED zacznie migać, co oznacza, że urządzenie jest włączone. Naciśnij jeden z przycisków, zielona dioda LED powinna się zaświecić, wskazując, że zasilanie jest włączone. Jeśli zielona dioda LED nie świeci, naciśnij oba przyciski, aby spróbować ponownie włączyć urządzenie. Naciśnij i przytrzymaj jeden z przycisków, aż niebieska dioda LED zacznie migać. Spowoduje to przejście urządzenia w tryb parowania. Przejdź do menu konfiguracji Bluetooth w telefonie i poszukaj urządzenia SensorBug. Gdy się pojawi, wybierz go, aby sparować z urządzeniem. To wszystko, teraz SensorBug jest zasilany i wyświetla dane o temperaturze
Krok 4: Instalowanie opakowania Bluetooth LE Python
Następnie musimy zainstalować bibliotekę, aby python mógł komunikować się ze stosem Bluetooth LE. Instrukcję można znaleźć tutaj: https://github.com/IanHarvey/bluepyW przypadku Pythona 2.7 wystarczy wpisać następujące polecenia:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Krok 5: Skanuj i znajdź adres SensorBug
Aby znaleźć adres MAC SensorBug, użyj tego polecenia: $ sudo hcitool lescan Powinieneś zobaczyć dane wyjściowe takie jak:
EC:FE:7E:10:B1:92 (nieznane)Jeśli masz w pobliżu wiele urządzeń Bluetooth LE, może być trudno określić, z którym z nich rozmawiasz. Możesz spróbować bluetoothctl, które podają więcej szczegółów:
$ sudo bluetoothctl[bluetooth]# skanuj na [NOWOŚĆ] Urządzenie EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE:7E:10:B1:92 ManufacturerData Wartość: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x00 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x3c [CHG] EC urządzenia:FE:7E:10:B1:92 ManufacturerData Wartość: 0x25 [CHG] EC urządzenia:FE:7E:10:B1:92 ManufacturerData Wartość: 0x09 [CHG] EC urządzenia:FE:7E:10:B1:92 ManufacturerData Wartość: 0x41 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x02 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x02 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x43 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x0b [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x01 [CHG] Urządzenie EC:FE:7E:10:B1:92 ManufacturerData Wartość: 0x6f
Zapisz adres MAC, który będzie musiał zostać wprowadzony do skryptu Pythona, aby odfiltrować niechciane urządzenia Bluetooth LE
Krok 6: Dodaj skrypt Pythona
Kopia skryptu Pythona jest dostępna pod adresem:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Oto ten sam plik, zadbaj o wcięcie podczas kopiowania:
Zaktualizuj również adres MAC w pliku Pythona, aby pasował do adresu czujnika uzyskanego z wyniku skanowania.
# Ten program jest darmowym oprogramowaniem: możesz go redystrybuować i/lub modyfikować
# na warunkach GNU General Public License opublikowanej przez
# Free Software Foundation, wersja 3 licencji lub
# (do wyboru) dowolna nowsza wersja.
#
# Ten program jest rozpowszechniany w nadziei, że będzie przydatny, # ale BEZ ŻADNEJ GWARANCJI; nawet bez dorozumianej gwarancji
# SPRZEDAWALNOŚĆ lub PRZYDATNOŚĆ DO OKREŚLONEGO CELU. Zobacz
# Powszechna Licencja Publiczna GNU, aby uzyskać więcej informacji.
#
# Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU
# wraz z tym programem. Jeśli nie, zobacz.
# bscan.py - Prosty skaner Bluetooth LE i ekstraktor danych
z bluepy.btle import Scanner, DefaultDelegate
czas importu
importuj pymysql
importuj strukturę
nazwa hosta = 'host lokalny'
nazwa użytkownika = 'źródło danych'
hasło = 'datasrc000'
baza danych = 'SensorBug'
#Wprowadź adres MAC czujnika z lescan
ADRES_CZUJNIKA = ["ec:fe:7e:10:b9:92", "ec:fe:7e:10:b9:93"]
SENSOR_LOCATION = ["Garaż", "Na zewnątrz"]
klasa DecodeErrorException(Wyjątek):
def _init_(self, wartość):
self.value = wartość
def _str_(samo):
return repr(self.value)
class ScanDelegate (DefaultDelegate):
def _init_(self):
DefaultDelegate._init_(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
jeśli jest NoweDev:
print "Wykryte urządzenie", dev.addr
elif is NewData:
print "Otrzymano nowe dane od", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
Tabela #blesensor to data, godzina, adres, lokalizacja, temp, accero
cur = conn.cursor()
dostr = 'WSTAW W WARTOŚCI danych (BIEŻĄCA_DATA(), TERAZ(), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
poł.zatwierdzenie()
skaner = Scanner().withDelegate(ScanDelegate())
myConnection = pymysql.connect (host=nazwa hosta, użytkownik=nazwa użytkownika, hasło=hasło, db=baza danych)
ManuDataHex =
Pętla odczytu = Prawda
próbować:
podczas (ReadLoop):
urządzenia = scan.scan(2.0)
Dane ręczne = ""
dla urządzeń deweloperskich:
wpis = 0
AcceroData = 0
AcceroType = 0
Dane temp. = 0
dla saddr w SENSOR_ADDRESS:
wpis += 1
if (dev.addr == saddr):
print "Urządzenie %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION[entry-1]
for (adtype, desc, value) w dev.getScanData():
drukuj " %s = %s" % (opis, wartość)
if (opis == "Producent"):
ManuData = wartość
jeśli (ManuData == ""):
print "Nie odebrano danych, zakończ dekodowanie"
kontyntynuj
#drukuj dane manu
dla i, j w zip (ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i+j, 16))
#Rozpocznij dekodowanie surowych danych producenta
if ((ManuDataHex[0] == 0x85) i (ManuDataHex[1] == 0x00)):
print "Znaleziono bajt nagłówka 0x0085"
w przeciwnym razie:
print "Nie znaleziono bajtu nagłówka 0x0085, zatrzymanie dekodowania"
kontyntynuj
#Pomiń główny/podrzędny
#Indeks 5 to 0x3c, wskazuje poziom naładowania baterii i konfigurację #
jeśli (ManuDataHex[4] == 0x3c):
Poziom Baterii = ManuDataHex[5]
ConfigCounter = ManuDataHex[6]
idx = 7
#print "TotalLen: " + str(len(ManuDataHex))
while (idx < len(ManuDataHex)):
#print "Idx: " + str(idx)
#print "Dane: " + hex(ManuDataHex[idx])
if (ManuDataHex[idx] == 0x41):
#Dane akcerometru
idx += 1
AcceleroType = ManuDataHex[idx]
AcceleroData = ManuDataHex[idx+1]
idx += 2
elif (ManuDataHex[idx] == 0x43):
#Dane temperatury
idx += 1
Dane Temp = ManuDataHex[idx]
TempData += ManuDataHex[idx+1] * 0x100
Dane Temp = Dane Temp * 0,0625
idx += 2
w przeciwnym razie:
idx += 1
print "Adres urządzenia: " + CurrentDevAddr
print "Lokalizacja urządzenia: " + CurrentDevLoc
print "Poziom baterii: " + str(BatteryLevel) + "%"
print "Licznik konfiguracji: " + str(Licznik konfiguracji)
print "Dane Accelero: " + hex(AcceleroType) + " " + hex(AcceleroData)
print "Dane Temp: " + str(TempData)
doQueryInsert(myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = Fałsz
z wyjątkiem DecodeErrorException:
przechodzić
Krok 7: Przetestuj skrypt Pythona
Skrypt musi być uruchomiony w root, więc:
$ sudo python bscan.pyWykryte urządzenie ec:6e:7e:10:b1:92 Urządzenie ec:6e:7e:10:b1:92 (publiczne), RSSI=-80 dB Flagi = 06 Niekompletne usługi 16b = 0a18 Producent = 850002003c25094102024309016f Znaleziono bajt nagłówka 0x0085 Adres urządzenia: ec:6e:7e:10:b1:92 Lokalizacja urządzenia: Garaż Poziom naładowania baterii: 37% Licznik konfiguracji: 9 Dane Accero: 0x2 0x2 Dane temp.: 16,5625
Krok 8: Dodaj skrypt Pythona do Crontab
Skrypt Pythona musi być uruchomiony w root, więc jeśli chcesz automatycznie przechwytywać dane, musisz je dodać do crontab roota. W tym przykładzie uruchamiam skrypt co 20 minut Użyj polecenia:
$ sudo crontab -e
# Edytuj ten plik, aby wprowadzić zadania do uruchomienia przez crona.
# # Każde zadanie do uruchomienia musi być zdefiniowane za pomocą jednej linii # wskazującej różnymi polami, kiedy zadanie zostanie uruchomione # i jakie polecenie ma zostać uruchomione dla zadania # # Aby zdefiniować czas możesz podać konkretne wartości dla # minuty (m), godzina (h), dzień miesiąca (dom), miesiąc (pon), # i dzień tygodnia (dow) lub użyj '*' w tych polach (dla 'any').# # Zauważ, że zadania zostaną uruchomione w oparciu o pojęcie czasu i stref czasowych systemu crona # demona. # # Dane wyjściowe zadań crontab (włącznie z błędami) są wysyłane przez # e-mail do użytkownika, do którego należy plik crontab (chyba że nastąpiło przekierowanie). # # Na przykład, możesz uruchomić kopię zapasową wszystkich kont użytkowników # o 5 rano każdego tygodnia za pomocą: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Więcej informacji znajdziesz w strony podręcznika crontab(5) i 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
Otóż to. Skrypt Pythona będzie uruchamiany w regularnych odstępach czasu i przekoduje dane wyjściowe do bazy danych SQL
Krok 9: Dodatkowo: Skonfiguruj SensorBug dla sygnału wyjściowego wykrywania pozycji
Możliwe jest skonfigurowanie SensorBug na Androidzie do wykrywania pozycji W celu wykrywania zmiany pozycji, tzw. Garage door.sensing, SensorBug wykryje, czy urządzenie stoi pionowo, czy leży płasko. Gdy urządzenie jest płaskie, zarejestrowana wartość wynosi 0x20 natomiast jeśli urządzenie stoi pionowo, wartość wynosi 0x02 Nie rozróżnia, czy pozycja X czy Y jest w górze, o ile oś Z nie jest w górę lub w dół. Najprostszym sposobem na to jest użycie aplikacji LightBlue. SensorBug powinien pojawić się w menu skanowania. Wybierz urządzenie, które chcesz skonfigurować, przejdź do charakterystyki GATT dla konfiguracji akcelerometru UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11
Zobacz obrazek: Napisz nowy ciąg konfiguracyjny:
010d3f020200000002d00000002Odczytaj ponownie ciąg konfiguracyjny, aby potwierdzić zapis. Umożliwia to akcelerometr do wykrywania położenia.
Zalecana:
Monitoruj temperaturę i wilgotność za pomocą AM2301 na NodeMCU i Blynk: 3 kroki
Monitoruj temperaturę i wilgotność za pomocą AM2301 na NodeMCU i Blynk: Jest bardzo dobrze znanym faktem, że w większości branż branżowych temperatura, wilgotność, ciśnienie, jakość powietrza, jakość wody itp. odgrywają ważne czynniki, które należy stale monitorować i konieczne systemy ostrzegania muszą być na miejscu, gdy war
Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: 6 kroków
Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: Ten projekt został opracowany w celu wsparcia uniwersyteckiego zespołu badań medycznych, który potrzebował urządzenia do noszenia, które może rejestrować 2 sygnały EKG przy 1000 próbek/s każda (łącznie 2 tys. próbek/s) nieprzerwanie przez 30 dni w celu wykrycia arytmii. Projekt pre
Monitor pogody M5Stack M5stick C oparty na ESP32 z DHT11 - Monitoruj wskaźnik temperatury, wilgotności i ciepła na M5stick-C za pomocą DHT11: 6 kroków
Monitor pogody M5Stack M5stick C oparty na ESP32 z DHT11 | Monitoruj wskaźnik temperatury, wilgotności i ciepła na M5stick-C Z DHT11: Cześć, w tej instrukcji dowiemy się, jak połączyć czujnik temperatury DHT11 z m5stick-C (płytka rozwojowa firmy m5stack) i wyświetlić go na wyświetlaczu m5stick-C. W tym samouczku odczytamy temperaturę, wilgotność i amp; ciepło ja
Monitoruj galony zbiornika oleju opałowego za pomocą wiadomości e-mail, SMS-ów i powiadomień pushbullet: 9 kroków (ze zdjęciami)
Monitoruj galony zbiornika oleju opałowego za pomocą wiadomości e-mail, SMS-ów i powiadomień pushbullet: INFORMACJE DOTYCZĄCE BEZPIECZEŃSTWA: Na wypadek, gdyby ktoś chciał wiedzieć, czy „jest to bezpieczne do zbudowania/zainstalowania” - Zaniosłem to do 2 różnych firm naftowych w celu uzyskania informacji zwrotnych/względów bezpieczeństwa i przeprowadziłem to przez zastępcę straży pożarnej C
Rejestruj dane i kreśl wykres online za pomocą NodeMCU, MySQL, PHP i Chartjs.org: 4 kroki
Rejestruj dane i kreśl wykres online za pomocą NodeMCU, MySQL, PHP i Chartjs.org: Ta instrukcja opisuje, w jaki sposób możemy używać płyty Node MCU do zbierania danych z wielu czujników, wysyłania tych danych do hostowanego pliku PHP, który następnie dodaje dane do baza danych MySQL. Dane można następnie przeglądać online w postaci wykresu, używając chart.js.A ba