====== Bluetooth 2.0 Module V3 For Arduino ======
Le [[https://www.dfrobot.com/product-360.html|Bluetooth 2.0 Module V3 For Arduino]] est un module bluetooth de chez DFRobot de classe 2 (portée ~10m). J'en ai acheté deux pour établir une communication entre un robot et sa télécommande.
===== Initialisation =====
Le [[https://www.dfrobot.com/wiki/index.php/DF-BluetoothV3_Bluetooth_module_(SKU:TEL0026)|wiki de DFRobot]] indique une partie de la procédure à suivre pour initialiser le module. Il faudra fouiller la [[http://image.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf|datasheet du CSR B C417143]], embarqué dans le TEL0026, pour trouver et comprendre les subtilités.
==== Prérequis pour initialiser un module ====
* Un [[https://www.dfrobot.com/product-104.html|USB to TTL Converter (CP210)]] - J'utilise un clone de celui de DFRobot.
* Un terminal série ( le logiciel arduino, minicom, ... )
==== Procédure ====
Il faut mettre le module Bluetooth en "AT Mode" (voir [[http://simonlefort.be/images/photos/Artanux/Projet-Cosmo/20170419-reunion-caliban/IMG_20170419_215543.jpg|cette photo]]). On peut utiliser le programme Arduino pour communiquer avec le module. Voici les paramètres qu'il faut utiliser :
{{ ::20170419-arduino-console.png?400 | ( 38400 bauds , CR + NL ) }}
( 38400 bauds , CR + NL )
==== Commandes AT ====
=== Listes des commandes AT ===
Toutes les commandes se trouvent dans la [[http://image.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf|datasheet du TEL0026]], voici un aperçu :
at
OK
at+init //initialiser le SPP
OK
at+name? //demander le nom du module
+NAME:H-C-2010-06-01 //après une remise aux paramètres par défaut, sinon "+NAME:BluetoothV3"
OK
at+name=cequonveut //Donner un nom au module
OK
at+role? //demander le rôle du module
+role:0 // 0 = slave , 1 = master
OK
at+role=0 //donner le rôle "slave" au module
OK
AT+PSWD? //Demander le mot de passe de "pairing"
+PSWD:1234
OK
AT+ORGL //Réinitialiser les paramètres par défaut
OK
AT+UART? //Demander les paramètres de l'UART
+UART:38400,0,0
AT+UART=38400,0,0 //Choisir les paramètres de l'UART
OK //Param1: baud rate (bits/s) 4800/ 9600/ 19200/ 38400/ 57600/ 115200/ 230400/ 460800/ 912600/ 1382400
//Param2: stop bit , 0- 1 bit/ 1- 2 bits
//Param3: parity bit, 0- None/ 1- Odd/ 2- Even
AT+RESET //reset du module (équivalent à l'éteindre/rallumer)
Return: OK
AT+ADDR? //demander l'adresse du module
+ADDR:12d5:42:307864
OK
AT+INQM=1,9,48 //Inquire mode: RSSI, max number 9, timeout 48)
* OK
AT+IAC? //
+IAC:9e8b33
OK
Input: AT+SENM? //
+SENM:0,0
OK
=== Erreurs possibles ===
La page 16/23 du [[http://image.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf|datasheet du TEL0026]] donne la liste des erreurs possibles.
Error_code (hex) | Explanation
------------------------------------------------------------------------
0 | AT command error
1 | The result is default value
2 | PSKEY write error
3 | Device name is too long (more than 32 bytes)
4 | Device name is 0 byte
5 | Bluetooth address: NAP is too long
6 | Bluetooth address: UAP is too long
7 | Bluetooth address: LAP is too long
8 | PIO port mask length is 0
9 | Invalid PIO port
A | Device class is 0 byte
B | Device class is too long
C | Inquire Access Code length is 0
D | Inquire Access Code is too long
E | Invalid Inquire Access Code
F | Pairing password is 0
10 | Pairing password is too long (more than 16 bytes)
11 | Role of module is invalid
12 | Baud rate is invalid
13 | Stop bit is invalid
14 | Parity bit is invalid
15 | No device in the pairing list
16 | SPP is not initialized
17 | SPP is repeatedly initialized
18 | Invalid inquiry mode
19 | Inquiry timeout
1A | Address is 0
1B | Invalid security mode
1C | Invalid encryption mode
===== Configuration de deux modules =====
Pour faire la configuration de ces deux modules en même temps, j'ai utilisé :
* deux ordinateurs avec le logiciel arduino (mais n'importe quel programme de terminal série peut convenir)
* deux adaptateurs USB to TTL (exemples : [[https://www.dfrobot.com/product-104.html|dfrobot]], [[https://www.adafruit.com/product/954|adafruit]], [[http://www.farnell.com/datasheets/81225.pdf|farnell]], ...)
* deux modules bluetooth (deux [[https://www.dfrobot.com/product-360.html|TEL0026 de DFRobot]] dans mon cas)
==== Cosmo (slave) ====
at
OK
at+init
OK
at+state?
+STATE:INITIALIZED
at+name=cosmo
OK
at+name?
+NAME:cosmo
at+role=0
OK
at+role?
+ROLE:0
at+addr?
+ADDR:98d3:32:302390
at+uart=38400,0,0
OK
at+uart?
+UART:38400,0,0
at+iac?
+IAC:9e8b33
at+cmode?
+CMOD:0
at+inq
OK
at+bind?
+BIND:0:0:0 //pas d'adresse configurée
at+bind=98d3,32,20222e //"bind" avec l'adresse du module master
OK
at+state?
+STATE:PAIRABLE
==== Commande (master) ====
at
OK
at+init
OK
at+state?
+STATE:INITIALIZED
at+name=commande
OK
at+name?
+NAME:commande
at+role=1
OK
at+role?
+ROLE:1
at+addr?
+ADDR:98d3:32:20222e
at+uart=38400,0,0
OK
at+uart?
+UART:38400,0,0
at+iac?
+IAC:9e8b33
at+cmode?
+CMOD:0
at+inq
+INQ:98D3:32:302390,0,7FFF //le module bluetooth slave!! (adresse, classe, RSSI)
at+rname?98d3,32,302390 //demander le nom du module slave
+RNAME:cosmo //nom du module bluetooth slave
at+bind?
+BIND:98d3:31:300e42 //adresse inconnue
at+bind=98d3,32,302390 //"bind" avec l'adresse du module slave
OK
at+bind?
+BIND:98d3:31:300e42 //adresse du module slave
at+pair=98d3,32,302390,30 //se connecter au module slave (avec timeout de 30s)
OK
at+state?
+STATE:PAIRED //yes!
at+mrad? //voir le dernier module connecté
+MRAD:98d3:32:302390 //c'est bien le slave
at+fsad=98d3,32,302390 //voir si le module slave est dans la liste des modules authentifiés
OK //OK = oui
at+link=98d3,32,302390 //faire le lien avec le module slave
OK
(réception de ce que le module slave envoit!)
==== Programmes Arduino ====
Maintenant que nous avons configurés deux modules pour qu'ils se connectent ensemble, nous pouvons les utiliser chacun sur une Arduino et faire communiquer les deux Arduino ensemble.
* [[allumer une led via bluetooth]]
* [[Gestion de 3 leds via bluetooth]]
===== Sources =====
* [[https://learn.sparkfun.com/tutorials/bluetooth-basics/how-bluetooth-works|How Bluetooth Works (sparkfun.com)]]
* [[http://image.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf|Datasheet du TEL0026]]
* [[https://fr.wikipedia.org/wiki/Received_Signal_Strength_Indication|RSSI (wikipedia.org)]] (mesure de la qualité du signal)