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..
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
lis donc et assimile la doc que j'ai mise en lien plus haut
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..
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 !
voir déjà et surtout ce qui traite de la difference des terminateurs entre HC05 et HC06
Pin 34 HIGH(3,3V) (pin Key à 5V) ==> AT mode baud rate 38400 ==> pin 31 led 1Hz (sauf que ça ne marche pas )
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());
}
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.
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()
{
}