Connection de modules bluetooth (maitre/esclave)

Bonjour
Je travaille actuellement sur un projet de control à distance de servomoteur (HC05 Maitre, HC06 Esclave) avec 2 cartes arduino nano

Mon soucis :

  • Je n'arrive pas à connecter les deux modules ensemble, faut-il 2 programmes bien défini, un pour le maitre l'autre pour l'esclave?
  • je n'arrive à envoyer les commandes AT que sur le HC05, du coup impossible de renommer le HC06...

La seule chose que j'arrive à faire, c'est de me connecter ainsi que d'envoyer des données à mon HC06 esclave, à l'aide d'une appli android sur mon smartphone..
Quelqu'un aurait il une idée? Apparemment le HC05 ne fonctionne qu'en vitesse 38400 pour les commande AT? et pas 9600, tout n'est pas clair la dessus..

arduinoreg:
Bonjour
Je travaille actuellement sur un projet de control à distance de servomoteur (HC05 Esclave, HC06 Maitre)

Mon soucis :

  • Je n'arrive pas à connecter les deux modules ensemble, faut-il 2 programmes bien défini, un pour le maitre l'autre pour l'esclave?
  • je n'arrive à envoyer les commandes AT que sur le HC05, du coup impossible de renommer le HC06...

La seule chose que j'arrive à faire, c'est de me connecter ainsi que d'envoyer des données à mon HC06 esclave, à l'aide d'une appli android sur mon smartphone..
Quelqu'un aurait il une idée? Apparemment le HC05 ne fonctionne qu'en vitesse 38400? et pas 9600, tout n'est pas clair la dessus..

bonjour
Toi tu n'a pas la doc de base :grin:
attention à bien tout lire , les pieges entre 05 et 06 sont nombreux
http://cjoint.com/14jn/DFgnLlj8u5e_hc03456.pdf

arduinoreg:
(...., HC06 Maitre)

ça me parait compliqué vu que le HC06 n'est fait que pour être un esclave.
Voir ici:
http://forum.arduino.cc/index.php?topic=244516.0

:wink:

john_lenfr:

arduinoreg:
(...., HC06 Maitre)

ça me parait compliqué vu que le HC06 n'est fait que pour être un esclave.
Voir ici:
Arduino Uno & Bluetooth HC-06 - Français - Arduino Forum

:wink:

bonjour john
on va lui faire là le credit de la redaction ... non relue :grin:

edit :
en fait non , je confond arduinoreg et koby04
je crois qu'il a assimilé les # sur son autre topic

Salut Artouste :grin:

Effectivement je n'avais pas vu que c'était le même qui avait écrit dans les 2 posts, mais du coup je me demande s'il a bien assimilé alors? :smiley:

Oui, j'ai posté un autre message lol!
Et bien je veux envoyer des données à un HC06 esclave pour qu'il commande un servomoteur, à l'aide d'un HC05 en mode maitre (branché sur une autre carte arduino), c'est bien possible?
Le soucis, c'est que je n'arrive à envoyer aucune commande AT à mon HC05, alors que pour le HC06, aucun problème

arduinoreg:
Oui, j'ai posté un autre message lol!
Et bien je veux envoyer des données à un HC06 esclave pour qu'il commande un servomoteur, à l'aide d'un HC05 en mode maitre (branché sur une autre carte arduino), c'est bien possible?
Le soucis, c'est que je n'arrive à envoyer aucune commande AT à mon HC05, alors que pour le HC06, aucun problème

ok
les choses etant bien donc ce qu'elles sont :grin:
lis donc et assimile la doc que j'ai mise en lien plus haut

En tout cas c'est intéressant car j'ai justement reçu mes 2 modules HC05 ce midi.
ça sent le bluetooth ce week end! :grin:

Euh, je me suis trompé dans mon 1er message, je voulais bien dire HC05 en mode maitre, et HC06 esclave..
Je vais essayer de lire un peu plus cette doc..

Tu peux regarder ici aussi:
http://www.comm2excel.com/projects/bluetooth_AT_Commands.php?id=17#

Je suis tombé sur cette doc qui a l'air pas mal aussi:
http://www.e-gizmo.com/KIT/images/EGBT-04/EGBT-045MS-046S%20Bluetooth%20Module%20Manual%20rev%201r0.pdf

arduinoreg:
Euh, je me suis trompé dans mon 1er message, je voulais bien dire HC05 en mode maitre, et HC06 esclave..
Je vais essayer de lire un peu plus cette doc..

Il faut la lire completement et surtout l'assimiler pour bien comprendre les "subtiles et importantes 8) " differences, sinon tu ne t'en sortira pas ! :grin:

voir déjà et surtout ce qui traite de la difference des terminateurs entre HC05 et HC06

Justement les terminateurs je ne comprends pas qu'est ce que c'est, tu parles des pin? Key34, 31?

Non de la fin de ligne dans les messages

Ce que j'ai bien compris HC05:

  • Pin 34 HIGH(3,3V) (pin Key à 5V) ==> AT mode baud rate 38400 ==> pin 31 led 1Hz (sauf que ça ne marche pas :frowning: )
  • Pin 34 LOW (0V) (pin Key 0V) ==> mode pour appairer ==> pin 31 led 2 Hz
    Je ne vois aucune différence de variation de vitesse de la led?!

Voici le programme de test pour l'envoie de commande sur le HC05... Et je continue tout de même à lire la doc.. si vous pensez que j'ai mal compris déjà ça, je veux bien être corrigé?
Car je n'ai aucune réponse à chaque commande AT envoyé sur le moniteur serie (même après rajout du terminateur \r\n qui n'est normalement pas necessaire lors de la saisi clavier "If the serial helper is installed, user just need enter “ENTER”)

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
  pinMode(9, OUTPUT);  //HC-05 pin 34 (key pin) 
  digitalWrite(9, HIGH);  // 5V sur Key pour activer le mode commande AT
  Serial.begin(9600);
  Serial.println("AT commandes:");
  BTSerial.begin(38400);  // HC-05 vitesse par défaut pour la commande AT
}

void loop()
{

  // lecture des commandes AT par le serial port(9600)
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // envoie à HC-05 de commandes AT saisi
  if (Serial.available())
    BTSerial.write(Serial.read());
}

J'ai réussi à obtenir quelque chose! :grin:
merci les amis!

Maintenant, une fois les deux modules connectés ensemble, je n'arrive pas à trouver le moyen d'envoyer la valeur d'une variable du maître vers l'esclave qui doit commander mon servomoteur...

Le module Maitre envoie une donnée d'un int "0" ou" 1". Le maitre doit la recevoir..
Voici le code :

Partie Maitre :

#include <SoftwareSerial.h>  
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);  
//=========================================================
void setup()  
{  
  Serial.begin(9600);  
  BTSerie.begin(9600); 
  delay(500);  
}
//====================================================
void loop()  
{  
   int c = 1;                           //variable à envoyer vers l'esclave
   BTSerie.write(c);
   delay(5000);
 }

Partie esclave :

#include <Servo.h> 
#include <SoftwareSerial.h> 
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);
 Servo myservo; 
//========================================================
void setup()
{
  myservo.attach(9); 
  myservo.write(0);
  BTSerie.begin(9600); 
}
//========================================================== 
void loop()
{
   int position1 = 0;
   int position2 = 179; 
   while (BTSerie.available() == 0);
   int c = BTSerie.read();                            //Variable du maître sensée être reçu
     if(c =='1'){
     myservo.write(position1);
     delay(30);
   }
   if(c == '0'){
     myservo.write(position2);
     delay(30);
   }
   delay(500);
}

Cela ne fonctionne pas au moment ou les 2 modules sont connectés (lumière rouge continue sur le HC06..) Avec vous une idée du pourquoi? le HC06 ne reçoit pas la valeur de l'int c au final..
Ce n'est pas de cette façon que l'on peut envoyer une variable d'un module à l'autre?

Avez vous une idée de l'origine du problème? Serait-ce un problème de vitesse de transmission? La transmission d'informations doit se faire en 9600 baud c'est bien ça? La vitesse "38400" (est réservé par défaut pour les commande AT) et ensuite il faut bien la mettre à 9600 dans le code de transmission ? Cela ne marche pas.. =(

La vitesse de transmission dépend de ce que tu as mis comme valeur lorsque tu as configuré tes périphériques bluetooth.
En tous cas une chose est sûre, dans le code que tu as mis au-dessus, tu émets à 38400 et tu reçoit à 9600 ce qui me parait un rien surprenant. Normalement la vitesse par défaut pour les échanges c'est 9600 bauds sur les 2 modules.

Oui, pour la vitesse du code maître je l'ai remis à 9600 pour l'envoie de donnée! Mais ça ne fonctionne pas non plus..

Voici les codes de paramétrage de mes modules que j'ai effectué au préalable..

Paramétrage maître :

#include <SoftwareSerial.h>  //Software Serial Port  
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);

void setup()  
{  
  Serial.begin(9600);  
  delay(500);  
  Serial.print("Bonjour - Pret pour les commandes AT");  
  // Configuration du bluetooth  
  pinMode(RxD, INPUT);  
  pinMode(TxD, OUTPUT);  
  BTSerie.begin(38400);  //necessaire uniquement pour le parametrage des commandes AT du HC05
  delay(500); 
  BTSerie.print("AT+VERSION\r\n"); //commande pour obtenir la version firmware 
  delay(1000); 
  //BTSerie.print("AT+NAMEMaitre1\r\n"); //commande pour renommer le module ne marche pas..
 delay(1000); 
  BTSerie.print("AT+ROLE=1\r\n"); //commande module en mode master
  Serial.print("Set as Master");
  delay(1000);
  BTSerie.print("AT+CMODE=1\r\n"); //connection automatique à un module (sans spécification de l'adresse)
  delay(1000);
}  
void loop()  
{    
  
}

Paramétrage esclave :

#include <SoftwareSerial.h>  //Software Serial Port 
#define RxD 10  
#define TxD 11  
SoftwareSerial BTSerie(RxD,TxD);  
void setup()  
{  
  Serial.begin(9600);  
  delay(500);  
  Serial.print("Bonjour - Pret pour les commandes AT");  
  // Configuration du bluetooth  
  pinMode(RxD, INPUT);  
  pinMode(TxD, OUTPUT);  
  BTSerie.begin(9600);  
  delay(500);  
   BTSerie.print("AT");  
  delay(1000);
  BTSerie.print("AT+VERSION");  
  delay(1000);  
   BTSerie.print("AT+INIT");  
  delay(1000);  
  // BTSerie.print("\n"); 
  BTSerie.print("AT+NAMEEsclave1");
 delay(1000); 
  BTSerie.print("AT+ROLE=0");
  Serial.print("Set as Slave");
}  
void loop()  
{  
 
}

PS : Le maitre est un HC05 (terminal)