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 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:  c'est "1234".




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 pins GPIO de l'ESP8266

Il y a quelques mois, j'avais publié un article qui expliquait comment contrôler l'état d'une sortie de l'ESP8266 à partir d'une page web, ce qui nous avait permis d'allumer et éteindre une LED.

Aujourd'hui, nous allons plutôt afficher dans une page web l'état de quelques-unes des pins GPIO d'un module ESP8266 programmé au moyen de l'IDE Arduino.  Ça peut se révéler très utile lorsque des capteurs sont branchés à votre module ESP8266.

Contrairement au tutoriels précédents, dans lesquels j'utilisais un module ESP-01, j'utiliserai cette fois-ci un module ESP-12, puisqu'il comporte un plus grand nombre de pins GPIO (et l'une d'entre elles comporte un convertisseur analogique-numérique (ADC) qui nous permettra d'afficher dans notre page web une mesure analogique).   Si votre module est un ESP-01, vous pouvez quand même utiliser ce tutoriel, mais vous serez limité à la lecture des pins GPIO 0 et 1. Cette page peut être utile pour distinguer les différents modèles d'ESP8266.

IDE Arduino

Pour être en mesure de programmer votre module ESP-12 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 à cet article si ces extensions complémentaires n'ont pas déjà été installées.


Le montage


Le module est branché à un ordinateur par l'entremise d'un convertisseur USB-UART fonctionnant en 3,3 V (si vous n'en avez pas, vous pouvez aussi utiliser une carte Arduino, comme je le montrais dans cet article).

Toutefois, compte tenu du fort courant consommé par le module, vous le reliez à sa propre alimentation de 3,3 V et non à la sortie 3,3 V du convertisseur USB-UART,

La pin GPIO0 doit être reliée au GND pour que le module puisse être programmé, mais il se peut que vous deviez la relier à 3,3 V pendant le fonctionnement du sketch (dans mon cas, c'était parfois nécessaire, mais pas toujours).

Je vais afficher dans une page web l'état des pins GPIO 4 et 5:  ces dernières seront donc branchées à GND ou à 3,3 V, selon l'état logique auquel on désire les soumettre.

Je désire également afficher l'état de la seule entrée analogique:  celle qui s'appelle ADC/TOUT.  Je vais y brancher un potentiomètre mais attention:  contrairement à ce qu'on pourrait penser, cette pin accepte un signal analogique variant entre 0 et 1 V.   Je dois donc ajouter une résistance en série avec mon potentiomètre pour que la valeur maximale de l'entrée analogique soit de 1 V et non de 3,3 V. Pour un potentiomètre de 10 kΩ, une résistance de 23 kΩ fait l'affaire (en pratique, j'ai utilisé une résistance de 22 kΩ en série avec une résistance de 1 kΩ) .

Le sketch

Le sketch n'est pas très long, car ce sont les bibliothèques qui font tout le travail.



(Comme point de départ, j'ai utilisé un sketch proposé dans un tutoriel d'Adafruit, mais je l'ai beaucoup modifié.)

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; il s'agit de relier temporairement la pin reset au GND).


Vous accédez à cette adresse IP au moyen de n'importe quel fureteur web pour afficher une page web comportant l'état des pins GPIOs de votre module ESP-12 (attention:  cette page n'est pas accessible sur internet, vous devez y accéder au moyen d'un appareil branché sur le même réseau local que votre ESP8266).

Si vous faites des changements (en tournant le potentiomètre ou en modifiant la tension d'une des autres pins), vous devez rafraîchir la page pour que les nouvelles données s'affichent.




Yves Pelletier   (TwitterFacebook)
Related Posts Plugin for WordPress, Blogger...