Se baser sur: - ce que les étudiants connaissent (au moins un peu) déjà. - ce que les étudiants peuvent utiliser par eux même et chez eux - des choses réutilisables en entreprise Pour utilisation arduino et raspberry en milieu industriel, voir: https://www.industrialshields.com/?gclid=CjwKCAiAg8OBBhA8EiwAlKw3kpWuYSmc776wUvBJwfby8GhTSZIGBZ6L3-76TCbFTYiySTxZN7xztBoCiZAQAvD_BwE =====Arduino===== Tout un écosystème: * matériel * logiciel * communauté cartes UNO et NANO à 2 ou 3 euros Utilisable par les étudiants chez eux Outils de développpement minimalistes, simples à installer et à utiliser Beaucoup de ressources disponibles: * documentation * exemples logiciels et matériels * cartes d'extensions achetables langage C++ simplifié: Programme de haut niveau utilisant des librairies HAL simples à utiliser (la plupart utilisant l'approche objet) Pas de débuggueur: ce n'est pas vraiment un problème si utilisé pour faire des programmes de haut niveau simples Architecture matérielle modulaire: Approche lego pour assembler un calculateur (du attiny 8 broches à un gros STM nucléo) et des périphériques Possibilité d'accés à bas niveau aux ressources du microcontroleur pour illustrer le matériel dans un second temps. =====Python===== Utilisé partout et pour de bonne raison: de l'automatisme jusqu'à l'apprentissage profond en passant par les statistiques, les IHM, le développement WEB.... ====Outils de développement==== * simple comme Notepad * léger comme idle3 * complet comme pyCharm * en ligne comme Jupyter ====Apprentissage de l'algorithmie==== * Oblige à structurer le code en l'indentant * Masque (quasi complètement) les problèmes liés à la gestion des données (exemple type Entier), types listes, dictionnaires, tuples etc.. * Passage de paramètres E/S beaucoup plus simple qu'en C, plusieurs valeurs de retour possible (évite la gymnastique pour passer de schéma bloc aux prototype de fonctions) * Le code est suffisamment lisible pour sauter l'étape algo papier * Pas d'accès direct en mémoire et de pointeurs (évite les fuites etc) * Langage interprété, les étudiants peuvent essayer le code ligne par ligne avant de l'inclure dans leur programme, cela remplace le debuggueur * Très bon pour s'initier à l'approche objet, syntaxe bien moins lourde que le C++ pour créer des classes ====Domaines d'application==== * calcul symbolique avec Sympy (en remplacement de matlab) * calcul numérique avec numpy (en remplacement de matlab) * affichage et interface homme/machine: QT, matplotlib, OpenGL * réseau * simulation * ... tout! ====Plateformes matérielles==== Peut être utilisé sur: * PC windows, linux ou mac * PC sur carte type raspberry Pi * microcontroleurs évolués (STM Nucléo ou Raspberry Pico (4$) par exemple ) * navigateur web + smartphone portable par exemple avec Jupyter L'apprentissage de l'algorithmie sur PC puis le passage à de l'embarqué sans changer de langage serait bien plus lisse qu'actuellement (C++ puis C au S2) ====Les fausses limitations==== * Pas utilisé dans l'industrie: de plus en plus faux car python permet de déployer rapidement des preuves de concept, qui finalement sont souvent suffisemment performante * Pas assez performant: oui il y a un surcout en puissance de calcul et mémoire mais les performances des matériels augmentent (on ne developpe plus que très peu en assembleur d'ailleurs!) * Pas utilisable en embarqué: faux, il y a de plus en plus de cartes qui le supportent ====Concernant les performances==== * Utilisation de librairies optimisées avec des bindings vers pythons: par exemple numpy et openCV. Python utilisé pour le haut niveau par l'étudiant * traduction du code python vers C++ avec l'outils Cython: ajout du typage statique et génération automatique des bindings =====Tests unitaires===== Actuellement: * tests unitaires des composants créés en VHDL à l'ancienne (sans testbench et avec contrôle visuel des chronogrammes produits) * sensibilisation en seconde année option automatisme en ethernet industriel pour du code C/C++ =====Profiling===== Outils de mesure de consommation des ressources (mémoire, temps CPU etc..) Il faudrait sensibiliser les étudiants à ces concepts (et leur parler un minimum de complexité algorithmique) =====Outils de gestion de versions===== Actuellement découverte en seconde année de l'outils GIT en bus de communication/ethernet industriel Utilisation souhaitable dès la première année: * utilisation en local pour que l'étudiant voit ce qu'il fait par rapport aux fichiers fournis et à chaque exercice * utilisation simplifiée avec une seule branche et un seul utilisateur par projet Initialisation d'un suivi: cd ~/dossieràsuivre git init git add *.c* *.pro git commit -m'initial version' Création d'une version: cd ~/dossieràsuivre git commit -a -m'exercice 2 fait et validé' Visualisation des versions gitk Ainsi en seconde année, une utilisation plus poussée serait possible =====Outils de documentation de code===== Obliger les étudiants à faire de la doc (certains IDE aident en le faisant automatiquement) Utiliser un outils comme Doxygen ====Documentation sur l'outils de documentation Doxygen==== https://www.doxygen.nl/manual/starting.html https://www.doxygen.nl/manual/docblocks.html https://www.doxygen.nl/manual/doxygen_usage.html https://www.doxygen.nl/manual/config.html#:~:text=The%20format%20is%20ext%3Dlanguage,free%20formatted%20Fortran%3A%20FortranFree%2C%20unknown https://franckh.developpez.com/tutoriels/outils/doxygen/ ====Utilisation de Doxygen pour ce projet==== Dans le dossier des fichiers source, taper pour générer le fichier de configuration de la doc: doxygen -g Editer le fichier de configuration Doxyfile gedit Doxyfile & Régler: FILE_PATTERNS = *.cpp *.h *.ino EXTRACT_ALL=YES EXTENSION_MAPPING = ino=C++ Pour compiler la doc et l'ouvrir dans un browser doxygen Doxyfile && chromium-browser html/index.html