Inhaltsverzeichnis:
- Schritt 1: Raspberry Pi einrichten
- Schritt 2: MySQL auf Raspberry Pi einrichten
- Schritt 3: Einrichten der SensorBugs
- Schritt 4: Installieren des Bluetooth LE Python Wrappers
- Schritt 5: Scannen und finden Sie die Adresse des SensorBug heraus
- Schritt 6: Fügen Sie das Python-Skript hinzu
- Schritt 7: Testen Sie das Python-Skript
- Schritt 8: Fügen Sie das Python-Skript zur Crontab hinzu
- Schritt 9: Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang
Video: Überwachen und Aufzeichnen der Temperatur mit Bluetooth LE und RaspberryPi - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
In dieser Anleitung geht es darum, wie man ein Mehrknoten-Temperaturüberwachungssystem mit Bluetooth LE-Sensorfehler von Blue Radios (BLEHome) und RaspberryPi 3B zusammenstellt. Dank der Entwicklung des Bluetooth LE-Standards gibt es jetzt leicht verfügbare drahtlose Sensoren mit geringem Stromverbrauch auf dem Markt zu sehr geringen Kosten und kann monatelang mit einer einzigen Knopfzelle betrieben werden. Einer dieser Sensoren, die ich aufgenommen habe, ist von Blue Radio namens Sensor Bugs. Es kostet etwa 25 US-Dollar bei Amazon und ist ein Bluetooth LE-Gerät mit Temperatursensor, Lichtsensor und Beschleunigungsmesser, die alle in einer kleinen Einheit integriert sind, die drahtlos kommunizieren kann. Dies ist eine perfekte Ergänzung für Raspberry Pi 3B, das Bluetooth LE-Radio unterstützt.
Schritt 1: Raspberry Pi einrichten
Der erste Schritt besteht darin, ein funktionierendes Raspberry Pi-Setup zu erhalten. Folgen Sie den Anweisungen von der Raspberry Pi-Website, laden Sie Raspbian auf eine SD-Karte, legen Sie sie in den Raspberry Pi ein und booten Sie ihn Zeitzone auf die aktuelle Zeitzone anstelle von UTC. Sie können dies mit dem folgenden Befehl tun: $ sudo dpkg-reconfigure tzdataDer Rest der Anweisung geht davon aus, dass die Einrichtung über die Befehlszeilenschnittstelle erfolgt.
Schritt 2: MySQL auf Raspberry Pi einrichten
Es ist sinnvoll, eine lokal installierte Datenbank zu haben, um alle erfassten Daten zu speichern. Die Installation von MySQL auf Raspberry Pi ist super einfach. Es ist auch nicht schwer, das Skript zu ändern, um eine externe Verbindung zu einem SQL-Server herzustellen. Sie können diesen Schritt überspringen, wenn Sie einen SQL-Server im Netzwerk verwenden möchten. Es gibt viele Anweisungen im Netz, ich schlage Folgendes vor: https:// www.stewright.me/2014/06/tutorial-install-…
Sobald der SQL-Server installiert ist, können Sie den MySQL CLI-Client verwenden, um Benutzer, Datenbanken und Tabellen zu erstellen. Um MySQL CLI einzugeben, verwenden Sie den Befehl:
$ sudo mysql -uroot-pErstelle zuerst einen lokalen Benutzer, um erfasste Daten einzufügen: > CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000';Erstelle als nächstes eine Datenbank und eine Tabelle: > CREATE DATABASE SensorBug;Einrichten des Benutzers Berechtigung: > GEWÄHLE ALLE PRIVILEGIEN AUF SensorBug.* TO 'datasrc'@'localhost';Füge nun eine neue Tabelle zur Datenbank hinzu. Für dieses Beispiel füge ich eine Tabelle mit den folgenden Spalten hinzu: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE und ACCEROMETER
- DATUM/ZEIT - Dies ist das Datum und die Uhrzeit der Datenaufzeichnung
- ADRESSE - Dies ist der MAC des SensorBug, von dem die Nachricht erfasst wird
- STANDORT - Eine von Menschen lesbare Zeichenfolge, um anzuzeigen, wo sich der Sensor befindet
- TEMPERATUR - Dies ist die aufgezeichnete Temperatur
- ACCELE - Dies ist der Wert des Beschleunigungsmesserausgangs, nützlich für die Aufzeichnung der Sensorposition (falls aktiviert)
Der Befehl, der dies tut, ist: > USE SensorBug; > CREATE TABLE data (Datum DATE, Uhrzeit TIME, Adresse TINYTEXT, Standort TINYTEXT, Temperatur FLOAT, accele INT); Jetzt ist die Datenbank fertig, wir können mit dem Einrichten der sensorBugs fortfahren.
Schritt 3: Einrichten der SensorBugs
Die Sensor Bugs sind ziemlich nette kleine Geräte. Leider hat der Hersteller nur eine IOS-App zum Programmieren mitgeliefert. Trotzdem ist es immer noch möglich, damit zu arbeiten, wenn Sie nur ein Android-Gerät haben. Im ersten Schritt koppeln Sie das Gerät mit einem Telefon. Ohne das Koppeln des Geräts wird der SensorBug keine Daten ankündigen. Ich habe versucht zu sehen, ob ich dies direkt mit RaspberryPi machen kann, leider scheint der Bluetooth LE-Treiber auf RaspberryPi noch experimentell zu sein und Fehler zu enthalten, um zu verhindern, dass er mit Bluetooth LE-Geräten gekoppelt wird. Zukünftige Versionen des blueZ-Treibers könnten dies beheben, aber wie aktuell geschrieben, gibt es keine Möglichkeit, den SensorBug mit RaspberryPi zu koppeln. Zum Glück müssen wir das Gerät nicht koppeln, um die angekündigten Daten zu erfassen. Das einzige, was wir brauchen, ist ein Telefon, um den SensorBug zu konfigurieren. Standardmäßig startet der SensorBug die Anzeige von Temperaturdaten im 1-Sekunden-Intervall, sobald er mit einem Gerät gekoppelt ist. Für die Erfassung von Temperaturdaten ist das alles, was benötigt wird. Wenn Sie planen, den Positions- oder Lichtsensor zu verwenden, ist eine Konfiguration des Geräts erforderlich. Für den Anfang koppeln wir das Gerät und trennen es. Dies reicht für die Temperaturerfassung aus. Drücken Sie zunächst beide Tasten am SensorBug. Die blau/grüne LED blinkt, um anzuzeigen, dass sie eingeschaltet ist. Drücken Sie eine der Tasten, die grüne LED sollte aufleuchten und anzeigen, dass das Gerät eingeschaltet ist. Wenn die grüne LED nicht leuchtet, drücken Sie beide Tasten, um das Gerät erneut einzuschalten. Halten Sie eine der Tasten gedrückt, bis die blaue LED zu blinken beginnt. Dadurch wird das Gerät in den Pairing-Modus versetzt. Gehen Sie auf dem Telefon in das Bluetooth-Konfigurationsmenü und suchen Sie nach dem SensorBug-Gerät. Sobald es angezeigt wird, wählen Sie es aus, um es mit dem Gerät zu koppeln. Das war's, jetzt ist der SensorBug mit Strom versorgt und gibt die Temperaturdaten bekannt
Schritt 4: Installieren des Bluetooth LE Python Wrappers
Als nächstes müssen wir die Bibliothek für Python installieren, um mit dem Bluetooth LE-Stack zu kommunizieren. Die Anleitung finden Sie hier: https://github.com/IanHarvey/bluepyFür Python 2.7 ist es so einfach, die folgenden Befehle einzugeben:
$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy
Schritt 5: Scannen und finden Sie die Adresse des SensorBug heraus
Um die SensorBug-MAC-Adresse herauszufinden, verwenden Sie diesen Befehl: $ sudo hcitool lescan Sie sollten eine Ausgabe wie die folgende sehen:
EC:FE:7E:10:B1:92 (unbekannt)Wenn Sie viele Bluetooth-LE-Geräte in der Nähe haben, kann es schwierig sein, herauszufinden, mit welchem Sie sprechen. Sie können Bluetoothctl ausprobieren, das weitere Details enthält:
$ sudo bluetoothctl[bluetooth]# scan on [NEW] Device EC:FE:7E:10:B1:92 SensorBug10B192 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Key: 0x0085 [CHG] Device EC: FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x00 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x3c [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x25 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x09 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x41 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x02 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x43 [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x0b [CHG] Device EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x01 [CHG] Gerät EC:FE:7E:10:B1:92 ManufacturerData Wert: 0x6f
Notieren Sie die MAC-Adresse, diese muss in das Python-Skript eingegeben werden, um unerwünschte Bluetooth LE-Geräte herauszufiltern
Schritt 6: Fügen Sie das Python-Skript hinzu
Eine Kopie des Python-Skripts ist erhältlich von:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
Hier ist die gleiche Datei, achten Sie beim Kopieren auf den Einzug:
Aktualisieren Sie außerdem die MAC-Adresse in der Python-Datei, damit sie mit der aus dem Scan-Ergebnis erhaltenen Sensoradresse übereinstimmt.
# Dieses Programm ist freie Software: Sie können es weitergeben und/oder modifizieren
# es unter den Bedingungen der GNU General Public License, wie veröffentlicht von
# die Free Software Foundation, entweder Version 3 der Lizenz, oder
# (nach Ihrer Wahl) jede neuere Version.
#
# Dieses Programm wird in der Hoffnung verteilt, dass es nützlich ist, # aber OHNE JEGLICHE GARANTIE; auch ohne die stillschweigende garantie von
# MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
# GNU General Public License für weitere Details.
#
# Sie sollten eine Kopie der GNU General Public License erhalten haben
# zusammen mit diesem Programm. Wenn nicht, siehe.
# bscan.py - Einfacher Bluetooth LE-Scanner und Datenextraktor
from bluepy.btle import Scanner, DefaultDelegate
Importzeit
pymysql importieren
Importstruktur
Hostname = 'localhost'
Benutzername = 'datasrc'
Passwort = 'datasrc000'
Datenbank = 'SensorBug'
#Geben Sie die MAC-Adresse des Sensors aus dem lescan ein
SENSOR_ADDRESS = ["ec:fe:7e:10:b9:92", "ec:fe:7e:10:b9:93"]
SENSOR_LOCATION = ["Garage", "Außenbereich"]
Klasse DecodeErrorException(Ausnahme):
def _init_(self, value):
Eigenwert = Wert
def _str_(selbst):
Rückgaberepr(self.value)
Klasse ScanDelegate (DefaultDelegate):
def _init_(selbst):
DefaultDelegate._init_(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
print "Entdecktes Gerät", dev.addr
elif isNewData:
print "Neue Daten erhalten von", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
#blesensor-Tabelle ist Datum, Uhrzeit, Adresse, Ort, Temperatur, Accero
cur = conn.cursor()
dostr = 'INSERT INTO DatenWERTE (CURRENT_DATE(), NOW(), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit()
Scanner = Scanner().withDelegate(ScanDelegate())
myConnection = pymysql.connect (host=hostname, user=username, passwd=password, db=database)
ManuDataHex =
ReadLoop = True
Versuchen:
while (ReadLoop):
Geräte = Scanner.scan(2.0)
ManuData = ""
für Dev-In-Geräte:
Eintrag = 0
AcceroData = 0
AcceroType = 0
Temperaturdaten = 0
für saddr in SENSOR_ADDRESS:
Eintrag += 1
if (dev.addr == saddr):
print "Gerät %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION[Eintrag-1]
for (adtype, desc, value) in dev.getScanData():
print " %s = %s" % (desc, value)
if (desc == "Hersteller"):
ManuData = Wert
if (ManuData == ""):
print "Keine Daten empfangen, Dekodierung beenden"
fortsetzen
#ManuData drucken
für i, j in zip (ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i+j, 16))
#Starten Sie die Dekodierung der rohen Herstellerdaten
if ((ManuDataHex[0] == 0x85) und (ManuDataHex[1] == 0x00)):
print "Headerbyte 0x0085 gefunden"
anders:
print "Header-Byte 0x0085 nicht gefunden, Dekodierungsstopp"
fortsetzen
#Major/Minor überspringen
#Index 5 ist 0x3c, zeigt Batteriestand und Konfiguration an #
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 "Daten: " + hex(ManuDataHex[idx])
if (ManuDataHex[idx] == 0x41):
#Beschleunigungsmesser-Daten
idx += 1
AcceleroType = ManuDataHex[idx]
AcceleroData = ManuDataHex[idx+1]
idx += 2
elif (ManuDataHex[idx] == 0x43):
#Temperaturdaten
idx += 1
TempData = ManuDataHex[idx]
TempData += ManuDataHex[idx+1] * 0x100
TempData = TempData * 0,0625
idx += 2
anders:
idx += 1
print "Geräteadresse: " + CurrentDevAddr
print "Gerätestandort: " + CurrentDevLoc
print "Batteriestand: " + str(Batteriestand) + "%"
print "Config Counter: " + str(ConfigCounter)
print "Accelero Data: " + hex(AcceleroType) + " " + hex(AcceleroData)
print "Temp-Daten: " + str(TempData)
doQueryInsert(myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = False
außer DecodeErrorException:
passieren
Schritt 7: Testen Sie das Python-Skript
Das Skript muss im Root ausgeführt werden, also:
$ sudo python bscan.pyDiscovered device ec:6e:7e:10:b1:92 Device ec:6e:7e:10:b1:92 (public), RSSI=-80 dB Flags = 06 Incomplete 16b Services = 0a18 Manufacturer = 850002003c25094102024309016f Header-Byte 0x0085 gefunden Geräteadresse: ec:6e:7e:10:b1:92 Gerätestandort: Garage Batteriestand: 37% Konfigurationszähler: 9 Accero Data: 0x2 0x2 Temp Data: 16.5625
Schritt 8: Fügen Sie das Python-Skript zur Crontab hinzu
Das Python-Skript muss im Root ausgeführt werden. Wenn Sie die Daten automatisch erfassen möchten, muss es der crontab des Roots hinzugefügt werden. In diesem Beispiel führe ich das Skript alle 20 Minuten aus Verwenden Sie den Befehl:
$ sudo crontab -e
# Bearbeiten Sie diese Datei, um Aufgaben einzuführen, die von Cron ausgeführt werden sollen.
# # Jede auszuführende Aufgabe muss durch eine einzige Zeile definiert werden # mit verschiedenen Feldern, die angeben, wann die Aufgabe ausgeführt wird # und welcher Befehl für die Aufgabe ausgeführt werden soll # # Um die Zeit zu definieren, können Sie konkrete Werte für # Minuten (m), Stunde (h), Tag des Monats (dom), Monat (mon), # und Wochentag (dow) oder verwenden Sie '*' in diesen Feldern (für 'any').# # Beachten Sie, dass Aufgaben gestartet werden basierend auf der Vorstellung von Zeit und Zeitzonen des cron-Systems # Daemons. # # Die Ausgabe der crontab-Jobs (einschließlich Fehlern) wird über # E-Mail an den Benutzer gesendet, zu dem die crontab-Datei gehört (sofern nicht umgeleitet). # # Sie können beispielsweise jede Woche um 5 Uhr morgens ein Backup all Ihrer Benutzerkonten durchführen mit: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # Weitere Informationen finden Sie im Handbuchseiten von crontab(5) und cron(8) # # mh dom mon dow Befehl 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * Python /home/pi/bscan.py
Das ist es. Das Python-Skript wird in regelmäßigen Abständen ausgeführt und codiert die Ausgabe in die SQL-Datenbank um
Schritt 9: Extra: Konfigurieren Sie den SensorBug für den Positionssensorausgang
Es ist möglich, den SensorBug auf Android für die Positionserkennungsausgabe zu konfigurieren. Für die Positionsänderungserkennung, die sogenannte Garagentorerkennung, erkennt der SensorBug, ob das Gerät aufrecht steht oder flach liegt. Wenn das Gerät flach ist, ist der aufgezeichnete Wert 0x20 Wenn das Gerät aufrecht steht, ist der Wert 0x02Es macht keinen Unterschied, ob die X- oder Y-Position oben ist, solange die Z-Achse nicht oben oder unten ist. Am einfachsten geht dies mit der LightBlue App. Der SensorBug sollte im Scan-Menü angezeigt werden. Wählen Sie das Gerät aus, das Sie konfigurieren möchten, gehen Sie zu den GATT-Eigenschaften für die Konfiguration des Beschleunigungsmessers UUID:9DC84838-7619-4F09-A1CE-DDCF63225B11
Siehe Bild:Schreiben Sie einen neuen Konfigurationsstring:
010d3f02020000002d00000002Lesen Sie den Konfigurationsstring zurück, um den Schreibvorgang zu bestätigen. Dadurch wird der Beschleunigungsmesser für die Positionserfassung aktiviert.
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
So erstellen Sie einen Smart Pot mit NodeMCU, der von der App gesteuert wird – wikiHow
So erstellen Sie einen Smart Pot mit NodeMCU, der von einer App gesteuert wird: In dieser Anleitung bauen wir einen Smart Pot, der von einem ESP32 und einer Anwendung für Smartphones (iOS und Android) gesteuert wird. Wir verwenden NodeMCU (ESP32) für die Konnektivität und die Blynk-Bibliothek für das Cloud-IoT und die Anwendung auf dem Smartphone. Endlich haben wir
ÜBERWACHEN SIE IHREN GARTEN: 16 Schritte (mit Bildern)
ÜBERWACHEN SIE IHREN GARTEN: Überwachen Sie Ihren Garten von überall aus, verwenden Sie das lokale Display, um die Bodenbedingungen vor Ort zu überwachen, oder verwenden Sie Mobile, um die Überwachung aus der Ferne durchzuführen. Die Schaltung verwendet einen Bodenfeuchtigkeitssensor, der mit Temperatur und Feuchtigkeit gekoppelt ist, um die Umgebungsbedingungen des Bodens zu erkennen
Ein High-School-Stück aufzeichnen (gut) – wikiHow
Wie man ein High-School-Stück aufnimmt (naja): Hey all- Während meiner Jahre in der High School war ich wirklich in das Schauspielprogramm involviert, insbesondere in die Crew. Angefangen mit dem Bau, wechselte zum Laufen, dann zur Beleuchtung, und jetzt, wo ich mein Studium abgeschlossen habe, wurde ich zurückgezogen, um bei der Beleuchtung zu helfen