Table des matières

Bluetooth 2.0 Module V3 For Arduino

Le 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 wiki de DFRobot indique une partie de la procédure à suivre pour initialiser le module. Il faudra fouiller la datasheet du CSR B C417143, embarqué dans le TEL0026, pour trouver et comprendre les subtilités.

Prérequis pour initialiser un module

Procédure

Il faut mettre le module Bluetooth en “AT Mode” (voir cette photo). On peut utiliser le programme Arduino pour communiquer avec le module. Voici les paramètres qu'il faut utiliser :

 ( 38400 bauds , CR + NL ) ( 38400 bauds , CR + NL )

Commandes AT

Listes des commandes AT

Toutes les commandes se trouvent dans la 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 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é :

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.

Sources