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
- Ordinateur
- Arduino UNO
- câble USB pour connecter l’Arduino à l’ordinateur
- Module Bluetooth HC-06
- Câbles Dupont M/F
Présentation du module HC-06
Le module Bluetooth HC-06 présente 4 broches pour permettre d’établir la connexion série.
- VCC broche d’alimentation. Typiquement connectée à la broche 5V de l’Arduino.
- GND masse. Typiquement connectée à la broche GND de l’Arduino
- RX broche de réception. Typiquement connecté à la broche de transmission (TX) de l’Arduino
- TX broche de transmission. Typiquement connecté à la broche de réception (RX) de l’Arduino
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:
- AT+NAME=xxxx pour configurer le nom du module
- AT+PSWD: »xxxx » pour configurer le mot de passe du module
- AT+UART=115200,0,0 pour configurer le baudrate
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:
- SoftwareSerial hc06(Rx,Tx) pour définir le port série et les broches servant à la communication
- hc06.begin() pour définir la vitesse de communication
- hc06.available() pour tester si des données sont disponible dans le buffer du port série
- hc06.read() pour lire les données du port série, un octet à la fois
- hc06.print() pour envoyer une chaine de caractères en ASCII
- hc06.write() pour envoyer des données, un octet à la fois.
#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
- Communiquer entre deux Arduino via Bluetooth
- Pilotez votre robot avec votre smartphone
- Récupérez les mesures d’un capteur sur votre smartphone
- Tous nos robots peuvent être piloté via Bluetooth.
Source
- Communication Série avec Arduino
- Module Bluetooth HC-06
- Créez votre application smartphone avec App Inventor 2
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie