« SE2a4 Projet système/réseau 2023/2024 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Ligne 32 : Ligne 32 :


== Fonctionnalité serveur Web ==
== Fonctionnalité serveur Web ==
=== Serveur HTTP ===
=== Serveur HTTP multi-flux ===
=== Pages spécifiques ===


== Fonctionnalité gestion des cartes USB ==
== Fonctionnalité gestion des cartes USB ==

Version du 31 octobre 2023 à 16:45

Objectif

L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques.

Le système est composé des éléments suivants :

  • des cartes USB fixées sur les écrans et connectées en USB sur la station la plus proche ;
  • des serveurs Web sur chaque station qui peuvent être accédés en utilisant un navigateur Web classique.

Le serveur Web d'une station, en plus de servir des pages Web, va gérer les cartes USB locales et écouter les requêtes UDP de gestion des écrans.

Il vous faut programmer à la fois le micro-contrôleur des cartes USB et le serveur Web.

Matériel

Vous devez concevoir et réaliser une carte électronique pour gérer un écran. Cette carte être conçue mécaniquement pour se fixer dans l'angle du moniteur où se trouvent le bouton permettant d'allumer et d'éteindre le moniteur et la LED de statut de ce même moniteur.

Un servo-moteur doit pouvoir se clipser sur la carte pour appuyer sur le bouton et un photo-récepteur doit pouvoir contrôler si la LED du moniteur est allumée ou non.

La carte doit être architecturée autour d'un ATmega16u2 et comporter quelques LED commandées en plus de l'écosystème du microcontrôleur et de ce qui est nécessaire pour faire fonctionner servo-moteur et photo-récepteur.

La conception de la carte se fait en utilisant le logiciel KiCAD version 7.

Développement sur la carte

Il doit être possible de gérer les cartes par le protocole USB. Il est conseillé d'écrire un programme en utilisant la bibliothèque LUFA exposant une interface USB de classe spécifique liée à deux points d'accès par interruption : un entrant pour lire l'état du photo-récepteur et un sortant pour commander le servo-moteur et quelques LED.

Il est aussi demandé que l'état de la LED de statut soit répété sur une des LED commandées, le photo-récepteur pouvant masquer la LED du moniteur. Une autre LED doit servir à indiquer que la carte est prise en charge par une application, ce qui est facile à tester via la variables globale USB_DeviceState.

Pour le principal, appuyez-vous sur votre travail en tutorat USB. La principale différence avec le tutorat est que les capteurs et actionneurs sont directement connectés sur l'ATmega16u2 cette fois. Faites attention, les broches PWM du minuteur 0 ne sont pas les mêmes par rapport à l'ATmega328p. Consultez la documentation du micro-contrôleur pour identifier ces broches.

Développement système et réseau sur la station

Fonctionnalité serveur Web

Serveur HTTP

Serveur HTTP multi-flux

Pages spécifiques

Fonctionnalité gestion des cartes USB

A l'initialisation du serveur, les cartes USB de gestion d'écan doivent être détectées et mémorisées. Un identifiant unique sur un octet doit être programmé dans chaque carte. Cet identifiant doit pouvoir être récupéré par le point d'accès de contrôle. Il est conseillé de prévoir des détections régulières de cartes USB nouvellement insérées.

Quand cela lui est demandé le serveur doit pouvoir contacter une carte particulière, c'est à dire avec un identifiant précis, et lui demander l'état du moniteur, de changer l'état du moniteur, ou de changer l'état d'une LED commandée.

Pour toute cette partie, il est fortement conseillé de reprendre le travail effectué en tutorat USB.

Fonctionnalité serveur UDP

Votre serveur doit aussi écouter sur le port UDP 4242. Les requêtes reçues sont vérifiées pour s'assurer qu'elles sont bien légitimes, par exemple en utilisant un "nombre magique" sur lequel la promotion doit s'entendre. Les requêtes contiennent le numéro des cartes USB concernées, le numéro 255 indiquant que toutes les cartes du réseau sont concernées. La requête peut être de connaitre l'état du moniteur ou de changer cet état en un état précisé.