Intégration Bluetooth avec Arduino et Android : Créer des Projets Sans Fil
Composants et fournitures
| Arduino UNO | × | 1 |
| Module Bluetooth HC-06 | × | 1 |
| LED (générique) | × | 1 |
Applications et services en ligne
- Arduino IDE
- MIT App Inventor 2
À propos de ce projet
Le Bluetooth (BT) est sans conteste l'un des meilleurs réseaux locaux sans fil (et personnels) disponibles aujourd'hui. Dans notre vie quotidienne, il est courant de trouver des téléphones portables, des enceintes, des appareils photo, etc., interconnectés grâce à la célèbre « petite lumière bleue ».
Dans le monde de l'IoT et de l'automatisation, il est très fréquent de trouver des télécommandes via téléphones mobiles utilisant la technologie Bluetooth. Cela est dû à deux composants fondamentaux mais essentiels :
- Des plateformes de développement simples pour applications Android (comme MIT App Inventor 2)
- Des modules Bluetooth abordables (comme le HC-06)
Dans ce tutoriel, nous allons explorer le contrôle des sorties d'un Arduino via un appareil mobile afin de piloter un robot, allumer des lampes dans une maison, etc.
Étape 1 : Le module Bluetooth et l'Arduino
On trouve couramment sur le marché des modules Bluetooth 3.0 « Maître-Esclave » comme le HC-05 et des modules « Esclave » comme le HC-06. Plus récemment, sont apparus les HC-08 et HC-10 fonctionnant avec la technologie Bluetooth 4.0 ou BLE (Bluetooth Low Energy). Les modules BLE sont les seuls pouvant se connecter à un iPhone, car Apple ne prend pas en charge le Bluetooth 3.0.
Pour les projets présentés ici, nous utiliserons un HC-06, très populaire et peu coûteux (au revoir l'iPhone ! Android est roi ici !). Le module BT est alimenté en 5V, ce qui permet de le connecter facilement à un Arduino UNO. Ses broches d'émission (Tx) et de réception (Rx) peuvent être connectées directement à l'UNO, sans besoin de diviseurs de tension comme c'est le cas pour l'ESP8266. Habituellement, le HC-06 doit être connecté directement aux broches 0 et 1 de l'Arduino (« Serial 0 ») :
- HC06-Tx vers Arduino pin 0 (Rx)
- HC06-Rx vers Arduino pin 1 (Tx)
Lors de l'utilisation des entrées « Serial 0 » (le seul port série matériel sur l'UNO), il est crucial de se rappeler que le HC-06 ne doit pas être physiquement connecté aux broches 0 et 1 pendant le chargement du programme, car le port USB utilise également ce même port série. Une solution simple (si votre projet n'utilise pas beaucoup de GPIO de l'UNO) consiste à utiliser un « port série logiciel » via la bibliothèque SoftwareSerial. Dans notre cas, nous utiliserons les broches 10 et 11 de l'UNO (Tx, Rx respectivement).
Étape 2 : Test et configuration du HC-06
L'étape suivante consiste à écrire un code simple pour tester, programmer et initialiser le HC-06 : on commence par inclure la bibliothèque SoftwareSerial, en définissant la variable « BT » sur le nouveau port série.
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX
String command = ""; // Stocke la réponse du dispositif Bluetooth
void setup() {
Serial.begin(9600);
Serial.println("Tapez des commandes AT");
BT.begin(9600); // Le HC-06 a généralement un baud-rate par défaut de 9600
}
Vient ensuite le corps principal du code qui attend simplement les données provenant du BT. Lorsqu'elles arrivent, elles sont écrites dans le Moniteur Série. De même, des commandes AT peuvent être envoyées depuis le moniteur série vers le module HC-06.
void loop() {
if (BT.available()) { // reçoit les données si disponibles
while (BT.available()) { // "continue à recevoir"
delay(10); // Délai ajouté pour stabiliser
char c = BT.read(); // Lecture série
command += c; // Construction de la chaîne
}
Serial.println(command);
command = ""; // Pas de répétition
}
if (Serial.available()) {
delay(10);
BT.write(Serial.read());
}
}
Une fois le programme chargé, on peut effectuer quelques tests de base via le Moniteur Série :
- Envoyer « AT » : le module doit répondre « OK »
- Demander la version du firmware : « AT+VERSION », le module répond par exemple « linvorV1.8 »
- Définir un nom pour le module : « AT+NAMEMJRoBot_BT_HC06 ». Contrairement à d'autres modules, on ne peut pas connaître le nom déjà défini. Le HC-06 répond simplement : « OKsetname »
En général, le HC-06 est livré avec le mot de passe (ou PIN) par défaut : 1234. On peut en définir un nouveau avec la commande AT :
- AT+PINxxxx où 'xxxx' sera 4 chiffres
Étape 3 : L'appareil Android
OK ! Le module est connecté à l'UNO et fonctionne. Il est temps d'introduire l'appareil Android.
Il existe de nombreuses applications sur le Google Play Store. J'utiliserai une application que j'ai développée avec l'outil MIT App Inventor 2, disponible gratuitement : MJRoBot BT Digital Analog Voice Control.
L'application envoie des commandes numériques (via boutons ou voix) et des commandes analogiques pour contrôler des dispositifs PWM comme des servos (envoi de données de 0 à 255).
- Télécharger l'application
- Aller dans les paramètres Bluetooth de l'appareil Android et rechercher le module BT pour établir la connexion (entrer le PIN 1234 ou celui que vous avez défini). Cela ne doit être fait qu'une fois, l'appareil gardera les données de connexion.
- Une fois que l'appareil et le HC-06 communiquent, lancer l'application. À la deuxième utilisation, le module BT devrait se connecter automatiquement au lancement.
- Sélectionner le nom du module (dans mon cas, celui qui se termine par HC-06).
L'affichera alors « CONNECTÉ », indiquant qu'il est « appairé » avec le HC-06. À ce stade, testez les boutons de l'application et observez dans le Moniteur Série de votre PC quelles données l'application envoie. Par exemple, en appuyant séquentiellement sur les boutons « ON » et « OFF » pour les 4 appareils, le résultat serait :
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Maintenant que nous avons une application Android qui communique avec le module BT, créons quelque chose d'utile !
Étape 4 : Contrôle des sorties Arduino
Construisons le circuit comme indiqué. L'idée est d'utiliser l'application pour allumer et éteindre les LEDS et aussi contrôler leur intensité.
Connexions :
- Appareil 1 : « dev1on / dev1off » → LED Rouge → Pin 3 UNO
- Appareil 2 : « dev2on / dev2off » → LED Jaune → Pin 5 UNO
- Appareil 3 : « dev3on / dev3off » → LED Verte → Pin 6 UNO
- Appareil 4 : « dev4on / dev4off » → LED Bleue → Pin 9 UNO
C'est-à-dire que pour déclencher le « ON » lié au bouton « Appareil 1 », le message texte « dev1on » sera envoyé à l'Arduino. À la réception de ce message, la LED rouge doit s'allumer, et ainsi de suite.
Notez que les 4 broches sont capables de générer du PWM (toutes les broches numériques de l'UNO ne le peuvent pas. Cherchez celles marquées avec « ~ »). C'est important pour l'utilisation des « sliders » dans l'application, qui envoient des données numériques pour contrôler l'intensité des LEDs via PWM :
- Dev A0 : « r / 0-255 » → LED Rouge → Pin 3 UNO
- Dev A1 : « y / 0-255 » → LED Jaune → Pin 5 UNO
- Dev A2 : « g / 0-255 » → LED Verte → Pin 6 UNO
- Dev A3 : « b / 0-255 » → LED Bleue → Pin 9 UNO
Dans le cas des sliders, avant la valeur de données PWM (0 à 255), un caractère est envoyé à l'Arduino pour l'informer qu'une commande « slider » arrive.
Étape 5 : Contrôle d'appareils IoT par commandes vocales
Pour le contrôle d'appareils IoT, la voix est une tendance actuelle. Obtenir ce type de contrôle avec Arduino / HC-06 / Android est extrêmement simple. Les appareils Android ont déjà cette fonctionnalité « d'usine ». Dans l'application que j'ai développée, un bouton a été ajouté pour faire « écouter » une commande à Android et l'envoyer en format texte à l'Arduino. Le code se charge de « lire » la chaîne qui arrive.
J'ai ajouté quelques exemples dans mon code. Lorsque l'Arduino reçoit une commande « Connect TV » par exemple, la LED verte (correspondant à l'appareil 3) s'allume (au lieu de la LED, on pourrait avoir un relais qui allumerait la TV).
Vous devez modifier les chaînes présentes dans la partie Loop du code avec des commandes dans votre langue. J'ai utilisé le portugais, ma langue maternelle, qui était plus facile à gérer chez Google en raison de l'accent différent avec mon anglais. Vous devriez utiliser des phrases courtes ou seulement des mots. L'important est une correspondance parfaite entre ce que vous avez écrit et ce que l'application de reconnaissance vocale de Google retourne.
Étape 6 : Conclusion
Je pense qu'avec ce tutoriel, vous pouvez réaliser l'énorme potentiel du contrôle de « choses » en utilisant BT / Android / Arduino. Comme toujours, j'espère que ce projet aidera d'autres à trouver leur voie dans le monde passionnant de l'électronique, de la robotique et de l'IoT ! Pour plus de projets, visitez mon blog : MJRoBot.org
Saludos depuis le sud du monde !
À bientôt pour mon prochain tutoriel !
Merci
Marcelo
Code
Extrait de code #1
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX
String command = ""; // Stocke la réponse du dispositif Bluetooth
void setup() {
Serial.begin(9600);
Serial.println("Tapez des commandes AT");
BT.begin(9600); // HC-06 baud-rate par défaut
}
Extrait de code #2
void loop() {
if (BT.available()) {
while (BT.available()) {
delay(10);
char c = BT.read();
command += c;
}
Serial.println(command);
command = "";
}
if (Serial.available()) {
delay(10);
BT.write(Serial.read());
}
}
Extrait de code #3
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Processus de fabrication
- Construire un robot Raspberry Pi piloté par Bluetooth avec retour audio
- Programmer facilement les Atmel AT89 avec Arduino Uno – Guide pas à pas
- Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
- Véhicule Télécommandé par Android avec Raspberry Pi et Shield Moteur
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Appareils électroménagers à commande vocale : contrôle Bluetooth avec Google Assistant
- Arduino UNO & Shield WiFi : Affichage température temps réel sur le Web via série
- Système d'éclairage activé par le mouvement basé sur Intel Curie (Arduino 101)
- Contrôler les clignotements LED Arduino depuis votre application iOS/Android via WiFi/Ethernet