Module bluetooth HC-06 et Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Module bluetooth HC-06 et Arduino

Messagepar tiptop » Lun 13 Jan 2014 20:49

Module bluetooth HC-06 et Arduino

Image..Image

Composants utilisés

Principe de fonctionnement
Le module bluetooth HC-06 ajoute une fonction de communication par bluetooth à votre carte Arduino. Il peut ainsi communiquer sans fil à moyenne distance avec n'importe quel autre dispositif bluetooth (ordinateur, téléphone mobile, second module bluetooth sur une autre carte Arduino...).

Caractéristiques
  • Module de type JY-MCU / HC-06 Master
  • Paramétrage par défaut du port série: 9600, N, 8, 1.
  • Le baudrate est paramétrable de 4800 à 1382400 (par commande AT, uniquement si le module n'est pas associé, et maxi 115200 pour pouvoir l'utiliser avec une carte Arduino).
  • Alimentation de 3.3 à 5V DC
  • LED indicatrice : statut de connexion.
  • Fonctionnement bluetooth sur la bande 2.4 GHz, modulation GFSK.
  • Le module est appairé avec un mot de passe (1234) modifiable.

Détails techniques du module
  • PIO8 est branchée sur une cathode de LED avec une résistance de 470 Ohm en série. Le moins de la LED se branche à la masse . Utilisé pour indiquer l'état de fonctionnement du module selon le type de clignotement de la LED après mise sous tension.
  • PIO9 est utilisé pour contrôler la LED de contrôle qui indique l'appariement . Elle reste éclairée en continu quand l'appariement est réalisé.
  • PIO11, pin d'état du module . HIGH -> réponse à une commande AT ; LOW ou flottant-> statut de fonctionnement régulier.
  • Avec un circuit de reset intégré, le reset est automatiquement activé à la mise sous tension.

Câblage à réaliser
Module HC-06 (4 pins) --> Arduino
  • VCC –> +5V
  • GND –>GND
  • TXD –> Pin 0 (RX) vert
  • RXD –> Pin 1 (TX) noir
Image

Important
  • Il faut croiser Rx et Tx entre le module et l'Arduino.
  • L'utilisation de Pin0 et Pin1 sur la carte Uno ne permet pas d'utiliser le serial monitor du PC en même temps, ni de téléverser (donc penser à débrancher ces 2 fils pour téléverser le code par le câble USB).
    Sinon, utiliser par exemple TxD=pin10, RxD=pin11.

Le code d'émission de données bluetooth pour l'Arduino
Code: Tout sélectionner
//********************************************************
//  Module de communication BlueTooth HC-06 avec Arduino
//    Rolland 11 01 2014
//    tiptopboards.com
// Programme de démo, le module HT-06 envoie des nouvelles données
// chaque seconde au PC
//
//********************************************************
 int counter = 0;
 unsigned long time;
 
void setup() {
    Serial.begin(9600); //Module bluetooth par défaut 9600, N, 8, 1
    pinMode(13, OUTPUT);   //Led 13 de témoin OK
}
 
void loop() {
    digitalWrite(13, HIGH);   // LED 13 ON
    delay(100);             
    digitalWrite(13, LOW);    // Off
     
    Serial.print("Test module HC-06 bluetooth ");
    Serial.print(++counter);
    Serial.print(" " );
    time = millis();
    Serial.println(time);
    delay(1000);  //Un envoi de données par seconde
}

======================================================================================================================================

Installation du côté de votre PC
S'il l'ordinateur pas pourvu d'origine d'une connectivité blutooth, lui ajouter un petit dongle Bluetooth sur un port USB et installer le driver correspondant.

Vérifier que le bluetooth du PC est présent et actif :
Avec Windows7 : Ordinateur / Propriétés système / Gestionnaire de périphériques / Cartes réseau / Périphérique bluetooth.
Image
L'icône bluetooth doit se trouver dans la barre en bas de l'écran.

Montage du module avec Arduino
Brancher le module HC-06 sur la breadboard. L'Arduino est alimenté en 9V par sa prise jack.
La led rouge du module clignote rapidement quand il n'est prêt mais pas appairé. Elle est stable quand il est jumelé à un autre dispositif bluetooth.

Image
Cliquer sur le PC l'icône bluetooth et choisir le menu "Ajouter un périphérique".
Image
Le PC reconnaît "HC-06 bluetooth", le choisir dans la liste et l'apparier.

Choisir "Entrer le code de couplage du périphérique" (qui n'a pas de clavier) et taper 1234.
Le PC valide ce périphérique et l'ajoute "Votre périphérique et prêt à être utilisé".
Le mot de passe par défaut pourra être modifié ensuite.
Image
Le module apparaît dans la liste des dispositifs bluetooth disponibles (avec le téléphone mobile, le GPS, et divers autres bluetooth situés à proximité de l'ordinateur).

Dans ses "Propriétés" le module a un "Service : Port série SPP" (Serial Protocol via Bluetooth), par exemple ici "COM 12" (c'es un port Com virtuel).
Port COM13 = Entrant, et COM 12 = Sortant.
Bien noter le numéro du port utilisé pour la suite.
ImageImageImageImage

======================================================================================================================================

Console série sur l'ordinateur
Pour que le PC puisse communiquer par bluetooth avec le module, il lui faut une console série.
Dans les dernières versions de Windows comme Vista et Win7, "WindowsTerminal" n'est plus disponible. On peut le récupérer d'un vieux XP, ou installer gratuitement une autre console : Putty, ou Termite par exemple.

Lancer et régler le logiciel PUTTY
Télécharger Putty.
Dans son menu Category / Session/ Basic Options, configurer COM12, serial, 9600 bauds.
Image
Dans le menu Category / Serial/ paramétrer Serial line to connect = COM12, speed = 9600 baud, data bits=8, stop bit=1, parity=none, Flow Xi=on/Xoff.
Image
Puis lancer l'écoute sérielle avec Open.
Le module en mode maître cherche automatiquement le module esclave et se connecte.
La led du module bluetooth passe en allumé constant, il est alors connecté : Module -> Ordinateur

On récupère ainsi les données exportées par le module.
Image

Dans Category / Session / Login on peut choisir Session loggin = all session output, pour récupérer en fichier texte les données envoyées par le module blutooth (enregistrées dans le fichier putty.log).
Image

Lancer et régler le logiciel Termite 3.0
On peut aussi utiliser le logiciel Termite 3.0 de CompuPhase qui permet d'envoyer et de recevoir des données de communication RS232 (série).
Son interface plus agréable présente une coloration différente pour les données transmises (bleu) et reçues (vert).
L'interface est de type "programme de Chat". En bas de l'écran de Termite, la barre permet de taper des commandes.
Des plugins permettent l'horodatage des messages reçus, un fichier INI mémorise la configuration du port série de Termite, etc...

Réglages
Dans le Menu Settings, commencer par paramétrer le port série (port = Com 12, baud=9600, 8data, 1 stop, no parity).
Image
Le logiciel sur le PC reçoit les données du module bluetooth et les affiche en vert (avec horodatage si on l'a activé).
Image
=================================================================================================================

Envoi de commandes AT au module Bluetooth
Une fois connecté (led allumée fixe), le module est en mode "transparent", et n'accepte plus les commandes AT. Ces commandes sont alors transmises directement au microcontrôleur.
Les commandes AT sont à envoyer avant l'appariement.
Ne pas les terminer par \r \n (retour chariot, nouvelle ligne) avec ce module HC-06.

Ce code Arduino envoie des commandes AT et affiche la réponse du HC-06 sur le monitor série du PC.
Code: Tout sélectionner
//**********************************************
// Module bluetooth HC06  envoi de commandes AT
// et affichage de la réponse du module
// D'après http://nicolasz68.blogspot.fr/2012/09/module-bluetooth-jy-mcu-v104-pour.html
//
//
//***********************************************/* 
#include <SoftwareSerial.h>  //Software Serial Port 
#define RxD 10    //Pin 10 pour RX (pin0=serial) vert
#define TxD 11    //Pin 11 pour TX, on peut changer noir
SoftwareSerial BTSerie(RxD,TxD); 

void setup() 

  Serial.begin(9600);    //115200 si on veut
  delay(500); 
  Serial.println("Bonjour - Pret pour les commandes AT"); 
  // Configuration du bluetooth 
  pinMode(RxD, INPUT); 
  pinMode(TxD, OUTPUT); 
  BTSerie.begin(9600);  //57600
  delay(500); 
  BTSerie.print("AT+VERSION");  //Demande le N° de version
  delay(1000); 
  // BTSerie.print("\n"); 

void loop() 

  char recvChar; 
  //On lit caractere par caractere sur le BTSerie et on affiche sur le Terminal Serie 
  if (BTSerie.available()) { 
    recvChar = BTSerie.read(); 
    Serial.print(recvChar); 
  } 
  // Serial.write(blueToothSerial.read()); 
  if (Serial.available()) { 
    recvChar = Serial.read(); 
    BTSerie.write(recvChar); 
  } 



Image

Commande de Test :
  • AT Réponse : ATOK
  • Version du module : AT+VERSION, Réponse : linvorV1.8 pour notre module.
  • Changer la vitesse :AT+BAUD4 (4 pour 9600, 5 pour 19200, 6 pour 38400, 7 pour 57600)
    La modification du baud rate prend effet seulement après redémarrage du module.
  • Changer le nom : AT+NAMEnom
  • Changer le mot de passe :AT+PINnnnn

======================================================================================================================================


Références
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Module bluetooth HC-06 et Arduino

Messagepar fbedon » Sam 17 Nov 2018 13:25

Le programme proposé marche très bien.
j'utilise l'appli sur portable "bluetooth electronics" trs intuitif, on fait sa propre interface en 5 minutes.
a commander les yeux fermés !
Fred
Avatar de l’utilisateur
fbedon
 
Messages: 25
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble

Re: Module bluetooth HC-06 et Arduino

Messagepar fbedon » Dim 5 Mai 2019 08:47

Salut à tous,
pour aller plus loin encore que le super boulot que présente Christian...
Sur PC windows comment peut-on déterminer le numéro des ports COM associés à la liaison Bluetooth ?
Car dans le temps, avec les changements environnements,(branchements Arduino, autre module BT...) ce numéro a toute les chances de changer.
Quelqu'un a déjà fait ça ?

Voici le code C++ Builder pour énumérer les port COM présent, le test est prévu pour trouver un Arduino MEGA, c'est facile à modifier pour un autre type.
je vais essayer de le faire pour module BT et en langage Windev.

DCB dcbCommPort;
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVCLASS_PORTS,
0, // Enumerator
0,
DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
// return ;
}
// Enumerate through all devices in Set.
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;

//
// Call function with null to begin with,
// then use the returned buffer size (doubled)
// to Alloc the buffer. Keep calling until
// success or an unknown failure.
//
// Double the returned buffersize to correct
// for underlying legacy CM functions that
// return an incorrect buffersize value on
// DBCS/MBCS systems.
//
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_HARDWAREID,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
// soit
// buffer = (char*)LocalAlloc(LPTR, buffersize * 2);
// ou
buffer = (PCHAR)LocalAlloc(LPTR, buffersize * 2);
}
else
{
// Insert error handling here.
break;
}
}

// On véréfie si c'est le bon hardware
// arduino Mega VID_2341&PID_0042
if(strnicmp(buffer, "USB\\VID_2341&PID_0042", 21) == 0)
{
HKEY hKey;
char szPortName[256] = "";
char PortName[20] = "";
DWORD len = 256;
hKey = SetupDiOpenDevRegKey(hDevInfo, &DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
RegQueryValueEx(hKey, "PortName", NULL, NULL, szPortName, &len);
RegCloseKey(hKey);

AnsiString COM = "\\\\.\\" + AnsiString(szPortName);
sprintf(PortName,"\\\\.\\%s",szPortName);

Form1->Memo1->Lines->Add("Connection à " + COM);



Fred
Avatar de l’utilisateur
fbedon
 
Messages: 25
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble

Re: Module bluetooth HC-06 et Arduino

Messagepar fbedon » Sam 18 Mai 2019 17:42

Salut à tous,
je n'ai pas beaucoup travaillé sur le problème de l'énumération des ports COM, car je butte sur un souci de fonctionnement avec W10.
je vois bien 2 ports COM virtuels qui correspondent à mon module BT couplé, mais quand j'établis une communication avec l'un des 2 ports (IDE arduino ou Realterm) je n'ai pas le résultat attendu, la connexion du module, ça marche bien en XP, en W10... pour le moment non.
Qui aurait une idée pour contourner cette difficulté ?
Fred
Avatar de l’utilisateur
fbedon
 
Messages: 25
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble

Re: Module bluetooth HC-06 et Arduino

Messagepar fbedon » Jeu 23 Mai 2019 20:44

en fait, il arrive que les 2 port com ne soient pas créés automatiquement, il faut le faire à la main.
il faut cocher Sortant (le PC établis la com)
on obtient un truc du genre :
Com7 Sortant Hc06'Dev B'
quand on se connecte à ce port la liaison passe en connectée.
Fred
Avatar de l’utilisateur
fbedon
 
Messages: 25
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble

Re: Module bluetooth HC-06 et Arduino

Messagepar fbedon » Lun 27 Mai 2019 20:26

Salut
en fait, maintenant sur l'un des PC quand j'active une carte BT HC-06 il ne cré pas de port et en plus je ne peux plus ajouter le com sortant appelé Hc06'Dev B'... qui aurait une idée de la cause ?
redémarrage PC, suppression HC06 et rajout rien n'y fait.
Fred
Avatar de l’utilisateur
fbedon
 
Messages: 25
Inscription: Mer 21 Mai 2014 19:56
Localisation: Grenoble


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités