Serveur

_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

01/04/2023

Maj

04/2023

Passage à un serveur Python/Flask

Synthèse

Serveur : ``0021_brasRobot_webGUI\projet\_02-realisation\brasrobot2023serveur``
Lancer une fennêtre de commande DOS dans le dossier  brasrobot2023serveur
.venv\Scripts\activate
python server.py
Dans la fenêtre navigateur : localhost:8300 (sur la machine qui héberge le serveur)
ou adresse_ip_du_serveur:8300 sur une autre machine.

Pour lancer le serveur, Gilles a développé server.bat

Serveur hyper simple

serveur hyper simple:

Premier test serveur python : python -m http.server 9000

Premier script serveur

Puis serveur flask de base repris d’un très vieux projet perso même pas terminé iot_plateforme

Flask quickstart 3

Note

Lancement de server

ATTENTION Travailler dans .venv : commande d’activation : .venv\Scripts\activate

Lancer le serveur : python server.py

Le serveur est alors accessible localhost:8300

Commande pour créer un environnement .venv:

python -m venv /path/to/new/virtual/environment

Exemple

n'importe où : python -m venv c:\tmp\monEnvironnementVirtuel

Dans un dossier en particulier avec un chemin relatif python -m venv monEnv

pour nous

python -m venv .venv

Ajout websocket dans Flask

venv : doc officielle : venv — Création d’environnements virtuels 4

Ajout websocket en python dans le serveur Flask. How to

Voir Flask WebSocket 5

Installation websocket ok

Sélection automatique du port série

On liste:

requête Windows all serial ports
on tente un open timeout 0.2s liste des Ports valide pour récupérer les descriptions

on filtre, critères sur description:

   ("CP210x" in element['description']) \
or ("USB Serial Port" in element['description']) \
or ('sur Bluetooth' in element['description'] ):

on teste:

pour chaque éléments de listeValide, on essaie une ouverture, on écoute 2s
On espère la phrase TAG: ROBOT_TAG_PHRASE = "Bras Robot 2023 v1.0"

Optimization:

On ne parcourt qu'une seule fois la liste des ports com sans la filtrer, on ouvre, on cherche
directement la passe phrase.

Transfert des commandes ws vers serial

Ne pas oublier de passer en mode WEB

Vérification : sur le port de debug

Adaption pour le code ARDUINO Gilles

Adaptation des trames

Trame avant modif:

received: 90,96,132,132,90,17

Trame après modification:

received: @90,96,132,132,90,17

Warning

Le mot received + l’espace ne font pas partie de la trame.

Rangement et initialisation

Ajout de 2 boutons dans l’interface WEB pour rangement et initialisation.

L’idée utilisée est de transmettre directement par le BT les commandes <I> et <R> à la place des trames habituelles.

L’impact est sur le fichier interfaceBras.html

function initBrasFunction()
{
    console.log("appel de init bras")
    if(ws != null && ws.readyState == 1)
    {
        console.log("trame transmise");
        trame = "<I>";
        ws.send(trame + "\r\n");

    } else {
        console.log("Seulement en mode connecté");
        alert("Mode connecté seulement")
    }
}

function rangeBrasFunction()
{
    console.log("appel de rangement")
    if(ws != null && ws.readyState == 1)
    {
        console.log("trame transmise");
        trame = "<R>";
        ws.send(trame + "\r\n");

    } else {
        console.log("Seulement en mode connecté");
        alert("Mode connecté seulement")
    }
}

Impacte sur le code ARDUINO:

Dans la fonction decodeTrameWeb on filtre le premier caractère @ ou <

Signature des différents port série

Version Python

COM28: Arduino Mega 2560 (COM28)
COM13: USB-SERIAL CH340 (COM13)
FTDI : USB Serial Port
CP210x Silicon Labs CP210x USB to UART Bridge
COM21: Arduino Uno (COM21)
BT : Lien série sur Bluetooth standard
émulateur com0com : com0com - serial port emulator

Warning

Ce n’est pas le port série de l’ARDUINO qui est utilisé pour le dialogue entre le serveur et le robot

Dans notre projet, on ne devrait garder que la liaison Bluetooth pour communiquer entre serveur web et la carte ARDUINO du robot. Pour des besoin de mise au point, on conserve également dans un premier temps les FTDI et CP210x. Ces 3 modules (BT, FTDI et Silicon Labs) sont connectés aux broches 8 et 9 de l’Arduino (MySerial).

Warning

le BT HC05 crée 2 ports série !!!

Bluetooth HC-05 module - why are there two COM ports? 6

This answer in Microsoft Technet sounds good:

when connecting your terminal program to the first you are actually instructing Windows to attempt
to establish the Bluetooth connection to the remote paired device, and if the connection is
established the RFCOMM channel will be opened for the exchange of data

when connecting your terminal program to the second you are actually instructing Windows to load
the SPP SDP record and to remain waiting for incoming connections from the remote paired device.

Le fournisseur est : Microsoft

Annexes

Procédure navigateur javascript de connection de l’interface bras robot

Les fonctions du Javascript de l’interface:

  • ws_onopen()

  • ws_onclose()

  • wc_onclick

  • ws_onmessage()

C’est onclick qui est associé au bouton est qui register les 3 autres fonctions.

Procédure de copy d’environnement

  • dans l’environnement de départ : pip freeze > req.txt

  • sur la machine d’arrivée:
    • créer un environnement pip -m venv .venv

    • activer l’environnement : .venv\Scripts\activate

    • installer les modules : pip install -r req.txt