jeudi 10 août 2017

Module bluetooth HC-06 et Raspberry Pi (python)

Comme le titre l'indique, je vous explique aujourd'hui comment brancher un module bluetooth HC-06 à un Raspberry Pi, et comment utiliser le langage python pour envoyer et recevoir des messages au moyen de ce module.

À moins que quelque chose m'échappe, ce tuto ne devrait être d'aucune utilité pour les propriétaires de Raspberry Pi 3 ou de Raspberry Pi Zero W, qui comportent déjà un module bluetooth intégré. J'ai moi-même fait mes tests avec un Rasbperry Pi 1 Modèle B, ainsi qu'avec un Raspberry Pi 2, avec une version à jour de Raspbian (PIXEL) dans les deux cas.

(Le module bluetooth HC-06 peut aussi être utilisé avec une carte Arduino ou STM32 Nucleo)

Pendant la préparation de cette article, comme c'est souvent le cas avec le Raspberry Pi, je suis tombé sur un tas d'informations désuètes un peu partout sur le web.  Les choses bougent rapidement dans le monde du Raspberry Pi, et les réglages à effectuer sous Raspbian Jessie sont significativement différents de ceux qui devaient être faits dans les précédentes versions de Raspbian.  J'espère donc que les informations de cet article pourront s'avérer utiles avant qu'elles ne deviennent, à leur tour, désuètes!

Connexions

Le module HC-06 est un convertisseur UART/Bluetooth:  ce que le Rasbperry Pi envoie par l'entremise de son transmetteur UART (pin # 8, GPIO 14) sera transmis en bluetooth pour le HC-06, et ce que le HC-06 reçoit par bluetooth est acheminé au Rasbperry Pi par son récepteur UART (pin #10, GPIO 15).

Le module HC-06 doit être alimenté en 5 V même s'il utilise un niveau logique de 3,3 V pour l'échange des données.



  • VCC du HC-06 : Une des sorties 5 V du Raspberry Pi (pin #2, par exemple)
  • GND du HC-06:  Une des pins GND du Rasbperry Pi (pin #6, par exmple)
  • TXD du HC-06:  Pin #10, GPIO 15 du Rasbperry Pi
  • RXD du HC-06:  Pin #8, GPIO 14 du Raspberry Pi

Aussitôt que le module HC-06 est alimenté, une LED rouge se met à clignoter.  Elle restera allumée de façon continue lorsqu'une communication bluetooth sera établie.


Désactivation de la console

Les deux pins UART du Rasbperry Pi peuvent être utilisées comme console Linux, ce qui peut constituer une façon pratique de recueillir des informations lors du démarrage, ou encore d'ouvrir une session sur un Raspberry Pi dépourvu d'un écran et d'un clavier.  Malheureusement, cette fonctionnalité risque d'interférer avec notre propre utilisation du port UART, et nous devrons donc la désactiver.

Pour ce faire, il est possible de modifier manuellement certains fichiers, mais le plus simple est d'utiliser ce bon vieux raspi-config:

sudo raspi-config

On choisit d'abord l'option 5:  Interfacing Options


Puis P6 Serial

Nous refusons la console sur le port série (répondez "non"!):


Mais nous acceptons que le port série soit activé (répondez "oui")




Il faut ensuite redémarrer le Raspberry Pi.


Installation de la bibliothèque pySerial

Si elle ne l'est pas déjà, vous installez la bibliotèque pySerial en écrivant cette commande dans le terminal:

      sudo apt-get install python-serial

Préparation d'un interlocuteur bluetooth

S'il s'agit de la première utilisation de ce module HC-06 avec le deuxième appareil (smartphone, tablette, ordinateur) il faut coupler les deux dispositifs.  Voici la procédure pour l'appairage avec un appareil android (c'est similaire si vous utilisez autre chose qu'un appareil android).

Dans Paramètres, Bluetooth, assurez-vous d'abord que Bluetooth est activé.  S'il est alimenté, le module HC-06 devrait figurer dans la liste des appareils disponibles.



Cliquez sur le nom du module. Le mot de passe est "1234".


Si tout se passe bien, le HC-06 apparaît ensuite dans la liste des périphériques couplés.



À cette étape, la LED rouge du module HC-06 continue de clignoter.  Ce n'est que lorsque la connexion sera établie avec une application de l'appareil android qu'elle demeurera allumée de façon continue.

Appli bluetooth

Il existe un grand nombre d'applications android permettant la communication bluetooth. Pour effectuer mes tests, j'ai utilisé avec succès Serial Bluetooth Terminal par Kai Morich, mais plusieurs autres options sont possibles.  Vous pouvez aussi utiliser l'application réalisée dans cet article au moyen de MIT App Inventor.

Après avoir démarré Serial Bluetooth Terminal, il est important d'établir la communication bluetooth avec le Nucleo en cliquant sur le bouton illustré ci-dessous:


Lorsque la communication est établie, le bouton change de forme, et la LED rouge du module HC-06 cesse de clignoter.


Premier script:  communication unidirectionnelle (compteur)

Ce  premier script permet au Raspberry Pi d'envoyer des nombres croissants par bluetooth.  Ça peut être utile pour vérifier si la connexion fonctionne convenablement.




Le nom "/dev/Serial0" devrait fonctionner pour tous les modèles de Raspberry Pi.  Si ce n'est pas le cas, vous pouvez utiliser "/dev/ttyAMA0" pour les modèles antérieurs au Rasbperry Pi 3, et  "/dev/ttyS0"  pour le Raspberry Pi 3.

Voici ce que ça donne à l'écran de Serial Bluetooth Termibnal:



Deuxième script:  communication bi-directionnelle (contrôle de LEDs)

Ce deuxième script permet d'allumer et éteindre des LEDs branchées au Rasbperry Pi à partir d'un appareil qui supporte bluetooth.



Les connexions du HC-06 n'ont pas changé, mais nous ajoutons une LED à la pin #22 (GPIO 25), et une autre à la pin #24 (GPIO 8).




Les messages que vous pouvez envoyer au Rasbperry Pi sont "a", "b", "c", "d" ou "e". Sur réception d'un de ces messages, le Raspberry Pi allume ou éteint les LEDs selon le protocole pré-établi, puis retourne un message indiquant l'état actuel des deux LEDs.


Yves Pelletier   (TwitterFacebook)

mercredi 2 août 2017

Livre: À la découverte des cartes Nucleo, par Marc Laury


À la découverte des cartes Nucleo
par Marc Laury
Éditions Eyrolles, Collection Serial Makers
280 pages
2017

Saluons avec enthousiasme la parution de ce livre de Marc Laury: trois ans après la mise en marché des premières cartes STM32 Nucleo, les livres qui en parlent sont encore bien rares, et celui-ci, en plus, est en français!  (Du côté anglophone, McGraw-Hill annonce un livre sur le Nucleo par Donald Norris, mais il ne sera disponible que dans quelques mois).

Avant d'entreprendre la lecture de ce livre, je m'attendais à y trouver une bonne part d'informations avec lesquelles j'étais déjà familier, puisque j'utilise assez régulièrement les cartes Nucleo.  Ce ne fut pas le cas:  alors que j'utilise l'IDE en ligne Mbed pour programmer mon Nucleo, Marc Laury préconise plutôt l'utilisation de STM32CubeMX pour la configuration des GPIO, puis de Keil μVision5 pour l'écriture du programme.  Mbed n'est abordé que très brièvement, dans le 18e et dernier chapitre du livre (et une part importante de ces quelques pages explique comment importer un code qui se trouvait sur Mbed pour l'utiliser dans Keil μVision5!).

Première mise en garde, donc:  il ne s'agit pas d'un livre sur la programmation des cartes Nucleo avec mbed.

Deuxième mise en garde: ce livre n'est pas une initiation à la programmation, ni une initiation à la l'électronique.  Tout un tas de livre sur l'Arduino et le Raspberry Pi vont vous expliquer en détail ce qu'est une LED et une boucle "while", car ils supposent vous n'en avez jamais entendu parler auparavant.   Ce n'est pas du tout l'approche de ce livre:   pour être en mesure de bien l'apprécier, vous devriez déjà connaître les bases du C++ et, dans une moindre mesure (puisqu'on utilise exclusivement des shields prêts à l'emploi), quelques bases d'électronique.

Si vous faites partie de ce public cible, le contenu devrait vous plaire:  marches à suivre très détaillées, nombreuses captures d'écran en couleur, par un auteur qui maîtrise très bien son sujet (Marc Laury travaille chez STMicroelectronics depuis deux décennies).

(J'ai peut-être été un tantinet irrité par des répétitions fréquentes d'un chapitre à l'autre.  Par exemple, un variante de la phrase "La compilation via le menu Project and Rebuild all target fils doit donner en bas de l'environnement de développement l'indication 0 Error (s), 0 Warning (s)." apparaît à 22 reprises tout le long du livre.  Le paragraphe "Enfin, connectez la carte Nucleo à l'ordinateur avec un cordon USB, puis lancez la programmation du STM32L152RET6 dans le menu Flash and Download.  La LED LD1 clignote alternativement vert et rouge pendant la programmation, puis se stabilise au rouge une fois la programmation terminée." revient 10 fois.  Je suppose que le livre n'a pas été conçu pour être lu d'une couverture à l'autre.)

Au menu:

Chapitre 1:  un premier chapitre très théorique sur ce qui caractérise les processeurs ARM  Cortex-M (pipeline, architecture RISC, organisation mémoire, etc.) et la famille STM32 en particulier.

Chapitre 2:  description du "hardware" présent sur une carte Nucleo.

Chapitre 3:  L'environnement de développement pour STM32 (STM32 ODE)

Chapitre 4:  Mise au point d'un programme avec Keil μVision5.

Chapître 5:  On fait clignoter une LED...

Chapitre 6:  Port virtuel par USB (communication série entre le Nucleo et l'ordinateur)

Chapitre 7:  Afficheur 7 segments par liaison I2C

Chapitre 8:  Jeu de lumières par liaison SPI

Chapitre 9:  Mesure d'une tension par l'ADC

Chapitre 10:  Capteur de température interne sous l'environnement SW4STM32

Chapitre 11:  Lumière progressive avec un compteur

Chapitre 12:  Interruption par compteur

Chapitre 13:  Alarme par RTC (l'horloge temps réel intégrée du STM32)

Chapitre 14:  Mode faible consommation

Chapitre 15:  Application temps réel (FreeRTOS)

Chapitre 16:  Gestion d'un afficheur TFT

Chapitre 17:  Contrôleur de carte SD

Chapitre 18:  L'environnement de développement MBED

Voici, finalement, un extrait du livre disponible sur le site d'Eyrolles.

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