Site icon AranaCorp

Votre Arduino communique avec le module HC-06

arduino and hc06

Vous pouvez communiquer avec votre carte Arduino par liaison Bluetooth en utilisant un module HC-06 (esclave). Cela vous permet de connecter la carte Arduino à un autre système (Smartphone, ordinateur ou un autres microcontrôleurs) afin d’envoyer et de recevoir des données. La communication par Bluetooth permet, par exemple, de piloter votre robot via une application Smartphone ou récupérer les mesures d’un capteur sur votre ordinateur.

Prérequis : Communication Série avec Arduino

Matériel

Présentation du module HC-06

Le module Bluetooth HC-06 présente 4 broches pour permettre d’établir la connexion série.

N.B.: Le module HC-06 étant un module esclave, il ne peut pas se connecter à d’autres appareils tout seul. Pour cela, vous aurez besoin d’un module maître comme le module Bluetooth HC-05.

Schéma de câblage

Certains modules HC-06 fonctionnent en 3V3 et ne supportent pas le niveau de tension 5V sur la broche Rx. Dans ce cas, un pont diviseur de tension est nécessaire pour convertir le signal logique (résistance 1kOhm entre pin3 et Rx, et 2kOhm entre Rx et GND).


ATTENTION : Nous utilisons ici, les broches 2 et 3 de l’Arduino UNO. Selon le microcontrôleur utilisé, les broches utilisables pour la communication SoftwareSerial peuvent être différentes. Notamment pour les cartes Arduino Mega, Micro, Leonardo. Vérifiez la documentation.

Configuration du module HC-06

La configuration du module Bluetooth peut être intéressante pour vérifier le bon fonctionnement du module et pour modifier ses paramètres notamment lorsque vous utilisez plusieurs modules. Le module doit être alimenté mais non-appairé (la LED doit clignoter).

Le code suivant permet de modifier le nom, le code PIN et la vitesse de communication(baudrate) du module HC-06

#include <SoftwareSerial.h>

SoftwareSerial hc06(2, 3);

void setup() {
  //Initialize Serial Monitor
  Serial.begin(9600);
  Serial.println("ENTER AT Commands:");
  //Initialize Bluetooth Serial Port
  hc06.begin(9600);
}

void loop() {
  //Write data from HC06 to Serial Monitor
  if (hc06.available()) {
    Serial.write(hc06.read());
 }
  
  //Write from Serial Monitor to HC06
  if (Serial.available()) {
   hc06.write(Serial.read());
 }
}

Pour tester la communication, tapez AT dans le monitor série de l’IDE Arduino. Assurez-vous de sélectionner le bon baudrate (9600) et « Pas de fin de ligne » dans les options de communication. Si tout va bien, le module doit répondre OK. Si ça ne fonctionne pas vérifiez le branchement et la version du module.

Pour modifier le nom du module, tapez AT+NAMEnom_module. Le module devrait répondre OKsetname. (Ex: si vous voulez changer le nom du module en BTM1 tapez AT+NAMEBTM1)

Pour modifier le code PIN du module, tapez AT+PINxxxx. Le module devrait répondre OKsetPIN. (Ex: si vous voulez changer le PIN en 0000 tapez AT+PIN0000)

Pour modifier la vitesse de communication du module (seulement si nécessaire), tapez AT+BAUDx. Ex: si vous voulez changer le baudrate en 9600 tapez AT+BAUD4. Le module devrait répondre OK9600. (Note: 1 pour 1200, 2 pour 2400, 3 pour 4800, 4 pour 9600, 5 pour 19200, 6 pour 38400, 7 pour 57600, 8 pour 115200)

ATTENTION: Différentes versions du module HC-06 éxistent et la liste des commandes AT peut varier. Vérifiez bien le numéro de série écrit sur le module et la version du firmware en tapant la commande AT+VERSION.

Par exemple, le module HC-06 labellisé ZS-040 avec la version 3.0-20170609 retourne ERROR(0) lorsqu’on envoie la commande AT+NAMExxxx (avec xxxx le nouveau nom choisi pour le module). Les commandes AT pour ce module sont:

N’hésitez pas à laisser un commentaire si vous rencontrez des difficultés pour configurer votre module Bluetooth HC-06.

Appairage

Une fois la configuration du module effectuée comme vous le désirez, vous pouvez appairé le module HC-06 avec le système de votre choix comme n’importe quel périphérique Bluetooth. Sélectionnez le nom dans la liste des périphériques détectés (par défaut: HC-06) et entrez le code PIN que vous avez choisi (par défaut: 1234). Lorsque cela est fait, la LED présente sur le module doit cesser de clignoter.

Code

Une fois votre module appairé vous pouvez modifier le code suivant pour obtenir la fonctionnalité désirée. Dans l’exemple suivant, nous supposons qu’une application envoie la commande ON ou OFF au module Bluetooth pour activer une fonction du code.

Pour gérer le module HC-06 dans le programme, la librairie utilisée est SoftwareSerial.h qui gère les liaisons séries de la carte Arduino. Les fonctions à connaître sont:

#include <SoftwareSerial.h>

SoftwareSerial hc06(2,3);

String cmd="";
float sensor_val=0;

void setup(){
  //Initialize Serial Monitor
  Serial.begin(9600);
  //Initialize Bluetooth Serial Port
  hc06.begin(9600);
}

void loop(){
  //Read data from HC06
  while(hc06.available()>0){
    cmd+=(char)hc06.read();
  }

  //Select function with cmd
  if(cmd!=""){
    Serial.print("Command recieved : ");
    Serial.println(cmd);
    // We expect ON or OFF from bluetooth
    if(cmd=="ON"){
        Serial.println("Function is on");
    }else if(cmd=="OFF"){
        Serial.println("Function is off");
    }else{
        Serial.println("Function is off by default");
    }
    cmd=""; //reset cmd
  }
  // Simulate sensor measurement
  sensor_val=(float)random(256); // random number between 0 and 255
    
  //Write sensor data to HC06
  hc06.print(sensor_val);
  delay(100);
}

Bonus: scan du baudrate

Si vous avez du mal à trouver la vitesse de communication de votre module Bluetooth, voici un code qui pour chaque valeur de baudrate initialise le module Bluetooth HC-06 et envoie la commande AT.

#include <SoftwareSerial.h>
SoftwareSerial hc06(2, 3);

void setup() {
  //Initialize Serial Monitor
  Serial.begin(9600);
  // scan
  scanBaudrate();
}

void loop() {}

void scanBaudrate() {
  unsigned long bauds[12] = {300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 250000};
  for (int i = 0; i < 12; i++) {
    hc06.begin(bauds[i]);
    delay(10);
    Serial.print(F("Baudrate "));
    Serial.println(bauds[i]);
    command("AT", 2000);

  }
}
String command(const char *toSend, unsigned long milliseconds) {
  String result;
  Serial.print("Sending: ");
  Serial.println(toSend);
  hc06.print(toSend);
  unsigned long startTime = millis();
  Serial.print(F("Received: "));
  while (millis() - startTime < milliseconds) {
    if (hc06.available()) {
      char c = hc06.read();
      Serial.write(c);
      result += c;  // append to the result string
    }
  }
  Serial.println();  // new line after timeout.
  return result;
}


Lorsque la valeur de baudrate est correcte, le module Bluetooth devrait répondre OK. Ce code vous permettra de trouver facilement si votre module fonctionne et quel baudrate il utilise.

Application

Source

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile