Bonjour, j'ai en ma possession depuis peu un module bluetooth de type HC-05 zs-040 (sans boutton) et je rencontre quelque problème lors de l'utilisation.
Mon matériel :
Carte Arduino Mega 2560
-Module bluetooth HC-05 sans boutton
-Breadbord, fils etc...
Le problème :
Je n'arrive pas à me connecter au module bluetooth, il est reconnu par mon téléphone (Android), mais lorsque je tente de m'y appairer, ce dernier affiche: "Appairage impossible. Vérifiez les paramètres de cet appareil et réessayez".
Je tente donc de re-paramétrer le module bluetooth. Pour cela il faut passer en mode commande. Cela me prend déjà pas mal de temps car bien que je suive assidument ce que j'ai pu tirer de mes différentes recherches, cela ne fonctionne pas. Au final par un quelconque miracle, j'arrive à établir une liaison avec le module et je peux donc rentrer des commandes AT.
Je teste donc quielque commandes histoire de voire si cela fonctionne bien. Puis, pensant que le problème vient peut-être de la vitesse du module, je rentre la commande: AT+BAUD9.
Grosse erreur...
Les commandes AT+BAUD permettent de modifier la vitesse du module bluetooth. Sauf que ce que je ne savais pas (et que j'ai appris trop tard) c'est que cette commande définissait la vitesse du module sur 230 400 bauds. Or la vitesse maximale d'une carte Arduino (du moins la mienne) est de 115 200 bauds.:o
Le module ne répond donc plus aux commandes que je rentre. Après quelques recherches je comprend pourquoi et j'essaye d'autre commandes du même type pour re-changer la vitesse du module mais rien n'y fait.
Tout ce que j'ai pu trouver ensuite comme information est qu'un adaptateur USB/Série pourrait m'être utile. Mais aucune méthode n'est précisée.
Je requiers donc votre aide:
-Comment passer en mode commande avec un module sans bouton?
-Comment rétablir le lien avec le module bluetooth?
-Avez-vous une idée de ce qui m'empêche de m'y connecter? ou une idée de comment je pourrais le savoir?
Le code :
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(11, 10); // RX | TX
char c = ' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
// baud rate du HC-0x : 9600 par défaut
BTSerial.begin(9600);
Serial.println("Arduino avec HC-0x");
}
void loop()
{
// Lecture du module BT et affichage des données sur le moniteur série de l'Ordinateur
if (BTSerial.available())
{
c = BTSerial.read();
Serial.write(c);
}
// Lecture du moniteur série et envoi des données sur le module BT
if (Serial.available())
{
c = Serial.read();
BTSerial.write(c);
// Echo the user input to the main window. The ">" character indicates the user entered text.
if (NL) { Serial.print(">"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}
Un arduino supporte sans problème 230400 bauds (et plus) sur le port Serial, c'est juste la librairie SoftwareSerial qui est limitée à 115200. Le problème en utilisant Serial, c'est qu'il n'est pas possible d'envoyer des commandes au HC-05 à partir de ton pc. Mais tu peux programmer ton arduino pour qu'il envoie les commandes à ta place...
Sinon, comme tu l'as suggéré, tu peux utiliser un petit module USB-Serial (ch340, cp2102 etc...)
Edit: Mince je n'avais pas lu que tu utilisais un Mega... Tu peux bien sûr utiliser les autres ports Serial.
:o Pourquoi se lier les mains avec un SofwareSerial() sur une carte Mega 2560 ?
Elle dispose 4 ports série matériels pouvant fonctionner à grande vitesse.
Bon bon bon,
je me suis pas mal documenté sur le port série mais pas mal de concept me paraissent encore assez flou.
En effet, comment savoir par quel port série l'arduino Mega envoie et reçoit les données? Peut-on le définir?
J'en suis arrivé à un code bien plus simpliste:
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
}
void loop()
{
//lecture de la sortie du module et envoie a l'utilisateur
if ( Serial1.available() ) { Serial.write( Serial1.read() ); }
// lecture de l'entrée user et envoie au module
if ( Serial.available() ) { Serial1.write( Serial.read() ); }
}
et j'ai changé les branchements :
RX module ---> TX 19 Mega
TX module ---> RX 18 Mega
Mais cela ne fonctionne toujours pas, le module ne répond plus.
comment savoir par quel port série l'arduino Mega envoie et reçoit les données? Peut-on le définir?
l'Arduino Mega fait ce qu'on lui demande de faire !!
dans le dernier code posté il essaie de communiquer avec le HC05 à 9600 bauds via Serial1
le choix de 9600 bauds pour Serial1 est-il cohérent avec ce qui a été écrit plus haut de la configuration en cours du module ?
al1fch:
l'Arduino Mega fait ce qu'on lui demande de faire !!
dans le dernier code posté il essaie de communiquer avec le HC05 à 9600 bauds via Serial1
le choix de 9600 bauds pour Serial1 est-il cohérent avec ce qui a été écrit plus haut de la configuration en cours du module ?
Effectivement j'avais omis ce détail. Mais même après modification du script,le module ne donne pas trace de vie.
Ce qui me ramène à mon premier problème: suis-je bien en mode commande?
La led clignote une fois par seconde mais je ne sais pas si c'est un indicateur fiable car lorsque j'avais réussis à mettre le module en mode commande, il me semble que la led clignotait à la même fréquence.
Y'a t-il un moyen de savoir si je suis bien en mode commande ou non? afin d'identifier le problème.
(Le pin key du module et sous tension 3.3V permanente, ce qui devrait suffire à le rentre apte à recevoir mes commandes.)
void setup()
{
Serial.begin(9600);
Serial1.begin(230400);
}
void loop()
{
//lecture de la sortie du module et envoie a l'utilisateur
if ( Serial1.available() ) { Serial.write( Serial1.read() ); Serial.println( "yo" ); }
// lecture de l'entrée user et envoie au module
if ( Serial.available() ) { Serial1.write( Serial.read() ); Serial.println( );}
}