lundi 7 mars 2016

8 capteurs analogiques sur le même ESP8266

Il y a quelque jours, je vous ai présenté un projet qui consistait à afficher dans une page web les mesures prises par des capteurs branchés à un module ESP8266.  Puisque l'ESP-12 ne comporte qu'une seule entrée analogique, nous nous étions limité à un seul capteur analogique.

Doit-on en conclure qu'il est impossible de brancher plusieurs capteurs analogiques sur un même ESP8266? Pas du tout:  grâce au multiplexeur CD4051 (que nous avions déjà étudié dans cet article publié à l'été 2014), il est possible de brancher jusqu'à 8 capteurs analogiques différents sur l'unique entrée analogique de l'ESP8266.  C'est ce que nous allons faire aujourd'hui.

Notre projet consiste donc à brancher 8 capteurs analogiques à un même module ESP8266, et à afficher leur valeur dans une page web...

...bon d'accord, dans les faits, je me suis contenté de 4 capteurs, car ça devenait un peu redondant, mais puisque le CD4051 comporte 8 entrées, vous pouvez facilement modifier mon sketch pour brancher 8 capteurs si c'est ce dont vous avez besoin.

IDE Arduino

Nous allons programmer l'ESP8266 au moyen de l'IDE Arduino.  Les extensions nécessaires à la programmation de l'ESP8266 doivent donc avoir été installées.  Si ce n'est pas le cas, vous pouvez suivre les instructions disponibles ici.

Le circuit

  • Vous devez utilisez un module ESP8266 qui comporte une entrée analogique (ADC), comme par exemple le module ESP-12.  Le module ESP-01 ne convient pas, puisqu'il ne comporte pas d'entrée analogique.
  • L'entrée ADC de l'ESP8266 requiert une tension située entre 0 et 1 V;  puisque les capteurs sont alimentés par une tension de 3,3 V,  vous devez concevoir vos diviseurs de tension de façon à tenir compte de cette limite. La loi d'Ohm vous permet de calculer facilement les valeurs de résistances nécessaires, et c'est une bonne idée de faire quelques tests avec un multimètre avant de brancher vos capteurs sur l'ESP8266.
  • L'alimentation de 3,3 V n'est pas la sortie 3,3 V du convertisseur USB-UART.  Il s'agit d'une alimentation externe, car l'ESP8266 a la réputation d'être plutôt gourmand en courant.
  • Je n'explique pas ici le fonctionnement détaillé du multiplexeur CD4051, puisque je l'ai déjà fait ici.
  • Le capteur 1 (un potentiomètre) est relié à l'entrée Y0 (pin 13) du CD4051.
  • Le capteur 2 (une photorésistance) est relié à l'entrée Y1 (pin 14) du CD4051
  • Le capteur 3 (une thermistance) est relié à l'entrée Y2 (pin 15) du CD4051
  • Le capteur 4 (un potentiomètre) est relié à l'entrée Y3 (pin 12) du CD4051
  • GPIO4 de l'ESP8266 est configuré en sortie et relié à l'entrée S0 (pin 11) du CD4051
  • GPIO5 de l'ESP8266 est configuré en sortie et relié à l'entrée S1 (pin 10) du CD4051
  • GPIO15 de l'ESP8266 est configuré en sortie et relié à l'entrée S2 (pin 9) du CD4051
  • La sortie du CD4051 est la pin 3; elle est reliée à l'entrée ADC de l'ESP8266.
  • Les pins GPIO4, GPIO5 et GPIO6 servent à sélectionner le capteur dont la valeur sera acheminée à l'entrée ADC de l'ESP8266,


Le sketch

Voici le sketch qui permet à l'ESP8266 d'afficher les résultats sur une page web:


Utilisation et résultats

Lors du démarrage du programme, l'adresse IP de votre ESP8266 s'affiche dans le moniteur série.


Il s'agit d'accéder à cette adresse IP à partir de n'importe quel fureteur web lié au même réseau WiFi pour voir s'afficher les valeurs mesurées par chaque capteur­.   Vous devez rafraîchir la page pour que ces valeurs se mettent à jour.




Yves Pelletier   (TwitterFacebook)

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   (TwitterFacebook)

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   (TwitterFacebook)

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   (TwitterFacebook)