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:
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!
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
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:
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
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