vendredi 4 mars 2016

Bluetooth et Arduino: le module HC-06

Grâce au module HC-06, il est très facile d'établir une communication bluetooth avec un microcontrôleur.  Il devient alors possible, par exemple,  de contrôler votre robot grâce à un téléphone ou une tablette.

Dans ce petit tutoriel, je vous explique comment contrôler deux LEDs (branchées à une carte Arduino Uno) au moyen d'une tablette Android.

(Notez que d'autres tutoriels expliquent comment utiliser le HC-06 avec un Raspberry Pi, un STM32 Nucleo un MPLAB Xpress Evaluation Board ou un MSP430 Launchpad).



Connexions

Mon module HC-06 comporte 4 pins:  VCC et GND pour l'alimentation, TXD et RXD pour la communication des données avec l'Arduino.

C'est clairement indiqué au verso de mon breakout: l'alimentation doit se situer entre 3,6 V et 6 V (5 V feront donc parfaitement l'affaire) et le niveau logique utilisé pour la communication est de 3,3 V.  Si vous utilisez un Arduino Uno, dont le niveau logique est de 5 V, vous devrez donc vous assurer d'abaisser la tension émise par l'Arduino (par sa sortie Tx) avant qu'elle ne soit reçue par le module HC-06 (par son entrée RXD).  Pour ce faire, j'ai utilisé un circuit intégré 4050, qui est spécialement conçu pour ce genre de tâche, mais un simple diviseur de tension fera tout aussi bien l'affaire.   Si vous utilisez un microcontrôleur dont le niveau logique est 3,3 V (Arduino Due, msp430 Launchpad, Nucleo, etc), cette précaution est évidemment superflue.

Donc:
  • Vcc du HC-06 --- 5 V de l'Arduino
  • GND du HC-06 --- GND de l'Arduino
  • TXD du HC-06 --- Rx de l'Arduino
  • RXD du HC-06 --- 4050 --- Tx de l'Arduino
Voici le circuit complet:

Aussitôt que votre HC-06 est alimenté, une LED rouge située sur le breakout se met à clignoter (elle cessera de clignoter lorsque le HC-06 aura établi une communication avec votre téléphone/tablette/ordinateur).    

Programmation de l'Arduino

Le module HC-06 est un convertisseur UART/Bluetooth:  si vous savez déjà comment interagir avec le moniteur série de l'IDE Arduino, alors vous savez comment interagir avec le HC-06!

Vous voulez envoyer un message par bluetooth à partir de l'Arduino?  Vous utilisez Serial.println. Vous voulez lire les messages qui proviennent à l'Arduino? Vous utilisez Serial.read.

Dans le sketch ci-dessous, la LED verte s'allume si le message "a" est reçu, la LED rouge s'allume si on reçoit le message "b", les deux LEDs s'allument si on reçoit le message "c", les deux LEDs s'éteignent si on reçoit le message "d", et chaque LED change d'état si on reçoit le message "e".

Petite précaution:  j'ai remarqué que le terminal bluetooth que j'ai utilisé sur ma tablette Android envoyait chaque message de façon répétitive, c'est pourquoi j'ai ajouté une condition pour réagir uniquement quand le signal reçu est différent du signal précédent.


Établir le lien avec le téléphone/tablette/ordinateur

Ici j'ai utilisé une tablette Android, mais la démarche est à peu près identique sur tous les systèmes d'exploitation.  Vous vous assurez que bluetooth est activé. Votre appareil affiche une liste des périphériques bluetooth qu'il détecte:  HC-06 devrait apparaître dans cette liste.  Lorsque vous sélectionnez HC-06, on vous demande de taper un code:  par défaut, c'est "1234" (si ce mot de passe ne vous plaît pas, il est possible de le modifier).




Votre HC-06 devrait alors apparaît dans la liste des "Périphériques associés", et la LED rouge du module HC-06 cesse de clignoter (elle demeure allumée).

Utilisation

Sur votre téléphone/tablette/ordinateur, vous devez installer un logiciel qui vous permettra d'envoyer et recevoir des messages via bluetooth.  Pour Android, il existe un grand nombre de logiciels gratuits intitulés "Bluetooth Terminal".  J'ai utilisé celui qui a été réalisé par AFLAK Omar.  Je ne dis pas que c'est forcément le meilleur, c'est le seul que j'ai essayé et il a bien fonctionné.

Vous indiquez d'abord, parmi les périphériques bluetooth associés, celui avec lequel vous désirez communiquer (HC-06, bien sûr).


Une fois la connexion établie, vous envoyez le message (a, b, c, d ou e), en utilisant le bouton "send".


L'Arduino allume ou éteint les LEDs en concordance avec votre message, et il vous retourne un message expliquant ce qu'il a fait.


Pas plus compliqué que ça!


Yves Pelletier   (Twitter, Facebook)

jeudi 3 mars 2016

Un arduiniste au pays de MPLAB Xpress

J'ai reçu cette semaine mon exemplaire gratuit du MPLAB XPress Evaluation Board de Microchip, et je vous raconte ici ma première exploration de cette carte et de MPLAB Xpress, qui est le nouvel environnement de programmation en ligne offert part Microchip.  Puisque je n'ai eu que très rarement l'occasion de programmer des microcontrôleurs PIC avec MPLAB, mon point de vue sera celui d'un utilisateur d'Arduino en visite sur une autre planète.  Je préférais vous en avertir...

La carte MPLAB Xpress Evaluation Board comporte un microcontrôleur PIC16F18855, 4 LEDs, un potentiomètre, un bouton poussoir (en plus du bouton reset) et une bonne trentaine d'entrées/sorties.

Il suffit de brancher la carte à un ordinateur au moyen d'un câble microUSB (non fourni) pour que l'ordinateur la reconnaisse comme un disque amovible nommé XPRESS (sous Windows 7, j'ai dû patienter un peu pendant l'installation de pilotes de périphériques, ce qui n'a pas été le cas sous Linux).



Ce disque amovible comporte un fichier "README.HTM" qui constitue une façon fort pratique d'accéder à la page de MPLAB Xpress au moyen de votre fureteur web (Internet Explorer, Firefox, Chrome et Safari sont officiellement supportés).



Dans le bas de cette page, un bouton nous donne accès à l'IDE en ligne.


Et nous voici à l'intérieur de MPLAB Xpress...


Ne nous laissons pas intimider par le syndrome de la page vide!  Cliquons plutôt sur le bouton "New Project"...



À partir de là, on peut démarrer son propre projet à partir de zéro...


...ou partir d'un exemple déjà fait:


Ha...seulement 11 exemples?  C'est un peu mince...  Les membres de la communauté des utilisateurs de MPLAB XPress peuvent contribuer à la banque d'exemples, donc j'ai confiance que la quantité d'exemples va rapidement augmenter.   Et peut-être qu'en très peu de temps, ça va devenir comme mbed:  un monstrueux amas d'exemples de qualité variable, pas très bien classés.

Parmi ce vaste choix de 11 exemples, je choisi "Hello World", qui me semble un bon point de départ.

Il faut ensuite indiquer notre modèle de PIC (PIC16F18855), à l'intérieur d'une très longue liste de modèles supportés...


...puis choisir un nom pour ce premier projet (veuillez pardonner l'absence totale d'originalité)...



Pour compiler le projet, on clique sur ce bouton:


À partir de là, c'est le même principe que pour mbed:  un fichier "Premier_Projet.hex" est créé dans votre répertoire de téléchargements.  Pour télécharger le programme dans le microcontrôleur, il s'agit de glisser l'icône de ce fichier .hex dans votre disque amovible "XPRESS", comme si vous vouliez copier le fichier sur une clé USB.


Le nouveau programme s'exécute immédiatement.  Jusque là, les 4 LEDs de votre carte s'allumaient en alternance.  Maintenant, la LED "D2" reste allumée, pendant que les 3 autres demeurent éteintes. Ce n'est peut-être pas très spectaculaire, mais ça fonctionne!

Jusqu'à maintenant,  tout fonctionne comme sur des roulettes:  je suis satisfait à 100%, sans la moindre réserve.

C'est ici que les choses se corsent un peu...

J'aimerais maintenant modifier ce projet:  allumer la LED D3 plutôt que la LED D2, par exemple.   C'est ma façon préférée d'apprendre:  je pars d'un exemple tout fait et je le modifie afin de mieux comprendre son fonctionnement.

Je jette donc un coup d'oeil au contenu du fichier "main.c", pour constater que la routine principale est vide!


Bon, on m'indique que les informations pertinentes se trouvent dans d'autres fichiers, qui ont été générés au moyen du MCC:  Microchip Code Configurator.  Effectivement, le projet contient 4 autres fichiers.


C'est effectivement dans ces autres fichiers que les choses se passent.  Voici, à titre d'exemple, un extrait du fichier "pin_manager.h":


...et j'en profite pour rappeler que ce programme se contente d'allumer une LED!

Avec Arduino, ce serait simplement digitalWrite(13,HIGH); !!!

Tous les exemples que j'ai explorés ont cette même caractéristique:  un fichier "main.c" vide (ou presque), et des fichiers d'accompagnements d'une complexité ahurissante.  J'ai testé  l'exemple "Hardware Blink" qui fait clignoter les 4 LEDs à l'unisson, l'exemple "Breathing LED" qui change la luminosité des LEDs par PWM, l'exemple "LED brightness control using potentiometer" qui, comme son titre l'indique, permet de contrôler la luminosité des LEDs au moyen du potentiomètre.  Ils fonctionnent tous à la perfection, mais je n'y comprend rien!

Changement de stratégie, donc...mettons ces exemples de côté.  Je dépoussière un peu mes rudiments de programmation de PIC (ça remonte à 2011!) et je crée un nouveau projet à partir de zéro.

Voici le résultat:  un programme qui allume en alternance chacune des 4 LEDs.  Ce n'est probablement pas la façon la plus élégante de procéder, mais je comprend ce que je fais, et ça fonctionne.


En résumé

Tout fonctionne sans le moindre pépin, et le rapport qualité-prix (gratuit...) est imbattable!  Puisque je ne prévois pas me mettre à programmer des microcontrôleurs PIC de façon intensive dans un proche avenir, j'apprécie cette possibilité de programmer sans devoir installer une volumineuse suite de logiciels.  Mais le débutant devra se débrouiller pour trouver des tutoriels ailleurs car les exemples, peu nombreux, me semblent bien nébuleux.

Yves Pelletier   (Twitter, Facebook)

mardi 1 mars 2016

Afficher dans une page web l'état des broches GPIO de l'ESP8266 ou de l'ESP32

N.B.: Cet article a été mis à jour le 30 juillet 2019 (ajout d'informations sur l'ESP32).

Dans ce tuto, nous allons afficher dans une page web l'état de quelques-unes des broches GPIO d'un module ESP8266 ou ESP32 programmé au moyen de l'IDE Arduino.  Il sera donc possible de consulter à distance ce que mesurent des capteurs branchés à l'ESP8266/ESP32.

IDE Arduino

Pour être en mesure de programmer votreESP8266 / ESP32 avec l'environnement de programmation intégré Arduino, il est important que vous ayez installé dans le logiciel les extensions nécessaires.  Vous pouvez vous référer à cette marche à suivre pour l'ESP8266, et à celle-ci pour l'ESP32.

Le montage

Pour nos tests, nous brancherons un premier bouton poussoir à la broche GPIO 4, un deuxième bouton à la broche GPIO 5, et un potentiomètre à l'entrée analogique "A0" (qui est la GPIO 36  sur l'ESP32, et l'unique entrée analogique sur l'ESP8266.

Voici le schéma du circuit pour ma carte de développement ESP32 (sur cette carte, la broche GPIO 36 porte le symbole "VP".


Voici le schéma du circuit pour un module Wemos D1 Mini (sur ce module, la broche GPIO 4 porte le symbole D2, alors que la broche GPIO 5 porte le symbole D1.


Dans la version initiale de ce tutoriel, j'utilisais un module ESP-12 branché à un ordinateur par l'entremise d'un convertisseur USB-UART fonctionnant en 3,3 V. Le circuit était un peu plus complexe, puisqu'il fallait gérer des broches du module pour l'alimenter et le programmer.

Pour le branchement du potentiomètre au module ESP-12, il fallait ajouter une résistance supplémentaire afin que que la tension ne dépasse pas 1 V. (Cette précaution n'est pas nécessaire sur les cartes de développement complètes, car les concepteurs en on tenu compte).
Le sketch

Le sketch n'est pas très long, car ce sont les bibliothèques qui font tout le travail. Au démarrage, les résistances pull-up internes des broches GPIO 4 et GPIO 5 sont activés (le niveau logique est donc haut quand on ne presse pas le bouton, et il devient pas quand on presse le bouton).


Le résultat

Lors du démarrage du programme, si le moniteur série est ouvert, votre module ESP8266 y affiche l'adresse IP qui lui a été assignée (au besoin, vous pouvez faire un reset pour redémarrer le programme).


Vous accédez à cette adresse IP au moyen de n'importe quel navigateur web pour afficher une page web comportant l'état des pins GPIOs de votre ESP.

Si vous faites des changements (en tournant le potentiomètre ou en appuyant sur un bouton), les modifications seront visibles sur la page web (elle se met à jour automatiquement toutes les 2 secondes).



Yves Pelletier   (Twitter, Facebook)