SE2a4 USB 2023/2024 E12
Présentation du Projet Système et Réseau
L'objectif de ce projet est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques.
Le projet est composé d'une carte relié en USB à l'ordinateur le plus proche ainsi que d'un serveur web accessible depuis un navigateur.
L'objectif étant de pouvoir depuis une page web connaître l'état d'un moniteur et de pouvoir le changer en appuyant physiquement sur le bouton d'extinction/allumage de ce dernier
L'ensemble de ma production sur ce projet est disponible sur mon archive GIT. Lien de l'archive git:
https://archives.plil.fr/nconrard/ProjetSystemeReseauNoah
CAO
Le schéma complet de la carte est celui disponible ci-dessus. Il est basé sur le design originel fourni par M. Redon, disponible sur la page du projet.
Cette conception inclut 3 indicateurs lumineux, un directement commandé par la tension d'alimentation de la carte et deux autres sur des entrées/sorties de l'ATMEGA32U4, ainsi qu'une unique sortie pour servo-moteur.
La détection de l'état du moniteur se fait au travers d'une LDR (ou photorésistance) qui par un jeu de résistance fait varier une tension au niveau d'un CAN de l'ATMEGA32U4. On peut calculer la tension par un calcul de diviseur de tension :
Le contrôleur pourra en fonction de cette tension choisir si il doit ou non bouger le Servo-moteur via la broche MLI sur PD0.
Le routage de la carte est celui ci-dessus. On notera que les emplacements pour le Servo-moteur ainsi que la LDR sont traversants afin de pouvoir les déporter par la suite.
PCB
Le micro-contrôleur est accessible via le port USB, le chargeur d'amorçage (bootloader) a été téléversé initialement via le port ISP de l'ATMEGA32U4.
Des programmes de test afin de faire clignoter les LEDs sont présents sur l'archive git.
Serveur Web
HTML :
Il est possible de lancer (pour l'instant) en local un site web de la manière suivante :
./serveur_http -p XXXX
Ou bien de manière plus verbeux :
./serveur_http --port XXXX
Par défaut, le port utilisé par défaut est 8080.
Le site est composé de 3 pages, une page d'accueil, une pour la liste des actions ainsi qu'une pour surveiller le statut des écrans. Une amélioration future pourrait être de fusionner ses 3 pages.
UDP :
Une ébauche de serveur UDP est également présent sur l'archive git.
Lorsque compilé et exécuté, il écoute sur le port 4242 les messages et en fonction de leur contenu le code rentre dans une étape précise. Le format des trames peut être trouvé ci-dessous, il a été discuté avec les autres membres du projet.
On peut notamment le constater sur le code ci-dessous :
if (nreseau[0] == NRES[0] && nreseau[1] == NRES[1] && nreseau[2] == NRES[2]) {
switch (action) {
case '0': // Retourner ID usb
printf("Veut retourner ID usb\n");
break;
case '1': // Retourner Etat Ecran
printf("Veut retourner Etat Ecran\n");
break;
case '2': // Changer Etat Ecran
printf("Veut changer Etat Ecran\n");
break;
default:
perror("Erreur lors de la réception du message / Action non reconnue");
exit(EXIT_FAILURE);
break; // ?? en théorie inutile.
}
}
D'autres codes sont également disponibles sur l'archive afin d'émettre des messages vers ce serveur UDP ainsi que celui d'autres groupes.
La suite du projet coté serveur Web serait de relier la partie HTML avec la partie UDP (programmation "multi-threadé") et relier les boutons des pages HTML à des vraies actions d'envoi de trame.