contrôler carte arduino 101 par smartphone ble buetooth

Carte Arduino

ARDUINO101

Les cartes connectées comme Arduino et Raspberry possèdent un microcontrôleur programmable avec C++, Java, Javascript, Python et autres langages de programmation.

Ces cartes sont dotées de ports d’entrées-sorties présentant un moyen de connexion à un récepteur (capteur de lumière, capteur de son, capteur d’humidité…etc) et des actionneurs (moteur, LED, afficheur, Bipper…etc).

Ces entrées sorties peuvent être définies comme analogique ou numériques.

Les entrées/sorties analogiques peuvent émettre/recevoir un signal numérique (0 ou 1 ) ou un signal analogique (variable entre 0 et la capacité maximale)

Exemple :

On peut envoyer un signal numérique à un LED : 1 pour allumer le LED et 0 si on veut le contraire.

On peut aussi envoyer un signal analogique : la luminosité du LED va varier selon les valeurs reçues.

Pour ce tutoriel on a choisi la carte Arduino 101 appelée encore Genuino qui comporte déjà le BLE. Il est possible d’utiliser d’autres cartes Arduino qui n’intègrent pas le BLE mais dans cas, il faut connecter la carte à un module Bluetooth HC-05 ou HC-06.

BLE: Bluetooth Low Energy

arduino via ble

Le Bluetooth est un protocole de communication sans fil. Il a vu le jour à la fin des années 1990 et a commencé son succès dans les années 2000.

Le protocole Bluetooth est un semblable au Wi-Fi. En effet, ils respectent tous deux une même spécification IEEE et utilisent la même gamme de fréquences : 2.4 GHz: La communication dans Bluetooth est bidirectionnelle : deux modules peuvent communiquer ensemble en même temps. Le comportement utilisé est « maître/esclave ». Un esclave pourra parler avec un seul maître, mais un maître pourra dialoguer avec plusieurs esclaves.

Le Bluetooth Low Energy est une alternative au Bluetooth classique, avec une réduction du coût et de la consommation en puissance, tout en conservant une portée de communication équivalente.

Hardware :

  • Arduino 101 ou Genuino
  • Smartphone ou tablette Android ou iOS

Software :

  • L’application gratuite nFR Master Control Panel (BLE) sur Android ou iOS.
  • Arduino IDE

Librairies :

Dans l’IDE Arduino, il faut importer CurieBLE.h afin d’accéder au paramètres et fonctions correspondants à l’exploitation du module BLE de la carte. Avec BLE il est possible d’établir une connexion avec l’application sur le smartphone qui va permettre le control du LED.

Les étapes 

  • Installer l’application nRF Master Control Panel (BLE) pour Android et iOS
  • Installer Arduino IDE
  • Connecter la carte Arduino au PC à l’aide du câble USB
  • Copier et ensuite uploader le code sur la carte
  • Ouvrir l’application nRF Master Control Panel (BLE)
  • Scanner puis se choisir le périphérique « LED » en appuyant sur le bouton « connect »
  • Choisir le service ayant comme ID : 19B10000-E8F2-537E-4F6C-D104768A1214
  • Sélectionner l’option qui permets d’accéder au service en lecture et écriture
  • Insérer une valeur de type UIINT 8 (0 ou 1)
  • Une fois la valeur modifiée à l’instant de l’appui sur le bouton « Send » , la valeur est envoyée via BLE à la carte et le LED s’allume suivant la valeur insérée

Le code

gif code

(Je vous rassure ce n’est qu’une illustration)

Dans ce code la méthode setup() sert à initialiser et configurer le périphérique BLE en attribuant un nom et un UUID :

blePeripheral.setLocalName("LED");
blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

On ajoute ensuite le service permettant de contrôler le LED :

blePeripheral.addAttribute(ledService);
blePeripheral.addAttribute(switchCharacteristic);

Et on initialise la valeur du LED à 0 pour dire qu’il sera éteint à l’état initiale :

switchCharacteristic.setValue(0);

et enfin on va lancer le service qui va exécuter la configuration effectuée :

blePeripheral.begin();

la methode loop() contient une simple condition if qui allume le LED en cas de réception de la valeur correspondante (0 ou 1) du périphérique connecté :

if (switchCharacteristic.value()){ //toute valeur différente de  0
 Serial.println("LED on");
 digitalWrite(ledPin, HIGH);// Allumer le LED
} else {                    // une valeur égale à 0
 Serial.println(F("LED off"));
 digitalWrite(ledPin, LOW); // Zteindre le LED
}

Le code complet

#include <CurieBLE.h>

BLEPeripheral blePeripheral;  //la carte Arduino quon utilise
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214"); // ID du service BLE

// BLE LED Switch Characteristic UUID codé sur 128
BLEUnsignedCharCharacteristic switchCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

const int ledPin = 13; // pin utilisé pour référencer le LED

void setup() {
 Serial.begin(9600);

 // xonfigurer le LED
 pinMode(ledPin, OUTPUT);

 // attrubuer un nom à la carte

 blePeripheral.setLocalName("LED");
 blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

 // ajouter les caractéristiques  
 blePeripheral.addAttribute(ledService);
 blePeripheral.addAttribute(switchCharacteristic);

 // initialiser  characeristic:
 switchCharacteristic.setValue(0);

 // lancement du service
 blePeripheral.begin();

 Serial.println("BLE LED Peripheral");
}

void loop() {
 // Ecoute et connexion des périphériques BLE
 BLECentral central = blePeripheral.central();

 if (central) {
  Serial.print("Connected to central: ");
  // ecrire ladresse MAC:
  Serial.println(central.address());

  // tant que le peripherique est connecté au smartphone
  while (central.connected()) {
   // si le smartphone accède a characteristic,en mode ecriture
   // changement de la valeur de LED:
    if (switchCharacteristic.written()) {
     if (switchCharacteristic.value()) {
      Serial.println("LED on");
      digitalWrite(ledPin, HIGH);         // LED on
     } else {
      Serial.println(F("LED off"));
      digitalWrite(ledPin, LOW);          // LED off
    }
   }
  }

  // déconnexion 
  Serial.print(F("Disconnected from central: "));
  Serial.println(central.address());
 }
}

Nous espérons que ce tutoriel vous aura aidé, d’autres suivent, restez connectés !

Vous avez un projet et avez besoin d’une équipe complète et compétente ?

Comments are closed.