Serveur javascript abandonnée

_images/logo.JPG
Auteur

J.Soranzo et Gilles

Societe

VoRoBoTics 2

Entity

VoLAB 2

Dépôts Bitbucket

Source de la doc, code ARDUINO, serveur et la doc en html 1

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

WebSocket + Node.js + Express 6

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