Spécialité systèmes embarqués

1  Motivation

Vous allez concevoir et réaliser un dispositif couvrant tous les domaines couverts par la spécialité système embarquée filière internet des objets.

Votre objectif est de commander un système embarqué minimal à l’aide d’une application mobile.

La chaîne de communication est constituée comme suit :

D’un point de vue protocoles :

2  Circuit imprimé

Votre circuit imprimé doit comporter un microcontrôleur connecté sur un connecteur USB mâle de type A. Il doit aussi comporter un connecteur ISP pour la programmation du microcontrôleur et une LED, au moins, commandée par le microcontrôleur pour que votre carte puisse s’exprimer.

Pour simplifier le microcontrôleur est imposé est sera un ATTiny85. Vous partirez du circuit présenté à l’adresse https://codeandlife.com/2012/02/22/v-usb-with-attiny45-attiny85-without-a-crystal/. Il suffit d’ajouter le connecteur ISP et d’ajouter quelques LED si le coeur vous en dit.

Vous allez concevoir votre carte en utilisant le logiciel KiCAD (version 5). Commencez par la vue "schématique" en ajoutant à votre schéma les composants suivants :

Une fois les composants posés, placez les de façon rationnelle et connectez les composants entre-eux. N’hésitez pas à utiliser des "labels de réseau" pour éviter de surcharger le schéma avec des croisements de connexions.

Quand votre schématique est validé par un encadrant passez au routage (icône "éditeur PCB"). Votre but est de créer la carte la plus petite possible avec des pistes (connexions) ne se croisant pas (pour éviter les court-circuits). Procédez comme pour le schématique, placez d’abord les composants pour minimiser les croisements de pistes puis tracez les pistes (sur la face supérieure). Attention les composants traversants (le connecteur ISP) doivent être posés sur la face inférieure. Si vraiment vous n’arrivez pas à tout router en face supérieure vous pouvez implanter quelques pistes en face inférieure en utilisant des via.

Une fois votre routage validé par un encadrant, demandez sa fabrication sur le site http://eei.polytech-lille.net. La carte fabriquée il ne vous reste plus qu’à souder les composants et à la programmer avec un Arduino servant de programmateur.

La dernière étape est celle de la programmation de la carte. Le principe est d’arriver à lire un octet sur une liaison USB/série et à implanter cet octet comme valeur d’attente pour le clignotement de la LED commandée (en considérant l’unité de cette valeur en centième de seconde par exemple).

Vous partirez du code fourni à la page https://wiki-ima.plil.fr/mediawiki/index.php/PeiP_enseignement_spécialité_SE_2022/2023. Nous vous laissons enrichir la fonction usbFunctionWriteOut du fichier source tiny85_peip/main.c avec les commandes de votre choix. Vous pouvez aussi ajouter des variables globales et une fonction pour implanter le minuteur, cette fonction est à appeler dans la boucle principale de la fonction main. La compilation se fait via la commande make dans le répertoire tiny85_peip_2022_1LED/default.

La programmation de la carte se fait obligatoirement via le connecteur ISP avec un programmateur Arduino. La commande pour télécharger le code sur la carte est (remplacez éventuellement -c arduino par -c stk500v1 pour certains programmeurs) :

avrdude -c arduino -p attiny85 -P /dev/ttyUSB0 -b 19200 -U flash:w:cdctiny85.hex
avrdude -c arduino -p attiny85 -P /dev/ttyUSB0 -b 19200 -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m

Testez ensuite la carte en utilisant la commande Unix minicom -os, rentrez dans le troisième item du menu et sélectionnez /dev/ttyUSB0, sélectionnez 9600 bauds, supprimez le contrôle de flux matériel, sortez du sous-menu et enfin prenez le premier item "sortie".

3  Application Web

Vous allez connecter votre carte à l’un des PC des salles de projet. Votre but à cette étape est de permettre de configurer la carte par une page Web dynamique.

Vérifiez que le paquetage apache2 est bien installé sur votre machine. Vérifiez aussi que l’utilisateur correspondant à apache2, c’est à dire, www-data est bien membre du groupe dialout (voir la ligne dialout du fichier /etc/group). Les pages Web se trouvent dans le répertoire /var/www/html/.

Ecrivez cette page Web en PHP. Il suffit d’ouvrir le port série correspondant à la carte puis d’y écrire un octet passé en paramètre (via la variable PHP $_REQUEST[’duree’] par exemple). Pour vous faciliter la vie, téléchargez une classe de gestion du port série en PHP (comme par exemple https://github.com/Xowap/PHP-Serial). Attention, il vous faudra probablement ajouter --version derrière stty dans le constructeur PhpSerial du fichier PhpSerial.php pour que cette classe daigne fonctionner sur une distribution Linux récente. Pour démarrer, regardez l’exemple dummy.php.

Pour tester cette page Web dynamique, référencez-la au travers d’une forme HTML forme.html demandant la valeur d’attente. Dans la barre URL du navigateur tapez http://localhost/forme.html. Vous avez un exemple de forme HTML à l’adresse https://www.w3schools.com/php/php_forms.asp.

4  Application mobile

Cette étape consiste à écrire un programme Android avec l’application MIT App Inventor. L’application doit permettre de régler le clignotement de la LED sur votre carte.

Il est supposé que votre smartphone peut se connecter sur le WiFi de la salle de projet.

4.1  Prise en main de MIT AppInventor

4.2  Première version de votre application

Pour prendre en main l’environnement de développement, nous allons réaliser une application simple qui se connectera sur la page forme.html que vous avez écrit pour l’application Web. 

Pour cela dans la vue Designer ajoutez une zone de texte, un bouton, et un navigateur web (WebViewer). Dans la zone Blocks faites en sorte que la page web dont vous avez spécifié l’adresse dans la zone de texte soit affichée. Tester avec plusieurs pages web et forme.html (avec la bonne adresse IP).

4.3  Application complète

Cette première version simplifie la réalisation de l’application mobile et présente un certain nombre d’inconvénients (le premier étant de nécessiter un composant WebViewer qui demande énormément de puissance / mémoire). 

Vous allez donc réécrire une autre application qui utilise cette fois le composant Web (il s’agit d’un composant non-visible sur l’interface). Ce composant vous permet de recevoir / envoyer des données à une page Web. Vous pouvez notamment regarder l’aide disponible à l’adresse suivante : http://ai2.appinventor.mit.edu/reference/other/json-web-apis.html.

Faites ensuite l’application qui effectue une requête HTML de type POST sur l’URL de votre serveur Web et qui permet de configurer la fréquence de clignotement de la LED de votre carte.


Ce document a été traduit de LATEX par HEVEA