INTRODUCTION
Avez-vous déjà pensé d’utiliser Firmata pour votre projet Arduino , seulement pour découvrir que le périphérique que vous souhaitez utiliser n’est pas supporté par Firmata ? Cet article illustre l’approche étape par étape, j’avais l’habitude d’ajouter le support du moteur pas à pas à PyMata et à ses associés Arduino Sketch, FirmataPlus. Après lecture de ce tutoriel, vous devriez être prêt à étendre Firmata pour votre appareil.
Avant de commencer - certains renseignements sur Arduino/Firmata généraux
En quoi consiste Firmata ? Citant la page web de Firmata, « Firmata est un protocole générique permettant de communiquer avec des microcontrôleurs de logiciel sur un ordinateur hôte. »
Arduino Firmata utilise une interface série pour transporter les informations de commande et de rapport entre un microcontrôleur Arduino et un PC, généralement à l’aide d’un lien de série/USB set à un taux de 57600 bps. Les données transférées à travers ce lien sont binaires dans la nature et le protocole est implémenté dans un modèleclient/serveur .
Le côté serveur est transféré à un microcontrôleur Arduino sous la forme d’une esquisse de l’Arduino. L’esquisse de StandardFirmata , fourni avec l' IDE Arduino, contrôle les broches de l’Arduino d’e/s, tel que commandé par le client, et signale des changements de la broche d’entrée, ainsi qu’autres informations en rapport au client. FirmataPlus est une version étendue de StandardFIrmata.
L' Arduino client utilisé pour cet article est PyMata. C’est une application Python qui est exécutée sur un PC. Celle-ci envoie les commandes à et reçoit des rapports de, le serveur de l’Arduino.
Pourquoi utiliser Firmata ?
Arduino microcontrôleurs sont de merveilleux petits dispositifs, mais processeur et sa mémoire ressources sont un peu limitées. Pour les applications qui sont processeur ou mémoire intensive, il y a souvent peu de choix mais au déchargement de la demande de ressources sur un PC afin que l’application soit réussie.
Mais ce n’est pas la seule raison pour l’utilisation de StandardFirmata. Lorsque vous développez des applications de Arduino poids plus légers, un PC peut fournir des outils et des fonctions de débogage non directement disponibles sur un microcontrôleur Arduino. À l’aide d’un serveur et un client « fixe » contribue à isoler la variabilité d’une application PC, où il est géré plus facilement. Une fois que l’application est parfaite, il peut être traduit à un standalone personnalisé, Arduino Sketch.
Pourquoi utiliser des PyMata?
Au moment d’écrire ces lignes, PyMata est le seul Python client qui implémente le protocole complet de StandardFirmata. C’est une bibliothèque multi-plateforme qui prend en charge les systèmes d’exploitation Windows, MAC et Linux dès le déballage !
En outre, PyMata a été conçu afin que les utilisateurs peuvent facilement étendu pour supporter d’autres capteurs et actionneurs, ne sont pas actuellement pris en charge par StandardFirmata.
Pas longtemps après que PyMata a été initialement publié, il a été étendu à l’appui de la bibliothèque de ton Arduino et à prendre en charge jusqu'à six simultanée HC-SR04 type sonar détecteurs de distance. Les extensions côté serveur pour que ces fonctionnalités sont fournies dans FirmataPlus.
Vue d’ensemble du PyMata Client et le serveur FirmataPlus
PyMata est une application Python multi-thread de haute performance. Son « thread de commande » traduit les appels API utilisateur dans les messages de protocole Firmata et transmet ces messages au microcontrôleur Arduino. Le « fil de journaliste » reçoit et interprète et agit sur les messages de Firmata provenant du microcontrôleur Arduino.
Une version personnalisée de StandardFirmata, appelé FirmataPlus, est incluse dans la distribution de PyMata . Actuellement, il ajoute ce qui suit à StandardFirmata :
- Une interface de périphérique Piezo à l’aide de la bibliothèque de ton Arduino
- Support pour multiples capteurs de distance à ultrasons à l’aide de la bibliothèque de NewPing
- Prise en charge limitée (Arduino Uno uniquement) pour les encodeurs rotatifs à l’aide de la bibliothèque de molette adafruit
- Un débogage imprimer fonction pour imprimer des valeurs internes de croquis à la console Python.
Comprendre la représentation des données Firmata
Firmata utilise une interface de communication série de données relatives aux transports vers et depuis l’Arduino. Le protocole de communication Firmata est dérivé du protocole MIDI qui utilise un ou plusieurs octets de 7 bits pour représenter les données. Parce que 7 bits peut contenir une valeur maximale de 128, un élément de données qui a une valeur supérieure à 128, doivent être « démontés » en plusieurs morceaux octets de 7 bits avant d’être marshalée à travers la liaison de données. Par convention, l’octet le moins significatif (LSB) d’un élément de données est envoyé d’abord, suivie de plus en plus importants éléments de l’élément de données. L’octet le plus significatif (MSB) de l’élément de données est la dernière donnée élément envoyée.
Ainsi, par exemple, si un paramètre appelé max_distance avec une valeur décimale de 525 a besoin d’être envoyés sur la liaison série, il faut tout d’abord être "démonté" en morceaux de 7 bits.
Voici une discussion sur comment cela est réalisé :
La valeur décimale de 525 équivaut à la valeur hexadécimale de 0x20D, une valeur de 2 octets. Pour obtenir le LSB, nous masquons la valeur de AND'ing avec 0x7F. « C » et Python implémentations sont montrées ci-dessous :
Après masquage, max_distance_LSB contiendra 0x0d. 0x20D & 0x7F = 0x0D
Ensuite, nous avons besoin d’isoler le MSB pour cette valeur de 2 octets. Pour ce faire, on passera de la valeur de 0x20D vers la droite, 7 places.
Après déplacement, max_distance_MSB contiendra une valeur de 0 x 04.
Lorsque les données marshalées « chunkified » sont reçues, il faut être rassemblés dans une seule valeur. Voici comment les données sont remontées en « C » et en Python
Après le remontage, la valeur est égale à une fois de plus les 525 décimale ou hexadécimale 0x20D.
Ce processus de démontage/remontage peuvent être effectuée par le client ou le serveur.