Étape 4: Serveur de Node.js
Voici les principales tâches du serveur :
- Initialiser le port série et démarrer l’Arduino
- Démarrer un serveur HTTP
- Servir la page index.html (et toutes les pages statiques de "/")
- Répondre à la poste de AJAX à « / start » en fournissant les données à l’Arduino via l’objet port série
- Inscrire un rappel pour écouter l’Arduino pour l’achèvement
- Reçoit et regrouper les données de l’Arduino dans un objet JSON et l’envoie au client via socket.io
Tout cela est fait en une centaine de lignes de code grâce à des modules existants de NGP . Le serveur accepte un paramètre de ligne de commande, le nom du port série (/ dev/tty * sur mac/unix et COM * sur Windows).
[Mise en garde : il s’agit de ma première fois en utilisant le paquet serialPort . Je n’ai aucun problème, mais je n’ai pas ce sentiment de vraiment comprendre encore, ce qui me fait mal à l’aise. Parfois la console de débogage a caractères bizarres dedans lors du démarrage de l’Arduino. Ça pourrait être dû à l’ATS n’étant ne pas vidé, ou il pourrait être dû à quelque chose que m’échappe quant au port série. S’il vous plaît laissez-moi savoir si vous avez des questions.]
Avant server.js commence le service HTTP par l’auditeur de app Express, il initialise le port série fourni par le premier argument sur la ligne de commande. Il faut un délai de trois secondes d’attente pour le périphérique de démarrage. J’ai ajouté des mesures préventives supplémentaires à attendre pour la chaîne « initialisée » de l’Arduino, avant que l’utilisateur puisse envoyer des données.
Serveur de Communication client
Il y a seulement deux points de terminaison exposé par le serveur, le poste de « / start » et obtenir de « / ».
Le Client d’appel serveur via AJAX est géré par un formidable objet de formulaire. Le point de terminaison app Express "localhost: 8080 / start" capture la transmission du message par l’intermédiaire de l’objet form, qui est disponible en tant qu’objet JSON texte nativement. Je n’ai vraiment besoin un objet, j’aurais pu utiliser une chaîne de texte, mais j’ai laissé une certaine souplesse. Je n’a pas même inscrire un rappel de .on() avec l’objet POST, je me réfère simplement au paramètre « champs » pendant l’appel parse() .
La page index.html est servie à l’aide du module de serveur Express page statique. Tout dans le public / dossier peut être servi de cette façon, y compris des modules CSS et JS.
Serveur de Communication de l’Arduino
Étant donné que le client a déjà mis en forme la chaîne de commande, le serveur il écrit simplement sur le port série comme-utilise serialport.write() via l’objet de l’analyseur .
Arduino pour la Communication serveur
La réponse de l’Arduino est livré dans le rappel de .on('data') du port série dans l’objet de l’analyseur
Serveur de Communication Client
Le rappel de données gère également empaqueter les données dans un objet JSON et les tirer vers le client via un push socket.io. (C’est tout très passionnante et rafraîchissant par rapport à faire pousser du web dans la fin des années 1990!)
J’ai ajouté quelques commandes de journal pour que je peux regarder les flux de données de l’Arduino et le client. J’ai aussi utiliser le paquet de morgan pour tracer les requêtes HTTP.