// ------------------------------------------------------------------ |
On va lire les données du capteur de température et d'humidité et on les envoie sur le port série. |
Il est possible de faire l'appairage de l'Arduino en utilisant l'interface Graphique de Raspian mais du fait que l'accès à la Raspberry est souvent fait par SSH, nous ne détaillerons que l'installation en ligne de commande.
De base la version Raspbian contient un module de gestion Bluetooth, ceci dit si ce n'est pas le cas il est possible de le rajouter en tapant en ligne de commande :
sudo apt-get install bluetooth pi-bluetooth blueman
Vérification de l'install du manager bluetooth :
hciconfig
hci0: Type: Primary Bus: UART
BD Address: B8:27:EB:29:46:68 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:1637 acl:0 sco:0 events:113 errors:0
TX bytes:7976 acl:0 sco:0 commands:113 errors:0
hci0 > correspond à notre adaptateur Bluetooth
Lancement de la découverte des périphériques bluetooth (le module de l'Arduino) en utilisant l'interface de commande Bluetooth bluetoothctl :
bluetoothctl
[NEW] Controller B8:27:EB:29:46:68 raspberrypi [default]
[bluetooth]# agent on
Agent registered
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:29:46:68 Discovering: yes
[NEW] Device 00:0E:EA:CF:22:8E 00-0E-EA-CF-22-8E
[CHG] Device 00:0E:EA:CF:22:8E LegacyPairing: no
[CHG] Device 20:17:04:24:91:15 Name: HC-05
...
20:17:04:24:91:15 correspond à l'identification du périphérique. On va utiliser cette identification par la suite (la votre peut bien évidement être différente).
Pour que la Raspberry puisse utiliser l'Arduino par la connexion bluetooth il est nécessaire de faire l'appairage du périphérique avec la commande :
[bluetooth]# pair 20:17:04:24:91:15
Attempting to pair with 20:17:04:24:91:15
[CHG] Device 20:17:04:24:91:15 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 20:17:04:24:91:15 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device 20:17:04:24:91:15 ServicesResolved: yes
[CHG] Device 20:17:04:24:91:15 Paired: yes
Pairing successful
[CHG] Device 20:17:04:24:91:15 ServicesResolved: no
[CHG] Device 20:17:04:24:91:15 Connected: no
[CHG] Device 20:17:04:24:91:15 RSSI: -73
Connexion à l'Arduino :
[bluetooth]# connect 20:17:04:24:91:15
Attempting to connect to 20:17:04:24:91:15
[CHG] Device 20:17:04:24:91:15 Connected: yes
[CHG] Device 20:17:04:24:91:15 ServicesResolved: yes
Vérification de l'appairage à l'Arduino :
[bluetooth]# info 20:17:04:24:91:15
Device 20:17:04:24:91:15
Name: HC-05
Alias: HC-05
Class: 0x001f00
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: yes
UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)
RSSI: -46
La ligne UUID indique que l'Arduino utilise un port série.
Il est possible d'avoir la liste des périphériques appairés en tapant la commande : paired-devices
Les deux périphériques sont maintenant associés. Cela signifie qu'il sont donc capable de communiquer en utilisant le Bluetooth, il reste encore à mettre en place un protocole de communication pour qu'ils puissent échanger des données comme sur un port série.
La commande :
rfcomm connect 0 20:17:04:24:91:15 &
permet de connecter le module HT-50 à la Raspberry.
Afin de ne pas perdre la connexion bluetooth entre le raspberry Pi et le module HT-50 à chaque reboot, il faut rajouter dans la tache cron, on va créer un fichier de commande qui sera exécuté :
vi reconnectionBluetooth.sh
#/bin/sh
rfcomm connect 0 20:17:04:24:91:15 &
Dans les tâches cron de root, on rajoute :
sudo crontab -e
@reboot sh /home/pi/reconnectionBluetooth.sh
Iinstallation des librairies "serial" et "bluez" sur la Raspberry Pi :
sudo apt-get install python-serial python-bluez
Le programme Python suivant permet d'envoyer une commande à notre Arduino pour faire clignoter la led :
vi bluetooth_serial_test.py
et taper les lignes :
#! /usr/bin/python
import serial
from time import sleep
bluetoothSerial = serial.Serial( "/dev/rfcomm0", baudrate=9600 )
# On envoie la commande de recuperation de temperature et humidite
bluetoothSerial.write( str("0") )
print bluetoothSerial.readline()
Execution du programme :
python bluetooth_serial_test.py