Hallo, das ist @dz_ this und Ohira Kazumi von Oak Fan.
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.
Der diesmal verwendete Raspberry Pi verfügt nicht über Bluetooth. Verwenden Sie daher einen USB-Adapter.
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.
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.
Ich lerne noch, aber es scheint, dass der folgende Mechanismus verwendet wird, um Bluetooth unter Linux zu handhaben.
GATT (Generic Attribute Profile)
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.
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.
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
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.)
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.
pybluez
Python.h
nicht gefunden wirdWenn Sie den Fehler "Schwerwiegender Fehler: Python.h: Keine solche Datei oder kein solches Verzeichnis" erhalten, müssen Sie "python-dev" installieren.
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/
$ sudo apt-get install python-dev
bluetooth / Bluetooth.h
nicht gefunden wirdSchwerwiegender Fehler: bluetooth / bluetooth.h: Keine der folgenden Dateien oder Verzeichnisse Wenn Sie den Fehler `` erhalten, müssen Sie
libbluetooth3-dev` installieren.
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/
$ sudo apt-get install libbluetooth3-dev
gattlib
Fehlerbehebung bei der Installationboost / python / list.php
nicht gefunden wirdWenn Sie den Fehler "Schwerwiegender Fehler: boost / python / list.hpp: Keine solche Datei oder kein solches Verzeichnis" erhalten, müssen Sie "libboost-python-dev" installieren.
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/
$ sudo apt-get install libboost-python-dev
Wenn Sie die Fehlermeldung "Kein Paket" glib-2.0 "gefunden" erhalten, müssen Sie "libglib2.0" wie unten gezeigt installieren.
$ 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/
$ sudo apt-get install libglib2.0
-lboost_thread
nicht gefunden wirdWenn die Fehlermeldung "-lboost_thread kann nicht gefunden werden" angezeigt wird (siehe unten), müssen Sie "libboost-thread-dev" installieren.
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
$ sudo apt-get install libboost-thread-dev
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.
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
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