L’Internet des Objets

L’Internet des Objets

6.4 Communication bluetooth

Page précédente Page suivante

6.4.1 Les caractéristiques

Pour envoyer la température en utilisant le service environnemental et la caractéristique température, il est possible d’utiliser l’exemple de \( \mu \)Python : ble_temperature.py. La température est censée être obtenue par ailleurs (par exemple, section 6.3).

import ble\_temperature

ble = bluetooth.BLE()
temp = ble\_temperature.BLETemperature(ble)

temp.set\_temperature(t*100, notify=i == 0, indicate=False)

6.4.2 STM32Gitlab

Nous allons utiliser le site https://stm32python.gitlab.io pour commencer. Il permet de prendre en main la carte avec de nombreux exemples. En particulier, la transmission de paramètres environnementaux en BLE.

Nous allons récupérer depuis ce site quatre fichiers :

ble_advertising.py

permet de générer des annonces BLE.

ble_sensor.py

envoie les données environnementales en BLE.

HTS221.py

Humidity and temperature, licence MIT, auteur : Shaoziyang.

LPS22.py

Pression, licence MIT, auteur : Shaoziyang.

En micropython, le fichier main.py semble être lancé à l’initialisation. Pour manipuler simplement les fichiers, il est possible d’utiliser un éditeur directement sur le périphérique de stockage.

6.4.3 Interaction Avec GNU/Linux

Pour étudier la communication BLE, nous allons utiliser python3 sur une Debian stable. Nous commençons par utiliser hcitool pour détecter la carte :

# hcitool lescan
02:02:27:4E:21:92 WB55-AF-

Puis, nous commençons aveg gatttool.

=> gatttool -b 02:02:27:4E:21:92 -I
[02:02:27:4E:21:92][LE]> primary
attr handle: 0x000a, end grp handle: 0x000e
  uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x000f, end grp handle: 0x0012
    uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x0013, end grp handle: 0xffff
     uuid: 00000000-0001-11e1-ac36-0002a5d5c51b
[02:02:27:4E:21:92][LE]> characteristics
Command Failed: Disconnected
[02:02:27:4E:21:92][LE]> connect
Attempting to connect to 02:02:27:4E:21:92
Connection successful
Notification handle = 0x0015 value: 50 4b 10 85 01 00 f4 01 ec 00
[02:02:27:4E:21:92][LE]> characteristics
handle: 0x000b, char properties: 0x02,
  char value handle: 0x000c,
  uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x000d, char properties: 0x02,
  char value handle: 0x000e,
  uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0010, char properties: 0x20,
  char value handle: 0x0011,
  uuid: 00002a05-0000-1000-8000-00805f9b34fb
handle: 0x0014, char properties: 0x10,
  char value handle: 0x0015,
  uuid: 001c0000-0001-11e1-ac36-0002a5d5c51b
handle: 0x0017, char properties: 0x18,
   char value handle: 0x0018,
   uuid: 20000000-0001-11e1-ac36-0002a5d5c51b
Notification handle = 0x0015 value: 04 4c 10 85 01 00 ea 01 ec 00
Notification handle = 0x0015 value: 0e 4c 10 85 01 00 ea 01 eb 00
...

Les données envirronementales sont envoyées sur 2 octets :

Dans l’ordre, nous avons :

timestamp

\( \mathrm {0E_{16}} = 14 \), soit 10 secondes entre les deux affichages.

pressure

?

humidity

] \( \mathrm {0352_{16}} = 850 \), l’humidité etait de 85%.

temperature

\( \mathrm {00EB_{16}} = 235 \), la température était de 23,5C.

Pour préparer l’utilisation de python BLE, il faut ajouter le paquet pip (apt install python3-pip, puis (pour le moment) demander l’installation du paquet bluepy :

apt install libglib2.0-dev
pip3 install bluepy

Maintenant le python :

from bluepy import btle
dev = btle.Peripheral("02:02:27:4E:21:92")

La console affiche connected. La connexion est établie.

Sensor1 = btle.UUID("00001800-0000-1000-8000-00805f9b34fb")
Service1 = dev.getServiceByUUID(Sensor1)
ch=Service1.getCharacteristics()[0]
v=ch.read()


6.4.4 Gestion du temps

Redirigé vers : 6.2.2

https://docs.micropython.org/en/latest/library/time.html https://pythonhosted.org/pyserial/

6.4.5 Connexion vers un microcontroleur distant

Si le microcontrôleur est distant, pour pouvoir le gérer facilement, il y a plusieurs possibilités. Classiquement, il est connecté sur un port série (éventuellement USB). Il peut apparaître comme un périphérique série (modem ou UART). Il peut aussi se comporter comme un mass storage. Il peut aussi apparaître comme une souris, un clavier ou des choses plus surprenantes.

Questions :

  • 1. comment initialiser la carte sans appuyer sur le bouton ? surtout que après un reset, il faut remonter le périphérique...

  • 2. Comment est définie l’adresse MAC ?

Page précédente Page suivante