[PYTHON] Überprüfen Sie! Erhalten Sie Sensordaten über Bluetooth mit Raspberry Pi ~ Preparation

Hallo, das ist @dz_ this und Ohira Kazumi von Oak Fan.

Prolog-Einführung

Ich habe untersucht, wie man mit Bluetooth umgeht, damit der Raspberry Pi Bluetooth verwenden kann, um Daten von Sensorgeräten abzurufen.

Zuerst habe ich diese Testversion mit Raspberry Pi Zero gestartet, aber ich konnte die erforderlichen Bibliotheken aufgrund von Speichermangel nicht installieren. Deshalb habe ich mich für Raspberry Pi 2 Model B entschieden.

Verwenden von Bluethooth mit Raspberry Pi

Vorbereiten eines Bluetooth-Adapters

Der diesmal verwendete Raspberry Pi verfügt nicht über Bluetooth. Verwenden Sie daher einen USB-Adapter.

Bluetooth USB Adapter dies und das

Es scheint, dass häufig PLANEX-Produkte verwendet werden. Als ich zu einem bestimmten Elektrofachgeschäft ging, hatte ich kein PLANEX, also kaufte ich das billigste PRINCETON (lacht). Es funktioniert ohne Probleme.

Sensorgerät über Bluetooth verbunden

Verwenden Sie SensorTag CC2650, das mit 10 Sensortypen ausgestattet ist. Es kann über Bluetooth verbunden werden und scheint einfach zu handhaben zu sein, da es einige Beispielcodes und Benutzerinformationen gibt.

Periphere Umstände beim Umgang mit Bluetooth unter Linux

Ich lerne noch, aber es scheint, dass der folgende Mechanismus verwendet wird, um Bluetooth unter Linux zu handhaben.

BlueZ

GATT (Generic Attribute Profile)

Funktionsprüfung

Da wir viel über schwierige Dinge lernen werden, lesen Sie zunächst RPi Bluetooth LE --eLinux.org über die Befehlszeile. Ich habe versucht, den Betrieb zu überprüfen.

#Überprüfen Sie das angeschlossene USB-Gerät
$ lsusb
...
Bus 001 Device 011: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
...

#Überprüfen Sie den Status des Bluetooth-Adapters
$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
        BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING 
        RX bytes:610 acl:0 sco:0 events:36 errors:0
        TX bytes:942 acl:0 sco:0 commands:36 errors:0

#Wenn oben`DOWN`Wird angezeigt, aktivieren Sie es mit dem folgenden Befehl
$ sudo hciconfig hci0 up

#Scannen Sie in der Nähe befindliche Bluetooth-Geräte
$ sudo hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX CC2650 SensorTag
...

SensorTag wurde im Scan-Ergebnis angezeigt. Es scheint, dass Sie es sicher erkennen können.

Verwenden Sie Bluetooth von Python

Versuchen wir nun, Bluetooth programmgesteuert zu verwenden.

Was die Sprache betrifft, werde ich versuchen, Python zu verwenden, eine wichtige Sprache im Raspberry Pi-Bereich, nachdem ich sie überprüft habe. Als Bibliothek für den Umgang mit Bluetooth werde ich "pybluez" vorstellen.

Pybluez installieren

Die Installation selbst finden Sie im Folgenden. Da gattlib auch erforderlich ist, um BLE-kompatible Geräte mit pybluez zu handhaben, installieren Sie es ebenfalls.

#Installieren Sie abhängige Pakete für pyBluez
$ sudo apt-get install python-dev libbluetooth3-dev

#Installieren Sie pyBluez
$ sudo pip install pybluez

#Installieren Sie gattlib-abhängige Pakete
$ sudo apt-get install libglib2.0 libboost-python-dev libboost-thread-dev

#Installieren Sie die erforderliche Gattlib, wenn Sie BLE verwenden
$ sudo pip install gattlib

Beispielcode

Suchen wir nun nach SensorTag in Python.

SensorTag ist BLE-fähig, sodass Sie mit diesem Beispielcode scannen können.

Um die Daten zu erhalten, ist dieser Beispielcode hilfreich.

Wie Sie vielleicht bereits bemerkt haben, verwendet pybluez beim Umgang mit BLE-kompatiblen Geräten tatsächlich Gattlib über Pybluez. Daher ist auch die Dokumentation für Gattlib selbst hilfreich.

Im GATT werden Daten mithilfe einer Adresse (?) Erfasst und festgelegt, die als "Handle" bezeichnet wird. Die GATT-Tabelle von SensorTag befindet sich unter "Sensoren und Dienste" von Disassemble | Simplelink Sensor Tag --TI. Bitte beziehen Sie sich darauf, wie es veröffentlicht wird.

Jetzt können Sie Ihre bevorzugten Sensordaten abrufen! ??

(Tatsächlich müssen die erfassten Daten in LSB, MSB usw. konvertiert werden.)

Epilog-Fazit

Es war schade, dass ich es nicht mit meinem Lieblings-Raspberry Pi Zero zum Laufen bringen konnte, aber jetzt bin ich bereit, Bluetooth von meinem Raspberry Pi 2 aus zu verwenden!

Ich werde weiter vorwärts gehen!


Im Folgenden wird die Fehlerbehebung beschrieben.

Fehlerbehebung bei der Installation von pybluez

Wenn Python.h nicht gefunden wird

Wenn Sie den Fehler "Schwerwiegender Fehler: Python.h: Keine solche Datei oder kein solches Verzeichnis" erhalten, müssen Sie "python-dev" installieren.

Fehlerinhalt

    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno
-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-se
curity -fPIC -I./port3 -I/usr/include/python2.7 -c bluez/btmodule.c -o build/temp.linux-arm
v6l-2.7/bluez/btmodule.o
    In file included from bluez/btmodule.c:20:0:
    bluez/btmodule.h:4:20: fatal error: Python.h: No such file or directory
     #include "Python.h"
                        ^
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-4nXTDu
/pybluez/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\
r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fWWiRf-record/install-record.txt
 --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-
4nXTDu/pybluez/

Bewältigung

$ sudo apt-get install python-dev

Wenn bluetooth / Bluetooth.h nicht gefunden wird

Schwerwiegender Fehler: bluetooth / bluetooth.h: Keine der folgenden Dateien oder Verzeichnisse Wenn Sie den Fehler `` erhalten, müssen Sie libbluetooth3-dev` installieren.

Fehlerinhalt

    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno
-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-se
curity -fPIC -I./port3 -I/usr/include/python2.7 -c bluez/btmodule.c -o build/temp.linux-arm
v6l-2.7/bluez/btmodule.o
    In file included from bluez/btmodule.c:20:0:
    bluez/btmodule.h:5:33: fatal error: bluetooth/bluetooth.h: No such file or directory
     #include <bluetooth/bluetooth.h>
                                     ^
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-OWwZct
/pybluez/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\
r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-_zZYsg-record/install-record.txt
 --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-
OWwZct/pybluez/

Bewältigung

$ sudo apt-get install libbluetooth3-dev

gattlib Fehlerbehebung bei der Installation

Wenn boost / python / list.php nicht gefunden wird

Wenn Sie den Fehler "Schwerwiegender Fehler: boost / python / list.hpp: Keine solche Datei oder kein solches Verzeichnis" erhalten, müssen Sie "libboost-python-dev" installieren.

Fehlerinhalt

    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno
-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-se
curity -fPIC -DVERSION="5.25" -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2
.0/include -Isrc/bluez -I/usr/include/python2.7 -c src/gattservices.cpp -o build/temp.linux
-armv6l-2.7/src/gattservices.o
    cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not
 for C++
    In file included from src/gattservices.cpp:12:0:
    src/gattlib.h:11:33: fatal error: boost/python/list.hpp: No such file or directory
     #include <boost/python/list.hpp>
                                     ^
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-lIdNTN
/gattlib/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\
r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-h_pTpQ-record/install-record.txt
 --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-
lIdNTN/gattlib/

Bewältigung

$ sudo apt-get install libboost-python-dev

Wenn glib-2.0 nicht gefunden wird

Wenn Sie die Fehlermeldung "Kein Paket" glib-2.0 "gefunden" erhalten, müssen Sie "libglib2.0" wie unten gezeigt installieren.

Fehlerinhalt

$ sudo pip install gattlib
Collecting gattlib
  Downloading gattlib-0.20150805.tar.gz (1.7MB)
    100% |████████████████████████████████| 1.7MB 86kB/s 
    Complete output from command python setup.py egg_info:
    Package glib-2.0 was not found in the pkg-config search path.
    Perhaps you should add the directory containing `glib-2.0.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'glib-2.0' found
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-ix7ocM/gattlib/setup.py", line 12, in <module>
        "pkg-config --cflags glib-2.0".split()).decode('utf-8')
      File "/usr/lib/python2.7/subprocess.py", line 573, in check_output
        raise CalledProcessError(retcode, cmd, output=output)
    subprocess.CalledProcessError: Command '['pkg-config', '--cflags', 'glib-2.0']' returne
d non-zero exit status 1
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-ix7ocM/gattli
b/

Bewältigung

$ sudo apt-get install libglib2.0

Wenn -lboost_thread nicht gefunden wird

Wenn die Fehlermeldung "-lboost_thread kann nicht gefunden werden" angezeigt wird (siehe unten), müssen Sie "libboost-thread-dev" installieren.

Fehlerinhalt

  c++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -
DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector-s
trong -Wformat -Werror=format-security -Wl,-z,relro -D_FORTIFY_SOURCE=2 -g -fstack-protecto
r-strong -Wformat -Werror=format-security build/temp.linux-armv7l-2.7/src/gattservices.o bu
ild/temp.linux-armv7l-2.7/src/beacon.o build/temp.linux-armv7l-2.7/src/bindings.o build/tem
p.linux-armv7l-2.7/src/gattlib.o build/temp.linux-armv7l-2.7/src/bluez/lib/uuid.o build/tem
p.linux-armv7l-2.7/src/bluez/attrib/gatt.o build/temp.linux-armv7l-2.7/src/bluez/attrib/gat
trib.o build/temp.linux-armv7l-2.7/src/bluez/attrib/utils.o build/temp.linux-armv7l-2.7/src
/bluez/attrib/att.o build/temp.linux-armv7l-2.7/src/bluez/src/shared/crypto.o build/temp.li
nux-armv7l-2.7/src/bluez/src/log.o build/temp.linux-armv7l-2.7/src/bluez/btio/btio.o -lglib
-2.0 -lboost_python -lboost_thread -lbluetooth -o build/lib.linux-armv7l-2.7/gattlib.so
  /usr/bin/ld: cannot find -lboost_thread
  collect2: error: ld returned 1 exit status
  error: command 'c++' failed with exit status 1

Bewältigung

$ sudo apt-get install libboost-thread-dev

Interner Compilerfehler: Für Killed

Im Falle dieses Fehlers wird die Eingabeaufforderung nicht einfach wieder angezeigt. Wenn Sie der Meinung sind, dass sie zurückgegeben wurde, wird dieser Fehler angezeigt.

Fehlerinhalt

  arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-s
trict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-secu
rity -fPIC -DVERSION="5.25" -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0
/include -Isrc/bluez -I/usr/include/python2.7 -c src/bindings.cpp -o build/temp.linux-armv6
l-2.7/src/bindings.o
  cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not f
or C++
  arm-linux-gnueabihf-gcc: internal compiler error: Killed (program cc1plus)
  Please submit a full bug report,
  with preprocessed source if appropriate.
  See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
  error: command 'arm-linux-gnueabihf-gcc' failed with exit status 4

Ursache

Dies scheint aus dem Gedächtnis zu sein. Der Raspberry Pi Zero, den ich ausprobierte, erlaubte mir nicht mehr, gattlib zu installieren, aber mit dem Raspberry Pi 2 Model B konnte ich gattlib ohne diesen Fehler installieren.

Recommended Posts

Überprüfen Sie! Erhalten Sie Sensordaten über Bluetooth mit Raspberry Pi ~ Preparation
Verbesserter menschlicher Sensor mit Raspberry Pi
Verwenden Sie einen PIR-Bewegungssensor mit Himbeer-Pi
Erfassen Sie den Sensorwert von Grove Pi + mit Raspberry Pi und speichern Sie ihn in Kintone
Medienprogrammierung mit Raspeye (Vorbereitung für Audio)
CSV-Ausgabe von Impulsdaten mit Raspberry Pi (CSV-Ausgabe)
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Holen Sie sich Temperatur und Luftfeuchtigkeit mit DHT11 und Raspberry Pi
GPGPU mit Raspberry Pi
DigitalSignage mit Raspberry Pi
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
Verwirklichen Sie ein Super-IoT-Haus, indem Sie mit Raspberry Pi Sensordaten im Haus erfassen
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
[Raspberry Pi] Schrittmotorsteuerung mit Raspberry Pi
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Servomotorsteuerung mit Raspberry Pi
Serielle Kommunikation mit Raspberry Pi + PySerial
[Python] Mit DataReader Wirtschaftsdaten abrufen
Betriebssystem-Setup mit Raspberry Pi Imager
Probieren Sie L Chika mit Himbeerpi
Aufbau eines VPN-Servers mit Raspberry Pie
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
Verwenden einer Webkamera mit Raspberry Pi
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
Hinweis: Ich möchte die Heimautomation mit Home Assistant + Raspberry Pi + Sensor Nr. 1 durchführen
Protokollierung der Omron-Umgebungssensorwerte mit Raspberry Pi (USB-Typ)
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Messen Sie die SIM-Signalstärke mit Raspberry Pi
Haustierüberwachung mit Rekognition und Raspberry pi
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Hallo Welt mit Raspberry Pi + Minecraft Pi Edition
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Holen Sie sich Daten von Cloudant mit Bluemix-Kolben
Versuchen Sie, mit Raspberry Pi nach Wakasagi zu fischen
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Verwenden Sie den Grove-Sensor mit Raspberry Pi
Versuchen Sie die Objekterkennung mit Raspberry Pi 4 + Coral
Den Servomotor SG-90 mit Himbeer-Pi betreiben
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Machen Sie einen Waschtrocknungs-Timer mit Raspberry Pi
Infer Custom Vision Modell mit Raspeye
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Holen Sie sich mit pyVISA Daten von einem Oszilloskop
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Protokollieren des Werts von Inkbird IBS-TH1 mit Raspberry Pi
Arbeiten mit GPS in Python für Raspberry Pi 3
Ich habe die Beleuchtungsstärke des Raumes mit Raspberry Pi, Arduino und einem optischen Sensor getwittert
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!