Bluetooth JY-MCU AT command

Salut à tous,
Je viens de faire l'acquisition d'un module bluetooth pour arduino ( le JY-MCU ).
Je branche donc mon module correctement.
Je branche le RX du module sur la pin 3 de l'arduino et le TX sur la pin 2 de l'arduino

J'ouvre l'exemple de SerialSoftware et remplace les "mauvais" bauds par les bauds correct : 9600.
Ensuite, je connecte le tout à mon pc et upload. Mon GSM capte bien le module bluetooth ( c'est une bonne nouvelle ). Mais je n'arrive à envoyé aucune AT command.
Je visite donc plusieurs post dont celui-ci qui me parait le plus pertinent : How to get the JY-MCU bt board to work - Networking, Protocols, and Devices - Arduino Forum

Ils ont pareil que moi, à un point près. Ils arrivent à recevoir un "ok" en envoyant "AT". Or moi, en envoyant AT, je n'ai absolument rien.
Je décide donc de regarder si mon Serial.available() reçoit quelque chose, et la réponse est oui
Ensuite, je fais pareil pour mySerial.available() et la réponse est non.

C'est à dire que j'envoie bien au module des informations mais que celui-ci ne me réponds pas =(

J'ai pensé à envoyer cette fonction directement :

mySerial.write("AT+VERSION");

Sans résultat, je n'ai aucune réponse.

Voici donc le code :

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup()  
{
  pinMode(2,INPUT);
  pinMode(3,OUTPUT);
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
    
  if (Serial.available())
    mySerial.write(Serial.read());
    
    mySerial.write("AT+VERSION");
    
}

Merci à tous :wink:

renaudyes:
Salut à tous,
Je viens de faire l'acquisition d'un module bluetooth pour arduino ( le JY-MCU ).

bonsoir
NB je debute aussi avec ce genre de module :grin:
et comme j'ai un peu tatonné :

est tu sur que ce soit bien un HC05 et pas un HC06 ?
voir ça

et surtout ça

et aussi ça (voir 3 notes sur la terminaison des commandes AT)

Mon GSM capte bien le module bluetooth ( c'est une bonne nouvelle ). Mais je n'arrive à envoyé aucune AT command.

De mémoire, ces trucs là n'acceptent pas les commandes AT lorsqu'ils sont couplés à un autre appareil. Donc avant d'envoyer des commandes s'assurer que le modules n'est associé à aucun appareil.

fdufnews:

Mon GSM capte bien le module bluetooth ( c'est une bonne nouvelle ). Mais je n'arrive à envoyé aucune AT command.

De mémoire, ces trucs là n'acceptent pas les commandes AT lorsqu'ils sont couplés à un autre appareil. Donc avant d'envoyer des commandes s'assurer que le modules n'est associé à aucun appareil.

Bonsoir fdufnews
ça dépend du modèle de module :grin:

Certains permettent une manip d'entrée en mode AT même une fois appairé, mais pas tous .

(pour les anciens 8) c'est un peu comme pour les anciens modems RTC avec l'escape sequence "+++" , là en manip "HARD"
mais il faut déjà voir à quoi l'on à faire :grin:
voir page 3 de

Salut,
C'est bien un HC-05 que j'ai.

J'avais bien lu que pour les commandes, il ne faillait pas l'apparié. Je suppose qu'une détection n'apparie pas l'appareil ...
De toutes façon, j'avais essayé de l'apparié mais je n'avais pas trouvé le code :p. C'est pour ça que je comptais utilisé les commandes AT.

Ce qui m'embête avec ce qui est écris sur le HC-05, c'est qu'il faudrait mettre un HIGH level sur la pin 34. Or chez moi, le tout est plastifié. Il ne faut peut être donc pas y touché?

Je poursuit mes recherches :p. Rahh je rage, j'ai fait le programme android et je bloque là dessus :stuck_out_tongue:

Merci !

renaudyes:
Ce qui m'embête avec ce qui est écris sur le HC-05, c'est qu'il faudrait mettre un HIGH level sur la pin 34. Or chez moi, le tout est plastifié. Il ne faut peut être donc pas y touché?

Bonjour
D'apres ce que j'ai compris , le pin 34 est ressorti sur le pastillage de sortie sur le pin key
regarde le 1er lien (hackaday)

Salut,
Tu as bien compris, parce que c'est ce que j'ai compris aussi :grin: .
Alors, je suis arrivé à entré dans le AT command. On le voit grâce à la led qui clignote avec un temps HIGH de 2s et de LOW de 2s. Avant, elle clignotait très rapidement.

Mais j'ai toujours le même problème, aucune AT commande qui fonctionne ( pas de réponse du module ).
Donc j'ai une questions stupide. Est ce possible que l'on grille une partie du composant en inversant TX et RX. Parce que j'ai essayé pour voir si je me trompais pas :p.

Par contre, cette phrase me perturbe : The device then boots in AT command mode with a default 38400bits/s speed and listens for all of the AT command set
Cela signifie que le baud rate est à 38400 et non à 9600 bauds ? L'erreur vient peut être de là non ?
Donc, j'ai essayé un nouveau code
J'ai changé les pin ( RXD est sur 10 et TXD est sur 11, ensuite, le key pin sur le 8)

	#include <SoftwareSerial.h>

	SoftwareSerial mySerial(10, 11); // RX, TX
	String command = ""; // Stores response of bluetooth device
	                     // which simply allows \n between each
	                     // response.
	void setup()  
	{
          pinMode(8,OUTPUT);
	  // Open serial communications and wait for port to open:
	  Serial.begin(38400);
	  Serial.println("Type AT commands!");
	  // SoftwareSerial "com port" data rate. JY-MCU v1.03 defaults to 9600.
	  mySerial.begin(38400);
	}

	void loop()
	{
        digitalWrite(8,HIGH);
	  // Read device output if available.
	  if (mySerial.available()) {
	    while(mySerial.available()) { // While there is more to be read, keep reading.
	      command += (char)mySerial.read();
	    }
	    Serial.println(command);
	    command = ""; // No repeats
	  }
	  
	  // Read user input if available.
	  if (Serial.available()){
	      delay(10); // The DELAY!
	      mySerial.write(Serial.read());
	  }
          mySerial.write("AT");
	}// END loop()

Ce qui me fait le plus peur ici, c'est que la ligne
mySerial.write("AT"); ne me répond pas. Le problème vient réellement du module.
Tu as quelque chose avec ce code artouste ?

EDIT : j'ai essayé les deux méthode d'entrée plus haut, qui sont fonctionnelle ( avec la led clignotante de 2s ) mais sans réponse
EDIT 2 :
J'ai trouvé un gars qui a eu le même problème : Resolved 'AT' commands not returning anything from Bluetooth module + Hello :D

Mais je ne comprend pas sa solution ( l'anglais, je le comprend, enfin je pense) mais je ne comprend pas ses commandes :s :

Sorted it, forced it into AT mode by holding pin 34 high (as before), then applying power to the board. Then pushing commands at a baud rate of 38400, 8, n, 1. With commands appended with CR+LF (\r\n).
The part I was missing was in this mode for the AT commands, Rx - Rx and Tx - Tx

renaudyes:
Ce qui me fait le plus peur ici, c'est que la ligne
mySerial.write("AT"); ne me répond pas. Le problème vient réellement du module.
Tu as quelque chose avec ce code artouste ?

je n'ai pas de HC05 mais un HC06
mais d'apres ce que j'ai compris, il y a une subtilité sur la terminaison des commandes AT selon les modele
dans ton cas cela devrait etre

mySerial.write("AT\r\n");

Salut,
Oui je viens de trouvé cette "subtilité" aussi.
Alors, mon problème vient surement du fait que je n'arrive pas à envoyé de commande.
Comment puis je être sur d'envoyé correctement ce que je veux au module ?

Je pense qu'il faut branché le TXD et RXD au pin 1 et 0 de l'arduino ( respectivement TX et RX ).
Comme le module ne me répondait pas, j'ai décidé de changé son nom. Si son nom change, je suis sur de communiquer avec.
Etape :

  • Allumer l'arduino avec le module éteint
  • Mettre HIGH la pin 34
  • Allumer le module par du 5V
    Je suis donc maintenant entré dans le mode 1 des AT command et le baud rate = 38400 *
  • Envoyé le code "at+name=Rename\r\n" (doc du module)
  • Attente de 2s
  • Eteindre le module **
  • Reconnecter le module 2s plus tard sans entré dans les AT mode ( donc un LOW level sur la pin 34)
  • Regarder avec mon téléphone si cela change quelque chose
    Réponse, non :disappointed_relieved:

*Enter to AT mode:
Way1:
Supply power to module and input high level to PIN34 at the same time,the module will enter to AT mode with the baud rate-38400.
** Si je ne déconnecte pas le module, celui-ci reste dans les AT mode et je ne peux plus le voir via mon bluetooth.
Maintenant, je sais pas si en déconnectant celui-ci perd les données acquérient auparavant ...
EDIT oubli du code :

void setup(){
  pinMode(8,OUTPUT);
  digitalWrite(8,HIGH);
  Serial.begin(38400);
  delay(1000);
  Serial.println("go");
}
void loop(){
  int count =0;
  if (count=0 || count >20){
  Serial.write("at+name=Rename\r\n");
  count ++ ;
  }
  delay(1000);
}

Ca commence à me gaver ce truc :stuck_out_tongue:

renaudyes:
Salut,
Oui je viens de trouvé cette "subtilité" aussi.
Alors, mon problème vient surement du fait que je n'arrive pas à envoyé de commande.
Comment puis je être sur d'envoyé correctement ce que je veux au module ?

Je pense qu'il faut branché le TXD et RXD au pin 1 et 0 de l'arduino ( respectivement TX et RX ).
Comme le module ne me répondait pas, j'ai décidé de changé son nom. Si son nom change, je suis sur de communiquer avec.
...
Ca commence à me gaver ce truc :stuck_out_tongue:

bonjour
pour l'instant reste dans le simple et basique
des fois tu utilise du softserial, des fois du serial hard, des fois un mix des 2 :grin:
le TXD (--->) du HC va vers un RX arduino (hard 0---> ou soft choisi)
Le RXD<--- du HC va vers un TX arduino " hard 1<--- ou soft choisi "

C'est la première fois que j'utilisais le softwareSerial.
Et je ne sais pas qu'elle est la différence entre le serial hard ou du soft serial.
Enfin bon, je reste sur les pin RX et TX du arduino pour le moment.

Mais, si j'envoie via le moniteur série at+name=Rename\r\n, est ce que ça l'envoie obligatoirement sur les pin TX et RX de l'arduino ? ( et donc passe par le HC ?)
Et si le HC m'envoie des données via les pin TX et RX de l'arduino, est ce que je reçois sa réponse sur le moniteur série ?

Enfaite, j'utilisais autre chose parce que je ne comprenais pas vraiment comment fonctionnait les TX et RX de l'arduino :wink:

renaudyes:
C'est la première fois que j'utilisais le softwareSerial.
Et je ne sais pas qu'elle est la différence entre le serial hard ou du soft serial.
Enfin bon, je reste sur les pin RX et TX du arduino pour le moment.

Mais, si j'envoie via le moniteur série at+name=Rename\r\n, est ce que ça l'envoie obligatoirement sur les pin TX et RX de l'arduino ? ( et donc passe par le HC ?)
Et si le HC m'envoie des données via les pin TX et RX de l'arduino, est ce que je reçois sa réponse sur le moniteur série ?

Enfaite, j'utilisais autre chose parce que je ne comprenais pas vraiment comment fonctionnait les TX et RX de l'arduino :wink:

essaie déjà de suivre pas à pas ça :
attention à bien comprendre la difference entre serial et softserial
tout semble bien detaillé y compris le câblage

j'ai testé la compil ça passe

/*

AUTHOR: Hazim Bitar (techbitar)
DATE: Aug 29, 2013
LICENSE: Public domain (use at your own risk)
CONTACT: techbitar at gmail dot com (techbitar.com)

*/


#include <SoftwareSerial.h>

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

void setup()
{
  pinMode(9, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
}

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());
}

Salut,
J'avais bien compris ce que c'est le softSerial. Mais je ne comprenais pas ton soft et hard serial :p.

J'ai compris que l'on créé deux liaisons série. Une pour le bluetooth nommé BTSerial prenant RX à 10 et TX 11 et une sur le moniteur série ( via Serial ).

J'ai compris le fonctionnement du code, ... mais chez moi, aucune réponse du module. Même pas de "ok" via AT. Donc, je penche sur un problème de fonctionnement.
Tu avais compris la phrase ici ? :

Sorted it, forced it into AT mode by holding pin 34 high (as before), then applying power to the board. Then pushing commands at a baud rate of 38400, 8, n, 1. With commands appended with CR+LF (\r\n).
The part I was missing was in this mode for the AT commands, Rx - Rx and Tx - Tx

Parce que je ne la comprend pas et je me demande si elle ne me serait pas utile.

renaudyes:
J'ai compris le fonctionnement du code, ... mais chez moi, aucune réponse du module. Même pas de "ok" via AT. Donc, je penche sur un problème de fonctionnement.
Tu avais compris la phrase ici ? :

Sorted it, forced it into AT mode by holding pin 34 high (as before), then applying power to the board. Then pushing commands at a baud rate of 38400, 8, n, 1. With commands appended with CR+LF (\r\n).

The part I was missing was in this mode for the AT commands, Rx - Rx and Tx - Tx



Parce que je ne la comprend pas et je me demande si elle ne me serait pas utile.

calmos :grin:

Déjà avec ce code et sans rien faire d'autre , est ce que tu te retrouve dans la situation blink led 2 secondes= confirmation entrée en mode AT ?
si non, là je ne pourrais plus grand chose
si oui
les commandes PC VERS l'arduino, tu les envoie avec quoi ? le terminal intégré de l'IDE arduino ?
si oui , ce n'est peut etre pas le bon choix ( probleme de fin de ligne)
utilise un "truc" plus paramétrable comme
Terminal (qui permet de forcer du CR/LF sur CR )

à suivre fin de journée pour moi

Salut,
Alors, oui, j'ai bien la led qui clignote 2 secondes.

J'ai téléchargé ton programme ;).
J'arrive à me connecter,... envoyé des commandes ( qui n'obtiennent toujours pas de réponses ).

Dans le code que tu m'as donné et qui compile, je n'ai toujours rien. J'ai branché évidemment suivant le code ( RX du HC sur pin 11 de l'arduino et TX sur 10).

J'ai réessayer tous ce que j'ai fait ce matin, c'est à dire
enregistrer un String contenant la commande AT, comme ça, je ne dois même pas l'appelé via le moniteur série.
String a ="AT"
String b = "AT\r\n",
j'ai ensuite fait le BTSerial.write(a) et BTSerial.write(b) mais toujours sans réponse...

YOOOOUUUUU, ça fonctionne :D.
Enfait, c'est l'envoi via le moniteur série qui bug à crevé. Pareil pour l'autre, rien ne fonctionne ;).
Mais je pense savoir pourquoi .. Dans le sérial.read() il ne prend que le premier byte or si je tape AT, il en faut 2.
Il faut donc créé une petite fonction for().

Pour ma part, ceci fonctionne et me renvoi le numéro de version :grin:

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  int i = BTSerial.available();
  if (i>0){
    for(int b = 0; b<i; b++){
    Serial.write(BTSerial.read());
    }
    Serial.println("done");
  }

  }
  Serial.println("Inscription de  AT\r\n");
  BTSerial.write("AT+VERSION?\r\n");
  delay(1500);
}

renaudyes:
YOOOOUUUUU, ça fonctionne :D.
Enfait, c'est l'envoi via le moniteur série qui bug à crevé. Pareil pour l'autre, rien ne fonctionne ;).
Mais je pense savoir pourquoi .. Dans le sérial.read() il ne prend que le premier byte or si je tape AT, il en faut 2.
Il faut donc créé une petite fonction for().

Pour ma part, ceci fonctionne et me renvoi le numéro de version :grin:

bonsoir
parfait
le principal c'est que ce soit finalement bien tombé en marche :grin:

Bonsoir, je viens de recevoir ma carte arduino et module Keyes BT_BOARD V2.0 idem JY-MCU.
j'ai branché le +5v et gnd
mais pour le tx et rx je voulais savoir comment vous les aviez branché...
merci

azebest:
Bonsoir, je viens de recevoir ma carte arduino et module Keyes BT_BOARD V2.0 idem JY-MCU.
j'ai branché le +5v et gnd
mais pour le tx et rx je voulais savoir comment vous les aviez branché...
merci

un petit tuto
http://letmeknow.fr/blog/tuto-ajouter-le-bluetooth-au-arduino/