Serveur¶
- Auteur
J.Soranzo et Gilles
- Societe
- Entity
- Dépôts Bitbucket
- 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
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 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