Étape 6: dispositif d’impression : ce qui est dans le code ?
Notre firmware appareil commence par une définition de classe pour la classe « imprimante ». Les classes sont un peu plus utiles dans les situations où vous souhaitez créer plusieurs instances de quelque chose, mais celui-ci ne donne pas une belle façon de structurer notre code. La plupart des choses que le firmware de l’appareil doit faire ici est créée en tant que méthodes de la classe d’imprimante. L’imprimante conserve également une trace de ses propres paramètres actuels.
À l’intérieur du constructeur de la classe de l’imprimante, nous voyons un One-Liner cool pour configurer le matériel de l’UART (Universal de réception asynchrone et Transmit) dans l’imp :
Cela met en place le matériel d’UART sur les broches 5 et 7, les configure le débit en bauds à 19200 (bits par seconde), 8 bits de données par mot, aucun bit de parité, un bit d’arrêt et aucun contrôle de flux ; à peu près les plus simples paramètres de UART que vous pouvez utiliser.
Ci-dessous la définition de classe pour l’imprimante, l’appareil enregistre quelques rappels pour l’agent. Nous pouvons penser de ces crochets, chacun donnant à l’agent une façon de dire à l’appareil de faire quelque chose. Rappels de l’agent sont enregistrés auprès de « agent.on() », qui prend deux arguments : une chaîne, qui est transmise par l’agent de dire à l’appareil qui rappel à utiliser ; et une fonction qui sera appelée lorsque l’agent envoie cette chaîne :
En regardant le firmware, nous pouvons voir que nous avons enregistré des rappels pour toutes sortes de choses ; tête basculante texte gras ou souligné, disant l’imp pour démarrer le téléchargement d’une image de l’agent en utilisant le rappel de « pull » (que vous trouverez comme méthode de la classe d’imprimantes), alimentant un certain nombre de lignes, etc..
Quand les rappels de l’agent sont tous enregistrés et les classes sont définies, nous instancions la classe d’imprimante pour créer un objet printer et nous sommes prêts à aller. Cette version du micrologiciel est principalement axée sur l’événement ; morceaux de celui-ci sont remis en action lorsque l’agent signale qu'il est temps de faire quelque chose.
Le firmware du mandataire est sensiblement la même, mais encore plus courte, avec quelques intéressants morceaux jetés pour les interactions HTTP. Jetons un coup d’oeil :
Nous lancer le tout avec une définition de la fonction printLogo - nous verrons que cela enregistrée comme un rappel pour l’événement de « logo » un peu plus loin vers le bas. Un très utile peu ici est l’illustration de comment faire une demande HTTP GET dans votre Agence :
Nous faisons un objet de requête avec « http.get(reqURL), puis envoyez-le, qui retourne un objet de réponse http. Le corps de cet objet de réponse contient les données d’image - c’est aussi simple que ça !
Après avoir fait un peu de travail avec les données d’image, nous voyons l’agent envoie un événement à l’appareil. Ici, nous avons besoin d’envoyer plusieurs paramètres de l’appareil, afin que nous les emballer dans un tableau et ensuite envoyer ce tableau à l’événement :
Plus loin vers le bas, nous voyons rappels inscrits pour les événements de « pull » et « imageDone » de l’appareil, puis un rappel enregistré avec « http.onrequest ». Il s’agit d’un très utile peu d’agent API: la fonction d’inscription ici sera appelée lorsqu’une requête HTTP (de n’importe quelle méthode) est présentée à l’agent URL répertorié dans les paramètres du périphérique. C’est comment l’agent gère les nouvelles données sur le site de démo d’imprimante :
Une très importante partie ici, pour l’envoi de messages à l’agent: lorsque votre navigateur envoie un message, il envoie un chèque avant le vol tout d’abord pour voir quelles méthodes le destinataire prend en charge. Le bénéficiaire fournit cette information avec ses en-têtes de réponse. Si ceux-ci ne montrent pas que l’agent prend en charge le message, la page ne sera pas envoyer le corps du message, et la demande à l’agent sera vide ! Voici où nous avons mis ces en-têtes pour permettre à notre page de travailler :
L’agent effectue une autre chose utile une fois définies les en-têtes, mais avant d’envoyer une réponse : il détermine s’il faut utiliser le texte message ou image gestionnaire de messages basé sur le chemin de l’URL à laquelle la demande a été faite :
Dans le code de l’agent, nous avons vu la dernière fois le rappel enregistré pour l’événement de « logo » de l’appareil :
C’est le match entier de shooting ! L’imprimante tout connecté à internet, à moins de 600 lignes !