Obsah:
- Krok 1: Nastavení Raspberry Pi
- Krok 2: Nastavení MySQL na Raspberry Pi
- Krok 3: Nastavení SensorBugs
- Krok 4: Instalace Bluetooth LE Python Wrapper
- Krok 5: Naskenujte a zjistěte adresu SensorBug
- Krok 6: Přidejte skript Python
- Krok 7: Otestujte skript Pythonu
- Krok 8: Přidejte skript Pythonu do Crontabu
- Krok 9: Extra: Konfigurujte SensorBug pro výstup snímání polohy
Video: Monitorujte a zaznamenávejte teplotu pomocí Bluetooth LE a RaspberryPi: 9 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
Tento návod je o tom, jak sestavit víceuzlový systém monitorování teploty s chybou senzoru Bluetooth LE od Blue Radios (BLEHome) a RaspberryPi 3B Díky vývoji standardu Bluetooth LE jsou nyní na trhu snadno dostupné bezdrátové senzory s nízkým výkonem za velmi nízké náklady a může běžet na jedné knoflíkové buňce měsíce najednou. Jeden z těchto senzorů, které jsem zvedl, pochází z Blue Radio s názvem Sensor Bugs. Stojí to asi 25 dolarů na Amazonu, jedná se o zařízení Bluetooth LE s teplotním senzorem, světelným senzorem a akcerometrem, které jsou zabudovány do malé jednotky, která může bezdrátově komunikovat. To je perfektní zápas pro Raspberry Pi 3B, který má vestavěnou podporu pro rádio Bluetooth LE.
Krok 1: Nastavení Raspberry Pi
Prvním krokem je získat funkční nastavení Raspberry Pi. Postupujte podle pokynů na webových stránkách Raspberry Pi, nahrajte Raspbian na SD kartu, vložte do Raspberry Pi a spusťte jej. Nastavil jsem svůj systém s verzí Raspbian Stretch Lite (bez GUI), listopad 2017. V případě potřeby nastavte WiFi, raději upravím časové pásmo do aktuálního časového pásma místo UTC. Můžete to provést pomocí příkazu: $ sudo dpkg-reconfigure tzdataRest instrukce předpokládá, že se nastavení provádí pomocí rozhraní příkazového řádku.
Krok 2: Nastavení MySQL na Raspberry Pi
Je užitečné mít lokálně nainstalovanou databázi pro ukládání všech zachycených dat. Instalace MySQL na Raspberry Pi je velmi snadná. Rovněž není obtížné upravit skript pro externí připojení k serveru SQL, tento krok můžete přeskočit, pokud chcete v síti používat server SQL. Na internetu je mnoho pokynů, doporučuji toto: https:// www.stewright.me/2014/06/tutorial-install-…
Jakmile je SQL server nainstalován, můžete pomocí klienta MySQL CLI vytvořit uživatele, databázi a tabulku. Chcete -li zadat MySQL CLI, použijte příkaz:
$ sudo mysql -uroot -p Nejprve vytvořte lokálního uživatele pro vkládání zachycených dat:> VYTVOŘIT UŽIVATELE 'datasrc'@'localhost' IDENTIFIKOVANÉ podle 'datasrc000'; Dále vytvořte databázi a tabulku:> VYTVOŘIT DATABÁZI SensorBug; Nastavení uživatele oprávnění:> UDĚLIT VŠECHNY PRIVILEGY NA SensorBug.* TO 'datasrc'@'localhost'; Nyní přidejte do databáze novou tabulku. Pro tento příklad přidám tabulku s následujícími sloupci: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE a ACCEROMETER
- DATE/TIME - Toto je datum a čas záznamu dat
- ADDRESS - Toto je MAC SensorBug, ze kterého je zpráva zachycena
- LOKALITA - Řetězec čitelný pro člověka, který udává, kde se senzor nachází
- TEPLOTA - Toto je zaznamenaná teplota
- ACCELE - Toto je hodnota výstupu akcelerometru, užitečná pro záznam polohy senzoru (pokud je povolena)
Příkaz, který to provede, je:> USE SensorBug; > CREATE TABLE data (date DATE, time TIME, address TINYTEXT, location TINYTEXT, temperature FLOAT, accele INT); Nyní je databáze připravena, můžeme přejít k nastavení sensorBugs.
Krok 3: Nastavení SensorBugs
Chyby senzoru jsou docela úhledná malá zařízení. Výrobce bohužel poskytl pouze aplikaci IOS pro její programování. Přesto je možné s ním pracovat, i když máte pouze zařízení Android. Nejprve spárujte zařízení s telefonem. Bez spárování zařízení nebude SensorBug inzerovat data. Zkoušel jsem zjistit, zda to mohu udělat přímo s RaspberryPi, bohužel se zdá, že ovladač Bluetooth LE na RaspberryPi je stále experimentální a obsahuje chyby, které zabraňují jeho párování se zařízeními Bluetooth LE. Budoucí verze ovladače blueZ by to mohla napravit, ale podle současného psaní neexistuje způsob, jak spárovat SensorBug s RaspberryPi. Naštěstí nepotřebujeme spárovat zařízení, abychom zachytili jeho inzerovaná data. Jediná věc, kterou potřebujeme, je telefon pro konfiguraci SensorBug. Ve výchozím nastavení začne SensorBug inzerovat údaje o teplotě v intervalu 1 s po spárování se zařízením. Pro data o teplotě zachycení je to vše, co je potřeba. Pokud plánujete rozšířit použití snímače polohy nebo světla, bude potřeba zařízení než konfigurace. Pro začátek zařízení spárujeme a odpojíme. To bude stačit pro účely měření teploty. Začněte stisknutím obou tlačítek na SensorBug. Modrá/zelená LED bliká, což znamená, že je zapnuto. Stiskněte jedno z tlačítek, zelená LED by se měla rozsvítit, což znamená, že je zapnuto napájení. Pokud zelená LED nesvítí, zkuste zařízení znovu zapnout stisknutím obou tlačítek. Stiskněte a podržte jedno z tlačítek, dokud nezačne blikat modrá LED. Tím se zařízení přepne do režimu párování. Přejděte do konfigurační nabídky Bluetooth v telefonu a vyhledejte zařízení SensorBug. Jakmile se zobrazí, vyberte jej pro spárování se zařízením. To je vše, nyní je SensorBug napájen a inzeruje údaje o teplotě
Krok 4: Instalace Bluetooth LE Python Wrapper
Dále musíme nainstalovat knihovnu, aby python mohl komunikovat se zásobníkem Bluetooth LE. Pokyny najdete zde: https://github.com/IanHarvey/bluepyFor Python 2.7 je stejně jednoduchý jako zadávání následujících příkazů:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Krok 5: Naskenujte a zjistěte adresu SensorBug
Chcete -li zjistit MAC adresu SensorBug, použijte tento příkaz: $ sudo hcitool lescan Měli byste vidět výstup jako:
EC: FE: 7E: 10: B1: 92 (neznámé) Pokud máte kolem sebe mnoho bluetooth LE zařízení, může být těžké zjistit, se kterým mluvíte. Můžete zkusit bluetoothctl, který poskytne další podrobnosti:
$ sudo bluetoothctl [bluetooth]# skenování na [NOVÉ] Zařízení EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Klíč: 0x0085 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 ValueData Value: 0x02 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] Device EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x3c [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota údajů výrobce: 0x25 [CHG] Hodnota zařízení EC: FE: 7E: 10: B1: 92 Hodnota dat výrobce: 0x09 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota údajů výrobce: 0x41 [CHG] Hodnota EC zařízení: FE: 7E: 10: B1: 92 Hodnota data výrobce: 0x02 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota dat výrobce: 0x02 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Hodnota: 0x43 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 VýrobceData Hodnota: 0x0b [CHG] Zařízení EC: FE: 7E: 10: B1: 92 ManufacturerData Hodnota: 0x01 [CHG] Zařízení EC: FE: 7E: 10: B1: 92 Hodnota výrobce: 0x6f
Zaznamenejte si MAC adresu, kterou bude nutné zadat do skriptu pythonu, abyste mohli odfiltrovat nechtěná zařízení Bluetooth LE
Krok 6: Přidejte skript Python
Kopie skriptu Pythonu je k dispozici na adrese:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Zde je stejný soubor, při kopírování dbejte na odsazení:
Aktualizujte také adresu MAC v souboru python, aby odpovídala adrese senzoru získané z výsledku skenování.
# Tento program je svobodný software: můžete jej dále distribuovat a/nebo upravovat
# to za podmínek obecné veřejné licence GNU, jak ji zveřejnil
# Free Software Foundation, buď verze 3 licence, nebo
# (podle vašeho výběru) jakákoli novější verze.
#
# Tento program je distribuován v naději, že bude užitečný, # ale BEZ JAKÉKOLI ZÁRUKY; bez předpokládané záruky
# OBCHODOVATELNOST nebo VHODNOST PRO ZVLÁŠTNÍ ÚČEL. Viz
# Další veřejná licence GNU General Public License.
#
# Měli byste obdržet kopii obecné veřejné licence GNU
# spolu s tímto programem. Pokud ne, viz.
# bscan.py - Jednoduchý bluetooth LE skener a extraktor dat
ze skeneru importu bluepy.btle, DefaultDelegate
čas importu
importovat pymysql
importovat strukt
hostname = 'localhost'
username = 'datasrc'
heslo = 'datasrc000'
database = 'SensorBug'
#Zadejte MAC adresu senzoru z leskánu
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["Garáž", "Exteriér"]
třída DecodeErrorException (výjimka):
def _init _ (vlastní, hodnota):
self.value = hodnota
def _str _ (self):
vrátit repr (vlastní hodnota)
třída ScanDelegate (DefaultDelegate):
def _init _ (self):
DefaultDelegate._ init _ (self)
def handleDiscovery (self, dev, isNewDev, isNewData):
pokud jeNewDev:
vytisknout „Objevené zařízení“, dev.addr
elif isNewData:
tisknout „Přijatá nová data od“, dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
Tabulka #blesensor je datum, čas, adresa, umístění, teplota, accero
cur = conn.cursor ()
dostr = 'VLOŽIT DO HODNOT dat (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
scanner = Scanner (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = název hostitele, uživatel = uživatelské jméno, heslo = heslo, db = databáze)
ManuDataHex =
ReadLoop = True
Snaž se:
while (ReadLoop):
zařízení = scanner.scan (2.0)
ManuData = ""
pro vývojáře v zařízeních:
vstup = 0
AcceroData = 0
AcceroType = 0
TempData = 0
pro saddr v SENSOR_ADDRESS:
vstup += 1
if (dev.addr == saddr):
tisk "Zařízení %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [položka-1]
for (adtype, desc, value) in dev.getScanData ():
tisk " %s = %s" %(sestup, hodnota)
if (desc == "Výrobce"):
ManuData = hodnota
if (ManuData == ""):
tisk "Nebyla přijata žádná data, ukončení dekódování"
pokračovat
#print ManuData
pro i, j ve formátu zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#Začněte dekódovat nezpracovaná data výrobce
if ((ManuDataHex [0] == 0x85) and (ManuDataHex [1] == 0x00)):
tisk "Záhlaví byte 0x0085 nalezeno"
jiný:
tisk "Bajt hlavičky 0x0085 nenalezen, dekódování zastaveno"
pokračovat
#Přeskočit hlavní/vedlejší
#Index 5 je 0x3c, indikuje úroveň baterie a konfiguraci #
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 "Data:" + hex (ManuDataHex [idx])
if (ManuDataHex [idx] == 0x41):
#Acercerová data
idx += 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx+1]
idx += 2
elif (ManuDataHex [idx] == 0x43):
#Teplotní údaje
idx += 1
TempData = ManuDataHex [idx]
TempData += ManuDataHex [idx +1] * 0x100
TempData = TempData * 0,0625
idx += 2
jiný:
idx += 1
tisk "Adresa zařízení:" + CurrentDevAddr
vytisknout „Umístění zařízení:“+ CurrentDevLoc
tisk "Úroveň baterie:" + str (BatteryLevel) + "%"
tisk "Počitadlo konfigurace:" + str (ConfigCounter)
tisk "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
tisknout "Temp Data:" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
kromě DecodeErrorException:
složit
Krok 7: Otestujte skript Pythonu
Skript musí být spuštěn v kořenovém adresáři, takže:
$ sudo python bscan.pyZjištěné zařízení ec: 6e: 7e: 10: b1: 92 Zařízení ec: 6e: 7e: 10: b1: 92 (veřejné), RSSI = -80 dB Vlajky = 06 Neúplné 16b Služby = 0a18 Výrobce = 850002003c25094102024309016f Nalezen byte záhlaví 0x0085 Adresa zařízení: ec: 6e: 7e: 10: b1: 92 Umístění zařízení: Garáž Úroveň baterie: 37% Počitadlo konfigurace: 9 Data Accero: 0x2 0x2 Teplotní data: 16,5625
Krok 8: Přidejte skript Pythonu do Crontabu
Skript python musí být spuštěn v kořenovém adresáři, takže pokud chcete data zachytávat automaticky, bude nutné je přidat do crontabu root. V tomto případě spouštím skript každých 20 minut Použijte příkaz:
$ sudo crontab -e
# Upravením tohoto souboru zavedete úkoly, které má spustit cron.
# # Každý úkol, který má být spuštěn, musí být definován prostřednictvím jednoho řádku # označujícího pomocí různých polí, kdy bude úkol spuštěn # a jaký příkaz má být spuštěn pro úkol # # Chcete -li definovat čas, kdy můžete zadat konkrétní hodnoty pro # minutu (m), hodina (h), den v měsíci (dom), měsíc (mon), # a den v týdnu (dow) nebo použijte v těchto polích '*' (pro 'any'). # # Všimněte si, že úkoly budou spuštěny na základě cronova systému # pojmu času a časových pásem démona. # # Výstup úloh crontab (včetně chyb) je odeslán prostřednictvím # e -mailu uživateli, kterému soubor crontab patří (není -li přesměrován). # # Například můžete spustit zálohu všech svých uživatelských účtů # v 5 hodin ráno každý týden pomocí: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # Další informace naleznete v manuálové stránky crontab (5) a cron (8) # # mh dom mon dow příkaz 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
A je to. Skript python bude spuštěn v pravidelných intervalech a překóduje výstup do databáze SQL
Krok 9: Extra: Konfigurujte SensorBug pro výstup snímání polohy
Je možné nakonfigurovat SensorBug na Androidu pro výstup snímání polohy. Pro snímání změny polohy, takzvané Garážová vrata. SensorBug detekuje, zda zařízení stojí vzpřímeně nebo leží rovně. Když je zařízení ploché, zaznamenaná hodnota je 0x20 pokud zařízení stojí vzpřímeně, hodnota je 0x02 Nerozlišuje se, zda je poloha X nebo Y nahoře, pokud osa Z není nahoru ani dolů. Nejsnadnějším způsobem je použít aplikaci LightBlue. V nabídce skenování by se měl objevit SensorBug. Vyberte zařízení, které chcete konfigurovat, přejděte na charakteristiku GATT pro konfiguraci akcelerometru UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
Viz obrázek: Napište nový konfigurační řetězec:
010d3f02020000002d00000002 Přečtěte si zpět konfigurační řetězec a potvrďte zápis. To umožňuje akcelerometr pro snímání polohy.
Doporučuje:
Monitorujte teplotu a vlhkost pomocí AM2301 na NodeMCU a Blynk: 3 kroky
Monitorujte teplotu a vlhkost S AM2301 na NodeMCU & Blynk: Je velmi dobře známou skutečností, že ve většině odvětví hrají důležitou roli kontinuální a nezbytné monitorování teploty, vlhkosti, tlaku, kvality vzduchu, kvality vody atd. výstražné systémy musí být zavedeny, když hodnota
Pomocí Raspberry Pi vyhodnoťte vlhkost a teplotu pomocí SI7006: 6 kroků
Pomocí Raspberry Pi vyhodnoťte vlhkost a teplotu pomocí SI7006: Protože jsme nadšenci pro Raspberry Pi, uvažovali jsme o dalších velkolepých experimentech s ním. V této kampani budeme měřit teplotu a vlhkost, které je třeba ovládat, pomocí Raspberry Pi a SI7006, Snímač vlhkosti a teploty
Pomocí Raspberry Pi změřte nadmořskou výšku, tlak a teplotu pomocí MPL3115A2: 6 kroků
Pomocí Raspberry Pi změřte nadmořskou výšku, tlak a teplotu pomocí MPL3115A2: Vědět, co vlastníte, a vědět, proč to vlastníte! Je to zajímavé. Žijeme v době internetové automatizace, která se vrhá do velkého množství nových aplikací. Jako nadšenci počítačů a elektroniky jsme se s Raspberry Pi hodně naučili
Ukládejte a zaznamenávejte data EC/pH/ORP pomocí zásobníku TICK a platformy NoCAN: 8 kroků
Ukládejte a grafujte data EC/pH/ORP s TICK Stack a platformou NoCAN: Toto bude pojednávat o tom, jak používat platformu NoCAN od senzorů Omzlo a uFire k měření EC, pH a ORP. Jak říká jejich webová stránka, někdy je jednodušší jednoduše vést kabel k vašim senzorovým uzlům. CAN má výhodu komunikace a síly v jednom c
Zaznamenávejte data a vykreslete graf online pomocí NodeMCU, MySQL, PHP a Chartjs.org: 4 kroky
Zaznamenávejte data a vykreslete graf online pomocí NodeMCU, MySQL, PHP a Chartjs.org: Tento návod popisuje, jak můžeme použít desku Node MCU ke sběru dat z více senzorů, odeslání těchto dat do hostovaného souboru PHP, který pak data přidá do databáze MySQL. Data lze poté zobrazit online jako graf pomocí chart.js.A ba