[PYTHON] Vérifiez! Obtenez les données du capteur via Bluetooth avec Raspberry Pi ~ Préparation

Bonjour, c'est @dz_ ceci et Ohira Kazumi de fan de chêne.

Prologue-Introduction

J'ai étudié comment gérer Bluetooth afin que le Raspberry Pi puisse utiliser Bluetooth pour récupérer des données à partir de capteurs.

Au début, j'ai commencé cet essai avec Raspberry Pi Zero, mais je n'ai pas pu installer les bibliothèques nécessaires en raison d'un manque de mémoire, j'ai donc décidé de continuer avec Raspberry Pi 2 Model B.

Utiliser Bluethooth avec Raspberry Pi

Préparation d'un adaptateur Bluetooth

Le Raspberry Pi utilisé cette fois n'a pas de Bluetooth, utilisez donc un adaptateur USB.

Adaptateur USB Bluetooth ceci et cela

Il semble que les produits PLANEX soient souvent utilisés. Quand je suis allé dans un certain magasin d'électricité, je n'avais pas de PLANEX, j'ai donc acheté le PRINCETON le moins cher (rires) .Il fonctionne sans aucun problème.

Appareil capteur connecté par Bluetooth

Utilisez SensorTag CC2650 équipé de 10 types de capteurs. Il peut être connecté via Bluetooth et semble facile à gérer car il existe des exemples de code et des informations utilisateur.

Circonstances périphériques lors de l'utilisation de Bluetooth sous Linux

J'étudie toujours, mais il semble que le mécanisme suivant sera utilisé pour gérer Bluetooth sous Linux.

BlueZ

GATT (Generic Attribute Profile) --Un cadre normalisé pour le transfert et le stockage de données basé sur le protocole d'attribut (ATT)

Contrôle de fonctionnement

Comme nous en apprendrons beaucoup sur les choses difficiles, reportez-vous d'abord à RPi Bluetooth LE --eLinux.org depuis la ligne de commande. J'ai essayé de vérifier l'opération.

#Vérifiez le périphérique USB connecté
$ lsusb
...
Bus 001 Device 011: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
...

#Vérifiez l'état de l'adaptateur Bluetooth
$ 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

#Si ci-dessus`DOWN`Est affiché, activez-le avec la commande suivante
$ sudo hciconfig hci0 up

#Analyser les appareils Bluetooth à proximité
$ sudo hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX CC2650 SensorTag
...

Il y avait un affichage de SensorTag dans le résultat de l'analyse. Il semble que vous puissiez le reconnaître en toute sécurité.

Utiliser Bluetooth depuis Python

Maintenant, essayons d'utiliser Bluetooth par programmation.

En ce qui concerne le langage, je vais essayer d'utiliser Python, qui est un langage majeur dans la zone Raspberry Pi, après l'avoir examiné. En tant que bibliothèque pour gérer Bluetooth, je présenterai pybluez.

Installer pybluez

Veuillez vous référer à ce qui suit pour l'installation elle-même. Puisque gattlib est également nécessaire pour gérer les appareils compatibles BLE avec pybluez, installez-le également.

#Installer les packages dépendants pour pyBluez
$ sudo apt-get install python-dev libbluetooth3-dev

#Installez pyBluez
$ sudo pip install pybluez

#Installer les packages dépendants de gattlib
$ sudo apt-get install libglib2.0 libboost-python-dev libboost-thread-dev

#Installer gattlib requis lors de l'utilisation de BLE
$ sudo pip install gattlib

Exemple de code

Maintenant, recherchons SensorTag en python.

SensorTag est compatible BLE, vous pouvez donc numériser avec cet exemple de code.

En outre, pour obtenir les données, cet exemple de code sera utile.

Comme vous l'avez peut-être déjà remarqué, pybluez utilise en fait gattlib via pybluez lorsqu'il s'agit d'appareils compatibles BLE, donc la documentation de gattlib elle-même est également utile.

Dans le GATT, les données sont acquises et définies à l'aide d'une adresse (?) Appelée "handle". Le tableau GATT de SensorTag se trouve dans "Sensors and Services" de Disassemble | Simplelink Sensor Tag --TI Veuillez vous y référer tel qu'il est publié.

Vous pouvez maintenant obtenir vos données de capteur préférées! ??

(En fait, les données acquises doivent être converties en LSB, MSB, etc.)

Épilogue-Conclusion

C'est dommage que je ne puisse pas le faire fonctionner avec mon Raspberry Pi Zero préféré, mais maintenant je suis prêt à utiliser Bluetooth depuis mon Raspberry Pi 2!

Je continuerai d'avancer!


Ce qui suit concerne le dépannage.

Dépannage de l'installation de pybluez

Si Python.h n'est pas trouvé

Si vous obtenez l'erreur erreur fatale: Python.h: aucun fichier ou répertoire de ce type, vous devez installer python-dev.

contenu de l'erreur

    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/

Faire face

$ sudo apt-get install python-dev

Si bluetooth / Bluetooth.h n'est pas trouvé

Erreur fatale: bluetooth / bluetooth.h: aucun fichier ou répertoire comme ci-dessous Si vous obtenez l'erreur , vous devez installer libbluetooth3-dev.

contenu de l'erreur

    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/

Faire face

$ sudo apt-get install libbluetooth3-dev

Dépannage de l'installation de gattlib

Si boost / python / list.php n'est pas trouvé

Si vous obtenez l'erreur erreur fatale: boost / python / list.hpp: aucun fichier ou répertoire de ce type, vous devez installer libboost-python-dev.

contenu de l'erreur

    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/

Faire face

$ sudo apt-get install libboost-python-dev

Si glib-2.0 n'est pas trouvé

Si vous obtenez l'erreur Aucun package'glib-2.0 'trouvé, vous devez installer libglib2.0, comme indiqué ci-dessous.

contenu de l'erreur

$ 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/

Faire face

$ sudo apt-get install libglib2.0

Si -lboost_thread n'est pas trouvé

Si vous obtenez l'erreur impossible de trouver -lboost_thread, comme indiqué ci-dessous, vous devez installer libboost-thread-dev.

contenu de l'erreur

  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

Faire face

$ sudo apt-get install libboost-thread-dev

erreur interne du compilateur: For Killed

Dans le cas de cette erreur, l'invite ne revient pas facilement, et si vous pensez qu'elle est revenue, cette erreur s'affiche.

contenu de l'erreur

  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

Cause

Cela semble être hors de mémoire. Le Raspberry Pi Zero que j'essayais ne me permettait plus d'installer gattlib, mais avec le Raspberry Pi 2 Model B, j'ai pu installer gattlib sans cette erreur.

Recommended Posts

Vérifiez! Obtenez les données du capteur via Bluetooth avec Raspberry Pi ~ Préparation
Capteur humain amélioré fabriqué avec Raspberry Pi
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Programmation média avec Raspeye (préparation audio)
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Obtenir des données de la base de données via ODBC avec Python (Access)
Réalisez une maison super IoT en acquérant des données de capteur dans la maison avec Raspberry Pi
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Communication série avec Raspberry Pi + PySerial
[Python] Obtenez des données économiques avec DataReader
Configuration du système d'exploitation avec Raspberry Pi Imager
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Remarque: je souhaite faire de la domotique avec Home Assistant + Raspberry Pi + capteur # 1
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
Obtenez des données supplémentaires vers LDAP avec python
Mesurer la force du signal SIM avec Raspberry Pi
Surveillance des animaux avec Rekognition et Raspberry pi
[Note] Obtenir des données de PostgreSQL avec Python
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Obtenez des données de Cloudant avec le flacon Bluemix
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Utiliser le capteur Grove avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Exécuter le servomoteur SG-90 avec Raspberry Pi
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Modèle Infer Custom Vision avec Raspeye
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Obtenez des données d'un oscilloscope avec pyVISA
Créez un compteur de voiture avec Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Travailler avec le GPS en Python pour Raspberry Pi 3
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!