Table des matières
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
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