Module HC-05

Bonjour,

J'essaie de faire fonctionner un module bluetooth HC-05 pour ce faire, j'ai besoin d'accéder aux commandes AT.

J'ai suivis plusieurs tutoriels (http://www.instructables.com/id/HOW-TO-HC-05-Bluetooth-MODULE-AT-Commands-With-But/ en particulier)

J'ai donc a priori suivis les indications à la lettre mais je n'arrive pas à obtenir une quelconque réponse du module.

  • J'ai bien un clignotement d'environ 2sec de la part du module BT m'indiquant que celui-ci se trouve en mode AT (ce qui donc devrait me permettre de me servir des commandes AT au biais de Tera Term (voir dans le tuto mis en url) mais rien à faire, je n'ai pas la moindre réponse.

Quelqu'un a-t-il déjà fait face à ce problème? Dans la mesure ou le module clignote (rouge donc pas de BT à mon avis) est-ce que cela signifie qu'il est totalement opérationnel ou bien il peut être endommagé etc..?

Merci d'avance!

Votre module est 3.3V ou 5V ? Comment l'avez vous connecté ( avec quel adaptateur ? )

Salut,

Sais tu nous donner tout ton code ? Histoire de voir que tu n'as pas oublier d'initialiser la liaison série par exemple ;).

Tu sais nous donner tes branchements ? Ainsi que le modèle de ton module ? Comme J-M-L le précise, certains sont en 5v et d'autres en 3.3V.

Renaud

Bonjour,

J'ai branché le Vcc du module au 3.3V de la MEGA (j'ai pu voir cependant sur le net que pour le module utilisé, il était préférable de le brancher au 3.3V, bien qu'il était possible de le brancher sur le 5V grâce aux régulateurs de tensions internes.

Pour les autres branchements :

  • Le GND du module branché au GND de la MEGA
  • Le TXD du module branché au RX2 (pin 17) de la MEGA
  • Le RXD du module branché au TX2 (pin 16) de la MEGA

Je joins également le code utilisé (trouvé sur le net lui aussi)

//**********************************************
// 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 17    //Pin 17 pour RX 
#define TxD 16    //Pin 16 pour TX
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.println(recvChar);  
  }  
  if (Serial.available()) {  
    recvChar = Serial.read();  
    BTSerie.write(recvChar);  
  }  
}

Ce que je constate est que le module n'est jamais passé en mode AT. En revanche je suis capable d'envoyer des chaines de caractères passant par la carte arduino à destination de mon smartphone en utilisant l'application "Bluetooth Terminal HC-05" que vous connaissez probablement. Le chemin inverse n'opère pas : impossible d'envoyer une chaine de caractères depuis mon téléphone vers la carte en passant par le module Bluetooth (ce que je souhaite faire..)

Cela répond-il aux précisions que vous m'avez demandé?

Bonjour,

Tu as quoi comme module HC-05?

Suivant les modules le moyen pour passage en mode AT est différent.
Sur les miens il faut maintenir le bouton poussoir appuyé pendant la mise sous tension.

Bonjour kamill,

Il est écrit "ZS-040" sur le module.

J'ai également connaissance de cette manipulation pour passer en mode AT. Il existe aussi un moyen via la pin "KEY" or mon module ne dispose pas d'une telle pin.

Cela dit le problème semble se tourner vers la disponibilité inexistante du module..

Lorsque je rentre "AT" dans la console, sachant que le module est bien en mode AT (en témoigne la led du module) je devrais avoir un "OK" en retour dans la console mais il n'en est rien..

Il ressemble aux miens. Sur le mien en mode AT, la vitesse est toujours à 38400 bds, même si la vitesse de transmission est paramétrée à 9800bds

Donc par exemple si tu te mets en mode AT et que tu tapes "AT" sur l'ordi tu as bien droit à un "OK" de la part du module?

oui
quelquefois ça ne marche pas avec le 1er AT (caractères parasites à la lise sous tension ?), mais si je retapes la commande AT j'ai bien le OK.

Je ne suis pas parvenu à un tel résultat...

Si j'en reviens au code que j'ai partagé avec vous, j'ai remarqué que le booléen "BTSerie.available()" restait à 0 quoiqu'il arrive. J'en déduis donc que le module Bluetooth n'est pas disponible (champion!) mais pourtant il est en mesure d'envoyer des informations, puisque "Serial.available() >0"..

De plus le résultat de la ligne "BTSerie.print("AT+VERSION"); //Demande le N° de version" me retourne à l'écran de mon téléphone la chaine de caractères "AT+VERSION" donc le module ne passe pas en mode AT.

Je me demandais, est-il possible d'utiliser la communication BT pendant que le module est en mode AT?

Ce que je ne comprends pas c'est que tu utilises les pins de RX/TX2 pour le SoftwareSerial

  • soit tu utilises le hardware serial Serial1 ou Serial2 ... (conseillé)
  • soit tu utilises SoftwareSerial et il ne faut pas utiliser les pins rx2/tx2

Dans ce cas quelle serait la correction à effectuer? (je me permets de rappeler que j'ai remis dans le nez dans le langage C depuis moins d'un mois et que mes derniers cours datent de la première S..)

Qu'est-ce que le hardware serial Serial1 etc?

Serial1, Serial2, ... c'est les liaisons série hard qui correspondent aux pins TX1/RX1, TX2/RX2

Tu supprimes la déclaration de BTSerie et tu remplace BTSerie par Serial2

Si tu ne veux pas trop modifier ton source tu peux utiliser un #define

//SoftwareSerial BTSerie(RxD,TxD);
#define BTSerie Serial2

et supprimes le pinMode pour RsD/TxD (il est d'ailleurs aussi inutile avec SoftareSerial)

Ceci dit si tu recois ce que tu émets sur un terminal bluetooth, à mon avis tu n'es pas en mode AT

J'ai effectué la modification et je n'ai plus moyen d'envoyer de chaîne de caractère de l'ordinateur au smartphone, et toujours pas moyen de faire le chemin inverse..

//**********************************************
// 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 15    //Pin 17 pour RX 
#define TxD 14    //Pin 16 pour TX

SoftwareSerial BTSerie(RxD,TxD);  

#define BTSerie Serial2

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.println(recvChar);  
  }  
  if (Serial.available()) {  
    recvChar = Serial.read();  
    BTSerie.write(recvChar);  
  }  
}

Je vois que tu as deux définitions de BTSerie vire SoftwareSerial.
Tu es bien connecté sur TX2/RX2?

Les branchements sont corrects et le tout fonctionne! Merci beaucoup!!!

Bravo! :slight_smile: