Serveur

_images/lg.jpg _images/robot_2bras.png
Auteur

Gilles Lecorsier

Blog

La technologie dans tous ses états 1

Association

BricoLab Groslay(95)

Entity

VoRoBoTics 2

Page principale

Readme 3

Création

01/04/2023

Maj

11/07/2024

Pourquoi un serveur web ?

La fonction principale de notre serveur est d’héberger l’interface web et de communiquer avec le bras. Ainsi, pour que notre interface web soit accessible nous avons besoin de notre propre serveur. Nous aurons ainsi les échanges entre un client et un serveur web.

_images/architecture_branchement.png

Mise en place du dossier Serveur

Passage à un serveur Python/Flask 4

Créer le dossier robot2brasserveur
Dans le dossier robot2brasserveur, créer dossiers templates et static demandés pour le fonctionnement
du Serveur Flask.

Procédure de copy d’environnement virtuel venv 5

  • 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 .venvScriptsactivate

    • installer les modules : pip install -r req.txt dépot ici 6

Signature des différents ports série

Ce résultat diffère suivant les ordinateurs bien sûr !

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

Avertissement

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).

Avertissement

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

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

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

Adaption pour le code ARDUINO

Trame avant modif:

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

Trame après modification:

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

Avertissement

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

Passage à un serveur Python/Flask

Serveur web avec Python Flask 8

Lancer une fennêtre de commande DOS dans le dossier  brasrobot2023serveur
.venv\Scripts\activate
python server.py
Dans la fenêtre navigateur : localhost:8300

Premier script serveur

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 9

Ajout websocket en python dans le serveur Flask. How to

Voir Flask WebSocket 10

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

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.

Tables et index