Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Technologie de l'Internet des objets

Capteurs et commandes avec le module Bluetooth RN487x de Microchip

Découvrez la famille de modules Bluetooth RN487x et comment les configurer pour vos projets de périphériques basse consommation.

Si vous développez un petit périphérique à faible consommation, il y a de fortes chances que vous considériez Bluetooth comme votre couche de communication.

Au fur et à mesure que la norme a évolué, les appareils connectés par Bluetooth ont proliféré. Des modules matériels ont été introduits qui fournissent un SoC (système sur puce) complet pour presque toutes les conceptions de périphériques. Le Nordic nrf52840 en est un bon exemple. Le cœur du système est un processeur 32 bits et une radio Bluetooth multiprotocole. Ce noyau est entouré de toutes les interfaces dont vous pourriez avoir besoin; GPIO, PWM, USB, SPI, I 2 S, et bien d'autres.

L'inconvénient de ce puissant SoC, et d'autres, est la complexité. Il y a une courbe d'apprentissage et un temps de développement importants nécessaires pour créer et intégrer le logiciel embarqué nécessaire pour ces SoC.

Cependant, pour certains des types de périphériques les plus courants, il existe des alternatives plus simples. Si votre périphérique est avant tout un capteur à distance ou une télécommande, avec un nombre limité de canaux (analogiques et numériques), vous pouvez probablement atteindre vos objectifs avec le module RN487x fabriqué par Microchip.

Cette famille de deux modules Bluetooth fournit plusieurs canaux numériques et analogiques simultanés et bidirectionnels. Le module est adapté à des conceptions spécifiques en stockant simplement un peu de configuration dans la NVRAM du module. Malgré la simplicité, le module est toujours conforme à la norme BLE (Bluetooth low-energy), il est donc compatible avec les clients Bluetooth les plus récents, tels que les smartphones modernes.

Dans cette série, nous allons démontrer l'utilisation du module RN487x. Nous allons créer un périphérique connecté Bluetooth fonctionnel pour chacune des quatre tâches ; un capteur numérique, une commande numérique, un capteur analogique et une commande analogique. Chaque exemple comprend un circuit nominal, et la configuration nécessaire sur la RN487x. Un script d'application simple pour exercer le périphérique est également fourni. Les points d'interface dans le script d'application sont bien documentés; maximiser le potentiel d'incorporer ces périphériques en tant que sous-systèmes dans des conceptions plus grandes.

Présentation de la conception

Examinons une répartition graphique pour l'exemple de « capteur analogique », avec les interfaces clés en rouge.

Une représentation d'un système Linux communiquant avec un périphérique

Il y a trois éléments du système que nous allons créer. Pour le périphérique, nous devons créer du matériel qui fournit le signal de notre capteur ; le transducteur dans cet exemple. Il génère une tension analogique variable. Pour l'utilisateur, nous allons créer une application pour présenter les données; le script Python dans cet exemple.

Le script doit utiliser l'API GATT pour transférer des informations vers et depuis le périphérique. Nous devrons également créer une configuration dans le module RN487x. Cette configuration contrôlera le flux de données entre l'application et le matériel.

Sélection des composants

Il existe deux modules dans la famille RN487x; la RN4870 et la RN4871. Ils diffèrent par le nombre et le type de broches fournies pour les E/S. Vous pouvez retrouver ces contraintes dans la fiche technique et le mode d'emploi, mais c'est un peu épars. Ci-dessous, une réorganisation du budget des broches pour les deux puces. Cette disposition devrait permettre de voir plus facilement de quelle puce vous avez besoin pour votre périphérique.

Il existe trois types de broches d'E/S disponibles sur les modules c :

Tapez Description
ADC Entrée analogique :un niveau de signal d'entrée est converti en une plage numérique.
PWM Sortie analogique :une paire de nombres est convertie en une onde carrée. Les nombres contrôlent la fréquence et le rapport cyclique de l'onde carrée.
DIO Entrée ou sortie numérique :pour l'entrée numérique, le niveau de signal haut ou bas représente 1 ou 0 respectivement. Vice-versa pour la sortie numérique.

Et voici les budgets des broches pour les deux modules :

RN4870

Image de la fiche technique RN487x

Nom de l'épingle/capacité P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC x x x x
PWM x x
DIO x x x x x

RN4871

Image de la fiche technique RN487x

Nom de l'épingle/capacité P1_2 P1_3
ADC x
PWM
DIO x x

Ces tableaux doivent indiquer clairement que si vous n'avez pas besoin de PWM et que vous n'avez besoin de gérer qu'un ou deux signaux, utilisez le 4871. Cela économisera des ressources. Si vous avez besoin de PWM, ou si vous souhaitez gérer plus de deux signaux, alors vous avez besoin du 4870. Pour notre capteur analogique, nous n'avons qu'une seule entrée analogique donc le 4871 serait suffisant. Nous connecterions le signal à la broche P1_2 du module.

Couche de profil GATT (attribut générique) de la pile de protocoles BLE

Nous sommes presque prêts à mettre en œuvre des exemples réels. Mais pour écrire l'application utilisateur, nous avons besoin d'une compréhension plus précise de l'API que nous utiliserons lorsque nous parlerons au périphérique.

Tous les appareils Bluetooth Low Energy utilisent le profil d'attribut générique (GATT) pour l'échange de données structurées. Dans ce modèle, le périphérique est organisé comme un serveur contenant une simple base de données. La base de données contient à son tour un certain nombre de variables qui représentent les données utiles. Des applications telles que notre script Python sont organisées en tant que clients qui utilisent l'API GATT pour effectuer des requêtes basées sur le nom dans la base de données. L'API peut être utilisée pour lire les valeurs de la base de données et pour écrire des valeurs dans la base de données.

En guise d'aperçu, voici deux appels de méthode API GATT utiles en Python :

gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(bytearray([8]))

Le premier sert à établir une connexion avec le périphérique. Le second écrit des valeurs dans la base de données ; ces valeurs sont immédiatement exprimées en sorties numériques sur le périphérique. Le premier argument de la méthode « write » est un handle spécifique à la ou aux sorties numériques que nous voulons contrôler. Il ne reste que quelques lignes supplémentaires pour un exemple fonctionnel complet.

Cette API est exposée dans le cadre des services Bluetooth sous iOS, Android, Windows et Linux. Les exemples de cet article sont écrits en Python et fonctionneront dans de nombreuses distributions Linux courantes.

Configuration des modules

Le paramètre 'vh_handle' dans la méthode de script ci-dessus nous conduit à l'élément final de ce modèle de conception. Le paramètre est une référence dans le logiciel pour un signal de niveau physique spécifique sur le périphérique. Mais comment se termine ce chemin de données ? Il y a deux éléments de configuration dans la NVRAM du RN487x qui feront cela; définition caractéristique et reliure à épingle.

La configuration RN487x est chargée dans le module avec un langage de commande personnalisé. Voir l'annexe pour un guide général sur l'établissement d'une connexion console au module et sur l'émission de commandes de configuration.

Après avoir émis ces commandes, la configuration non volatile dans le RN487x ressemblera à ceci :

Notez que toutes les valeurs de données existent dans une hiérarchie à deux niveaux de « services » et « caractéristiques ». Cette organisation est plus que ce dont nous avons besoin, mais devient utile pour les systèmes complexes où plusieurs capteurs et contrôles existeraient au sein de services logiquement séparés.


Ceci conclut la première partie de notre série en trois parties sur le module RN487x. Les parties 2 et 3 utiliseront le même modèle de conception pour créer une entrée numérique, une commande numérique, un capteur analogique et une commande analogique.

La partie 4 comprend également quelques sujets pour une étude plus approfondie qui s'appliquent à tous les exemples.

Ci-dessous, vous trouverez une Annexe d'informations pour configurer vos modules et les utiliser avant chacune des descriptions de projets qui suivront dans d'autres articles.

Utiliser une connexion de console pour configurer le RN487x

Pour configurer le RN487x, alimentez d'abord le module et établissez une connexion série entre le module et un poste de travail. Chacun de nos circuits de démonstration dispose d'un cavalier "prog" à 3 broches qui expose les signaux RX, TX et GND nécessaires. Si vous ne savez pas comment établir cette connexion avec votre poste de travail, un excellent guide est disponible ici.

Démarrez un émulateur de terminal sur votre poste de travail. Un émulateur particulièrement bien adapté et largement disponible est l'utilitaire « miniterm » qui est inclus dans la plupart des environnements Python. Dans un shell de poste de travail, il peut être démarré comme ceci :

python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

Cet exemple montre un nom de port (/dev/ttyUSB0) approprié pour un système Linux. La forme du nom du port sera différente pour les autres systèmes d'exploitation. Le débit en bauds par défaut du module est de 115 200 et il y a peu de raisons de le changer.

Le module RN487x est en mode DATA par défaut. Nous avons besoin du mode COMMANDE. Ce mode est activé en tapant trois caractères du signe dollar (« $$$ ») dans l'application d'émulation de terminal. Vous ne verrez pas les caractères dans la fenêtre du terminal, mais le résultat devrait être une invite de commande renvoyée par le RN4871 :

CMD>

Essayez d'appuyer sur la touche 'd' suivie de la touche 'enter'. Vous devriez voir quelque chose comme ceci comme résultat :

CMD> BTA=D88039F80080 Nom=RN_BLE Connecté=non Authen=2 Caractéristiques=0000 Prestations=00 CMD>

Il s'agit d'une description minimale de l'état du module. Notez que l'interpréteur de commandes n'a pas affiché le caractère que vous avez tapé ("d"). Vous devez activer « écho » pour résoudre ce problème. Pour ce faire, appuyez sur la touche '+' suivie de la touche 'enter'. L'appareil devrait répondre comme ceci :

CMD> ÉCHO ACTIVÉ CMD>

Vous êtes maintenant à un point où vous pouvez effectuer diverses tâches de configuration décrites dans le reste de ce projet. La création d'un service, par exemple, s'effectue en tapant simplement une commande "PS" complète sur une ligne, suivie de la touche "enter". Exemple :

CMD> PS,59c88760536411e7b114b2f933d5fe66 OK

Chacune des configurations de projet nécessite également qu'un script multiligne soit engagé dans le module NVRAM. Ce type de commande multiligne nécessite un peu plus d'explications. Vous commencez la saisie du script avec une commande « WW », suivie de « enter ». Tapez ensuite chaque ligne de script. Chaque ligne de script, y compris la dernière ligne, se termine également par la touche « enter ».

Enfin, vous validez le script en appuyant sur la touche « esc ». Exemple :

CMD> ww @CONNECTICUT |O,08,72 OK CMD>

Initialisation commune du module

Si vous avez utilisé un module RN487x pour l'un des exemples de ce projet, ou si vous avez utilisé le module à des fins totalement différentes, et que vous êtes sur le point de configurer le module pour un autre exemple, il est possible que le module ait une configuration qui entrera en conflit avec la prochaine utilisation prévue.

​Les étapes suivantes doivent être suivies avant chaque exemple dans ce projet :​

  • Effacez tout script existant.
  • Activer le traitement des scripts.
  • Effacer toute définition de service/caractéristique existante.
  • Supprimez toutes les fonctions spéciales de la broche que nous utilisons (P1_2, index 0A).
  • Redémarrez le module.

Utilisez la section de l'annexe précédente pour accéder au shell de commande du module. Utilisez ensuite la séquence de commandes suivante pour effectuer l'initialisation nécessaire :

CMD> WC OK CMD> SR,0040 OK CMD> PZ OK CMD> SW,0A,00 OK CMD> R,1 Redémarrage

Configuration Linux requise pour exécuter des exemples de scripts Python

Matériel

Le système exécutant ces scripts aura bien sûr besoin de matériel prenant en charge Bluetooth Low Energy (BLE). BLE a été introduit dans la version 4, donc si votre matériel Bluetooth spécifie une version inférieure, cela ne fonctionnera probablement pas pour ces exemples.

Si vous souhaitez acheter un adaptateur USB pour un poste de travail afin d'essayer ces exemples, je suggère n'importe quel adaptateur qui utilise le Qualcomm CSR8510. Une instance est disponible à l'achat ​ici​.

Logiciel

Cette configuration a été vérifiée pour Debian 10. Elle devrait être applicable aux distributions basées sur Debian comme Ubuntu. Il y a deux composants directement accessibles par ces exemples qui ne sont pas installés par défaut dans Debian 10 ;

  • Le module Python pour accéder à la pile Bluetooth. Ce composant est disponible via le système de gestion des packages et est nommé « python-bluez ».
  • Le module Python spécifiquement pour les appels Bluetooth GATT ; « gattlib ». Ce composant est disponible à partir de l'index officiel du package Python (via l'utilitaire 'pip').

L'installation « pip » de « gattlib » crée une bibliothèque ELF. Ce processus nécessite également des outils et des bibliothèques.

En mettant tout cela ensemble, une liste de packages doit être demandée au gestionnaire de packages système, suivie d'une demande de module unique à « pip ». Un script pour effectuer ces actions a été fourni ici. Si vous choisissez d'exécuter le script, vous devrez lui donner les autorisations « exécuter » après le téléchargement.

Références

  • Fiche technique RN487x
  • Guide de l'utilisateur RN487x
  • API GATT sous Windows
  • API GATT dans iOS
  • API GATT en Python

Revenez pour les prochaines parties de cette série de projets, où nous créerons les exemples complets.

Passez aux projets 1 et 2 : construction d'une entrée numérique et d'une commande numérique.


Technologie de l'Internet des objets

  1. La synergie de l'IoT cellulaire et du Bluetooth LE
  2. Concevoir avec Bluetooth Mesh :puce ou module ?
  3. Contrinex :capteurs intelligents et barrières immatérielles de sécurité compatibles avec le cloud avec interface Bluetooth
  4. ADLINK :déployez l'IA de la périphérie vers le cloud avec Edge AI Solutions et la plate-forme NVIDIA EGX
  5. Capteurs analogiques sans entrées analogiques sur le Raspberry Pi
  6. Lecture de capteurs analogiques avec Raspberry Pi et Zabbix Supervisor
  7. Que dois-je faire avec les données ? !
  8. Exploiter les données IoT de la périphérie vers le cloud et vice-versa
  9. Numérisation et industrie agroalimentaire