Bluetooth

Les modules Bluetooth permettent à l’Arduino de communiquer avec un appareil Android (pilotage de robot, …)

Modules HC-05 et HC-06

sources : http://www.martyncurrey.com/hc-05-fc-114-and-hc-06-fc-114-first-look/

Les modules HC-05 (maître) et HC-06 (esclave) (?) sont des circuits extrêmement fréquents et bon marché, parfaitement adaptés à une utilisation avec Arduino.

  • Mode maitre : l’association (ou appairage) avec un autre périphérique  doit se faire depuis le module.
  • Mode esclave : l’association avec un autre périphérique doit se faire depuis l’autre périphérique.

Câblage

Programmation

Le programme suivant permet à l’Arduino de communiquer avec un appareil Bluetooth, en utilisant le terminal série de l’ordinateur.

Attention : le terminal doit être réglé en mode NL et CR (en bas à droite) : 

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // 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; }
    }
}

Fonctionnement

Le module HC-0x possède différents modes de fonctionnement, identifiables par le clignotement de sa LED d’état.

Mode commande

Clignotement rapide : ….

Ce mode permet de configurer le module, grâce aux commandes AT (ATtention).

Pour passer en mode commande, il suffit d’appuyer sur le petit bouton du module (s’il y en a un !).

Sinon, on peut aussi obtenir le mode commande en passant la broche KEY à l’état haut (HIGH) et en la maintenant dans cet état pendant toute la durée d’utilisation du mode commande.:

const key = 12 // connecter la broche KEY au port 12 de l'Arduino
void setup() {
    pinMode(key, OUTPUT);
    pinMode(key, LOW);
}

 

Quelques commandes AT utiles
  • Vérification que le mode AT est actif :
>AT
OK
  • Affichage de la version du firmware (programme interne au module BT) :
>AT+VERSION
+VERSION:2.0-20100601
OK
  • Obtention/Configuration des paramètres de communication (baud rate, bit de stop, parité)
>AT+UART=9600,0,0
OK
>AT+UART
+UART:9600,0,0
OK
  • Modification du rôle du module (esclave = 0 / maître = 1)

lecture du mode courant

>AT+ROLE
+ROLE:0
OK
>AT+ROLE=1
OK
>AT+ROLE
+ROLE:1
OK

 

Mode attente

Clignotement lent :   .   .   .   .

Mode connexion

Deux clignotements courts :    ..    ..    ..   

Utilisation avec un appareil Android

Utilisation d’un terminal série

  • Téléverser le programme précédent dans l’Arduino et ouvrir le moniteur série
  • Installer un terminal Bluetooth sur l’appareil Android (par exemple Bluetooth Terminal de Qwerty)
  • Activer le Bluetooth sur l’appareil Android, et associer le périphérique HC-05 de l’Arduino (il doit être nommé HC-05 et le mot de passe par défaut est 1234)

  • Exécuter l’application Bluetooth Terminal et connecter le périphérique

A présent il est possible de communiquer :

 

 

MIT App inventor

 

 

 

 

 

 

 

 

 

 

 

 

Module nRF8001

Modèle testé : Adafruit nRF8001 Bluefruit LE Breakout

ATTENTION, ce module est à la norme Bluetooth Low Energy ou Bluetooth 4.0. Il n’est (pour l’instant) pas compatible avec App Inventor.

Installation

Bibliothèque Arduino

MenuExemple_nRF8001

Application Android

Câblage

Premier essai

Depuis le PC :

  • Télécharger le programme Arduino [media-downloader media_id= »441″ texts= »Test_BLE »] (archive ZIP) ;
  • Dézipper l’archive dans votre dossier de travail ;
  • Ouvrir le croquis Test_BLE.ino ;
  • Le téléverser sur l’Arduino bouton_televerse;
  • Ouvrir le Moniteur Série bouton_moniteur. Le message suivant devrait apparaître :

BLE_Arduino_0

Depuis l’appareil Android :

  • Lancer l’application Bluefruit LE IconeBLE et connecter l’appareil Android au périphérique « UART » (l’Arduino), en mode UART.

EcranAndroid_ConnectBLE1EcranAndroid_ConnectBLE2

  • Écrire un message pour l’Arduino : « Bonjour ARDUINO », puis l’envoyer (SEND)

EcranAndroid_BLE0EcranAndroid_BLE1

Le message doit apparaitre sur le Moniteur Série :

BLE_Arduino_1

  • Répondre à l’appareil Android en écrivant un message dans le Moniteur série :

BLE_Arduino_2

Le message doit apparaitre sur l’appareil Android :

EcranAndroid_BLE2

 

 

 

Pour en savoir plus …

https://learn.adafruit.com/getting-started-with-the-nrf8001-bluefruit-le-breakout/introduction

Vous aimerez aussi...

2 réponses

  1. Cristelle PESSIN dit :

    Bonjour,
    Je me permets de vous contacter car j’ai un problème d’appairage entre mon téléphone Android et le circuit Bluetooth HC08 CC2541.
    Aucun code PIN essayé ne fonctionne. L’appareil est bien reconnu par mon téléphone mais l’application Bluetooth terminal ne le trouve pas.
    Auriez-vous une piste à m’apporter pour résoudre ce problème ? J’ai déjà essayé avec 6 zéros comme proposé dans plusieurs forum mais rien ne fonctionne.
    Je vous remercie d’avance pour la réponse que vous me ferez.
    Cordialement
    C PESSIN

    • Arnaud BULCKE dit :

      Bonjour,
      En général le code pin pour les modules bluetooth est 0000 ou 1234. Avez vous essayé ces codes ? Sinon c’est vrai que la documentation du HC08 CC2541 indique un code PIN à 000000. La dernière solution c’est d’utiliser la commande AT pour voir le code PIN (cf https://www.instructables.com/id/AT-command-mode-of-HC-05-Bluetooth-module/) Pour vous il faudra envoyer la commande AT+RX via le moniteur série sur la carte Arduino avec le sketch suivant (cf lien ci dessus pour les détails):

      #include "SoftwareSerial.h"
      SoftwareSerial mySerial(10, 11); // RX, TX

      void setup() {
      Serial.begin(9600);
      pinMode(9,OUTPUT); digitalWrite(9,HIGH);
      Serial.println("Enter AT commands:");
      mySerial.begin(38400);
      }

      void loop()
      {
      if (mySerial.available())
      Serial.write(mySerial.read());
      if (Serial.available())
      mySerial.write(Serial.read());
      }

      en espérant que cela fonctionne…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *