Serveur javascript abandonnée¶
- Auteur
J.Soranzo et Gilles
- Societe
- Entity
- Dépôts Bitbucket
- Création
05/2024
- Maj
05/2024
Explications à posteriori¶
Nous étions parti sur un serveur Javascript (pour conservé le même langage côté front end et backend).
Difficulté la connection automatique au port série nous a conduit par manque d’expérience à abandonner cette solution (peut-être très proche du but…)
Mise en place du serveur node.js / express.js Pour mémoire et abandonné¶
Dans _02-realisation/_01-software/brasRobotWebGuiServer
Pour lancer le serveur:
nodemon app.js
Première route:
app.get('/', (req, res) => {
res.sendFile(`${__dirname}/index.html`)
})
to do : ajouter les autres routes…
npm i serialport
npm install -g @serialport/list
Websocket et node.js¶
Une des api se nomme socket.io
https://www.scriptol.fr/javascript/nodejs-socket.php
Mais ce n’est pas la seule : ws: a Node.js WebSocket library 3
La librairie ws est également hébergé sur gihub : github de ws 4
Il y a aussi tout simplement WebSocket de Mozilla (celui du code étudié)
Note
Au final dans notre serveur, nous avons utilisé la librairie nodejs ws (voir les liens ci-dessus)
Node.js + express.js + websocket.js¶
WebSockets tutorial: How to go real-time with Node and React video yt 5 Dans cette vidéo, on réalise un chat. Côté serveur : avec Node.js à partir de 4:15. Client à partir de REACT et websocket
Question : et le ws de l’appli web ?¶
Qu’en est-il de la lib utilisée par l’appli ?
Nous n’avons pas trouvé la réponse. Toujours est-il que cela fonctionne.
ws = new WebSocket(`ws://<?echo _SERVER("HTTP_HOST")?>/remote_arm`, "text.phpoc");
Est-ce que tous les navigateur utilisent la même API? Quasi oui il s’agit d’un IETF standard u Internet Engineering Task Force (IETF) The WebSocket Protocol 7
Node.js, Express.js et les Promise¶
Nous sommes resté bloqué sur SerialPort.list qui retourne une promesse.
Lorsqu’on fait appelle à une promesse au sein d’une fonction:
var getPortsList = () => {
var portsList = [];
console.log("dans la fonction");
SerialPort.list().then(
function (ports) {
ports.forEach(function (port) {
console.log("Po____rt: ", port.path);
portsList.push(port.path);
})
}
)
console.log(portsList);
return portsList;
};
La liste n’est mise à jour que lorsque toute la chaîne d’appel de fonction est terminée.
Solution : remonter la génération de la liste à la racine du serveur.
Article intéressant : How to automatically connecting Arduino using serial-port in NodeJS 8
Gestion des erreur node.js SerialPort¶
var portCom = new SerialPort({ path: "COM8", baudRate: 9600 }, (err)=>{
if (err){
return console.log('Error', err.message);
}
}
);*
Version js ABANDONNEE¶
Ligne 63 de app.js modifiée et intégrée dans le code ARDUINO
La fonction server app.js checkcom utilise les codes fabricant pour reconnaitre l’ARDUINO.
le CH340 renvoie wch.cn
L’Arduino officiel : Arduino LLC (www.arduino.cc)¶
Bilan au 13/05/2023¶
On a un serveur node.js qui:
se nomme app.js
sait vérifier la liste des port com
sait vérifier la présence du simulateur
- sert un fichier index.html hyper simplement contenant 2 liens:
lancer l’interface
vérifier la connexion (pas de remonté vers la page du résultat - que du console log)
sert l’interface du bras mais c’est tout
sert le fichier toto pour allumage de la LED
sait transmettre des commandes de LED vers le simulateur ARDUINO
Ce jour, nous sommes tombés sur le comportement de ArduinoPort.on('data', function (data)
.
Et ArduinoPort.close
. Arduino.on reste actif même quand le script est terminé… Donc, il conveint
de mettre en place un mécanisme de close avec un moyen spécial.
sait mettre à jour correctement dans le navigateur l’état de la connexion avec le simulateur
sait établit un connexion websocket avec le serveur
sait rompre la connexion
sait transmettre les angles des moteurs