====== 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)