Apprendre à coder avec la météo dans un environnement web Jupyter (LED, capteurs,affichage...) : JupyterHubEdu.

La météo est un exemple efficace pour apprendre à coder car il permet de lier une perception quotidienne de la vie réelle à une mesure numérique et à l'exploitation qui en est faite. La méthode proposée s'applique à tout type de capteur ou effecteur ou LED et permet d'accéder via une interface web à des cahiers d'exercices enchaînant du texte (consignes ou commentaires et explications) et du code exécutable en langage python. Cette méthode dérivée d'outils utilisés en recherche propose une façon simple et interactive de s'initier au codage.

L'apprentissage de l'interface est très rapide et l'utilisateur manipule directement des éléments d'un vrai langage usuel sans avoir recours à une interface graphique abstraite. L'utilisation d'un langage interprété (le python) permet une vraie interactivité en observant directement "en temps réel" le résultat d'une modification d'un fragment de code. Les consignes et les traces du travail sont stockées sous la forme d'un cahier web ou pdf ou json et peuvent être exportées librement dans ces formats.

La construction des cahiers de programmes se fait par blocs analogues aux blocs des logiciels de programmation graphique avec en plus la possibilité de construire des blocs à la demande (un peu comme dans Snap!BYOB) et surtout d'insérer des blocs de texte permettant de guider le travail ou de recueillir une production des élèves.

Motivations

Depuis la COP21 à Paris le climat s'est installé au coeur de nombreuses discussions et est devenu un sujet de société du fait du rôle reconnu de l'homme dans le changement climatique. Les sciences du climat sont complexes, font appel à de la physique et des mathématiques avancées dont la théorie comme les codes sont hors de portée d'un citoyen ordinaire ou d'un élève de l'enseignement primaire ou secondaire. Toutefois tous les travaux sur le climat reposent sur des données météorologiques aussi précises et régulières que possible et la piste reliant la météorologie au climat est intéressante à explorer et s'avère stimulante pour des élèves ou le grand public.

Par ailleurs le temps qu'il fait est pour tous une source d'intérêt, quel que soit l'âge, que ce soit pour choisir ses vêtements, décider d'un itinéraire, choisir ses activités du jour... Même s'il n'est pas possible d'aborder la prévision du temps qu'il fera, mesurer les paramètres météorologiques pour décrire le temps qu'il fait revêt un grand intérêt, surtout lorsqu'on peut partager ces données en réseau sous la forme d'opendata.

Dans le projet "Météo et Climat tremplin pour l'enseignement des sciences" le premier chapitre de la formation concerne Observer le temps qu'il fait et prévoir le temps qu'il fera. Il fournit les bases théoriques et pratiques pour aborder l'utilisation en classe de capteurs météorologiques et faire le lien entre ce que l'on peut observer dans son environnement proche et le travail des professionnels de la météo. La démarche proposée ici peut aussi servir d'accompagnement d'un projet d'établissement, d'un projet pédagogique ou d'un projet ludique impliquant une station météorologique du commerce ou construite au sein de l'établissement à partir de capteurs en vente en ligne qui sont présentés ici. Le dispositif propose un système d'exploitation construit pour le projet et les activités de classe et est opérationnel "out of the box" avec les montages décrits.

Du point de vue méthodologique la démarche proposée peut être transposée à d'autres problématiques que la météo et le climat et peut servir à explorer les codes d'interaction avec des robots ou toutes sortes de dispositifs connectés. Cette démarche n'utilise pas d'interface de programmation graphique avancée pour deux raisons :

  • d'abord parce qu'il existe une littérature et des ressources abondantes autour des deux principales interfaces scratch et snap!BYOB et qu'il est toujours utile de proposer des alternatives documentées
  • ensuite parce que l'utilisation d'une interface graphique riche et avancée éloigne du réel (on vise ici la manipulation de capteurs, la mesure et le traitement des données obtenues) et éloigne aussi du code opérationnel vrai en introduisant une couche supplémentaire entre l'usager et le code compilé ou interprété par la machine (cette couche "profonde" étant masquée à l'usager car elle dépasse ses compétences supposées).

Cette démarche repose sur l'utilisation d'une Raspberry Pi qui contient la totalité des logiciels nécessaires et permet la connexion à tout type de capteur via son bus GPIO. Il est possible de l'utiliser sur un poste de travail dédié (et dans ce cas il faut une Raspberry Pi par poste) ou en tant que serveur de classe (et dans ce cas tous les postes connectés au même réseau peuvent utiliser les ressources et il faut prévoir plusieurs ressources en parallèle sur la Raspberry Pi).


Licence

Ce travail est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale 4.0 International. licence cc-BY-NC


Sommaire

  1. Matériel et logiciels utilisés

    a. Raspberry pi 3 (ou 2)
    b. LEDs et capteurs
    c. Système d'exploitation IFÉ ENS de Lyon pour Raspberry PI3
    d. Bibliothèques MRAA et UPM
    e. Jupyter Notebook et JupyterHub
    f. Langage python

  2. Mise en oeuvre du serveur de cahiers de programmes JupyterHubEdu

    a. première connexion et conditions de connexions ultérieures
    b. Connection à JupyterHubEdu et allumage d'une DEL
    c. Connection à JupyterHubEdu et ministation météo
    d. Création d'un cahier à partir de zéro

  3. Exemples d'utilisation

    a. Dossier 1 "Jeux de lumière"
    b. Dossier 2 "Instrument mixte DEL et capteurs"
    c. Dossier 3 "Mini-station météorologique et capteurs"

  4. AJustements et modifications manuelles pour le contrôle de la connexion au réseau

    a. identification de l'interface réseau et de l'adresse IP
    b. Reconfiguration du réseau
    c. Création d'un certificat d'authentification pour protéger les échanges entre la raspberry et les clients

  5. Installation de l'image sur une carte microSD (si besoin)


Téléchargements



Tous les logiciels nécessaires au fonctionnement du dispositif sont préinstallés dans les images proposées par le projet "Météo Climat Tremplin pour l'enseignement des sciences". Pour démarrer il suffit de se connecter au serveur jupyterhub qui est lancé par défaut au démarrage de la Raspberry. L'utilisateur moon est disponible par défaut et propose un dossier de Cahiers de programmes pour tester le dispositif.



1. Matériel et logiciels utilisés

Le dispositif est centré sur l'utilisation d'une Raspberry Pi 3. Les systèmes d'exploitation par défaut ne proposent pas de bibliothèques suffisantes pour exploiter les capteurs météorologiques. Certains fabricants proposent d'installer des extensions liées à un produit particulier et le travail est limité au seul produit acheté. Nous proposons d'utiliser des bibliothèques (mraa et upm) qui ouvrent quasiment tous les accès aux connecteurs et un grand nombre de pilotes pour de nombreux capteurs, moteurs, DEL et autres éléments connectables à la Raspberry. Pour cela nous proposons d'utiliser à la place de l'image de base, le système d'exploitation proposé par l'IFÉ ENS de Lyon qui a été construit spécialement pour l'enseignement et les établissements scolaires (cf infra).

Ce premier chapitre décrit les prérequis matériels et logiciels pour mettre en oeuvre la démarche.

1.a Raspberry pi 3 (ou 2)

La Raspberry Pi 3 ou 2 est un nano-ordinateur qui peut être utilisé : * comme un ordinateur de bureau de faible puissance en lui connectant un écran via un raccord HDMI (supportant les adaptateurs DVI et VGA), un clavier et une souris (via les prises USB) * comme un mini-serveur installé sur le réseau.

La Raspberry pi3 est plus puissante que la Raspberry Pi2 et surtout possède un wifi intégré ce qui économise l'achat d'un connecteur WIFI USB. La photo ci-dessous représente une Raspberry Pi3 opérationnelle en mode serveur connectée au réseau via le WIFI.

Raspberry Pi 3 licence cc-BY-NC

Pour fonctionner la Raspberry Pi a besoin d'un système d'exploitation écrit sur une carte micro-SD qui fournit en même temps l'espace de stockage. Si l'on souhaite pouvoir disposer de plusieurs systèmes d'exploitation il suffit de configurer plusieurs micro-SD et les échanger en fonction du système attendu. Pour notre projet une image a été créée et est mise à disposition en ligne

1.b LEDs et capteurs

Pour apprendre à coder il est apparu que la consolidation du lien entre monde réel et univers numérique était particulièrement efficace pour susciter l'intérêt et parfois la passion des élèves/étudiants/personnels. Les participants du projet ont donc proposé divers montages faisant intervenir des capteurs météo ou le pilotage à distance de stations météorologiques. L'image suivante présente trois plaques de développement regroupant plusieurs montages décrits et exploités dans autant de cahiers numériques mis à disposition avec le système d'exploitation.

3 plaques de développement et la Raspberry Pi licence cc-BY-NC

Ces montages sont des exemples pour lesquels les codes opérationnels et les commentaires sont disponibles dans des cahiers de programmes opensource. Les cahiers de programmes sont préchargés dans l'espace de travail de l'utilisateur moon afin de permettre un essai immédiat. L'image peut-être agrandie suffisamment pour reproduire le câblage proposé.

1.c Système d'exploitation IFÉ ENS de Lyon pour Raspberry PI3

Les fabricants de la Raspberry proposent plusieurs systèmes d'exploitation (8 au moment de l'écriture de cet article) permettant à l'usager de choisir l'univers qui correspond le mieux à ses besoins. Le système par défaut est une version modifiée du système Debian appelée raspbian.

Il est possible de construire soi-même un système d'exploitation mieux ajusté à ses besoins que ceux qui sont proposés par défaut par le constructeur qui proposent forcément des options génériques ou des configurations "consensuelles".

La création d'un système d'exploitation dédié a été réalisée pour le projet "Météo et Climat tremplin pour l'enseignement des sciences" afin de disposer des ressources logicielles dont les participants au projet Tremplin avaient besoin. Les images de ce système d'exploitation sont disponibles en ligne pour la Raspberry Pi2 ou pour la Raspberry Pi3 et peuvent etre utilisées exactement comme les images zip proposées par le site Raspberry en suivant le même mode d'emploi. À la fin de cet article une méthode d'installation du système d'exploitation de l'IFÉ-ENS de Lyon. Une différence importante réside dans la compression plus importante du fichier reconnaissable à l'extension xz du fichier.

L'installation de ce système d'exploitation satisfait les points - d - e - ci-dessous. Toutefois il peut- être nécessaire de réaliser d'éventuelles mises à jour du fait de l'évolution des logiciels entre la date de création de l'image et son installation sur votre micro-SD.

Cette image est créée avec quatre usagers par défaut :

  • ens-ife qui est un utilisateur administrateur réservé à l'IFÉ qui permet une intervention d'assistance à distance en cas de problème sans interférer avec l'univers construit par l'enseignant
  • localadm (mot de passe AChanger1$) qui possède des droits d'administration et sert à intervenir sur la maintenance et le paramétrage de la Raspberry
  • callisto (satellite de jupiter) qui permet de lancer le serveur jupyterhub pour une exploitation client-serveur sans perturber le reste du fonctionnement de la machine
  • moon est un utilisateur ordinaire qui peut utiliser les ressources de la Raspberry sans avoir aucun droit d'administration.

Il est à la charge de l'administrateur de créer les comptes des participants au projet (cf infra), la mise en place d'une authentification à partir d'un annuaire est en cours.

Tous les logiciels nécessaires et le langage python sont ajoutés au système d'exploitation et sont d'ores et déjà directement opérationnels dans cette image.

1.d bibliothèques MRAA, UPM et rpi.GPIO

Les bibliothèques MRAA et UPM correspondent à un ensemble de programmes permettant d'accéder à l'interface de connexion entre la Raspberry et les capteurs (MRAA) et à un ensemble de pilotes pour de nombreux capteurs ou autres dispositifs pilotables par des programmes (UPM). Ces bibliothèques fournissent des fonctions qui sont appelables depuis un programme principal, elles effectuent toutes les étapes nécessaires pour réaliser la fonction appelée et retournent au programme principal le résultat attendu. Ce mode de fonctionnement par appel à des fonctions regroupées dans des bibliothèques permet d'écrire des programmes principaux courts et structurés, facilement lisibles et portables.

La liste des pilotes de capteurs et effecteurs disponibles dans la bibliothèque UPM est directement accessible en ligne (onglet upm).

La bibliothèque rpi.GPIO fournit des outils de bas niveau capables d'exploiter les particularités de la Raspberry Pi : exemples d'utilisation de rpi.GPIO

1.e Jupyter et JupyterHub utilisation de Notebooks

Jupyter est un logiciel de type application web qui permet de créer, d'échanger de partager des documents contenant du code actif (qui peut être exécuté en temps réel depuis l'interface web), des visualisations et du texte explicatif, ces documents sont appelés notebooks en anglais que l'on peut proposer de traduire par cahiers de programmes; si nécessaire on peut ajouter un terme qualifiant le type de cahier pour identifier une pratique pédagogique ou une action particulière qui serait proposée dans le cahier :

  • cahier de programmes de cours
  • cahier de programmes d'exercices
  • cahier de programmes de travaux dirigés

Chacun de ces types correspond alors à une mise en forme et des objectifs pédagogiques différents mais la structure de tous ces cahiers repose sur le modèle unique de Notebook fourni par Jupyter qui est complètement ouverte et modulable.

Jupyterhub permet de créer un serveur de cahiers de programmes interactifs pour plusieurs utilisateurs, il a été conçu explicitement pour fournir un outil de classe dans un contexte de programmation en milieu universitaire. Pour ce qui nous intéresse et un usage en classe ou lors d'une formation non universitaire, la différence par rapport à une utilisation standard de la Raspberry Pi réside dans ce qu'au lieu d'utiliser un serveur, c'est la Raspberry Pi qui se comporte ici en tant que serveur. cela requiert quelques ajustements de l'environnement qui ont été faits dans le système d'exploitation de L'IFÉ-ENS.

1.f Langage python

Jupyter et jupyterhub peuvent être utilisés avec plusieurs langages, les bibliothèques upm et mraa proposent des fonctions en C++, Java, Javascript et python. Le langage python a été choisi pour développer les exemples de la démarche présentée ici, il est installé par défaut sur les images des systèmes d'exploitation de l'IFÉ. Jupyter peut fonctionner en python2 et en python3 mais jupyterhub requiert impérativement du python3.

2. Mise en oeuvre du serveur de cahiers de programmes JupyterHubEdu

2.a Première connexion et conditions de connexions ultérieures

Pour que le serveur de cahier de programmes puisse fonctionner, la Raspberry Pi doit être reconnue sur le réseau. Il est impératif que la première connexion soit faite sur un réseau filaire et par défaut lors de sa première connexion la Raspberry Pi ENS-IFÉ se connecte à ce réseau et se met automatiquement en conditions opérationnelles avec un serveur de terminaux (vncserver) et le serveur de cahier de programmes opérationnel. Si l'on souhaite changer de réseau ou se connecter à un réseau wifi, il est nécessaire de faire une manipulation simple sur la micro-SD avant de redémarrer (cf. plus bas).

La Raspberry est nommée par défaut raspife3, il est possible que le nom ne soit pas visible sur le réseau et on doit alors utiliser l'adresse physique qui lui a été attribuée. Nous désignerons cette adresse par xxx.xxx.xxx.xxx Le serveur JupyterHubEdu est lancé sur le port 8000 et il suffit alors de se connecter depuis n'importe quel ordinateur avec un navigateur web (Optimisé pour Firefox)

Au démarrage lorsque la Raspberry pi est reconnue sur le réseau deux services sont disponibles :

  • la connexion graphique via un client de serveur de terminaux virtuels (client VNC) qui permet d'afficher l'écran de la Raspberry sur un autre ordinateur (sans avoir besoin de brancher clavier/écran/souris sur la Raspberry)
  • la connexion au serveur de programmation directement depuis un serveur web qui permet de programmer via l'interface web

Si l'on se reconnecte sur le même réseau aucune modification n'est nécessaire par contre si on change de réseau une petite manipulation de remise à zéro de la configuration réseau est nécessaire (cf plus bas).

2.b Connection à JupyterHubEdu et allumage d'une DEL

Il n'est absolument pas nécessaire de se connecter physiquement (écran/clavier/souris) ou à distance (ssh/putty) sur la Raspberry il suffit d'utiliser un navigateur web pour se connecter au serveur web JupyterHubEdu fourni par la Raspberry Pi.

  • Naviguer vers le serveur JupyterHubEdu depuis n'importe quelle machine du réseau, se connecter à l'adresse : https://xxx.xxx.xxx.xxx:8000 le protocole https est impératif pour permettre l'authentification des usagers. Pour pouvoir se connecter tout usager doit être un utilisateur enregistré de la Raspberry (l'utilisation d'un annuaire externe, par exemple annuaire d'établissement, pour l'authentification est en cours de réalisation). JupyterHubEdu fournit le chiffrage des mots de passe avec une auto-certification qui induit hélas une alerte de sécurité qu'on ne peut pas éviter, il n'est pas dangereux d'outrepasser cet avertissement car le travail s'effectue en local, rien ne va circuler sur un autre réseau que celui sur lequel la Raspberry Pi est connectée, vous êtes administrateurs de la Raspberry pi auto-certifiée et pouvez contrôler cette auto-certification avec l'utilisateur privilégié localadm ou callisto(cf blog de construction de l'image). L'image ci dessous présente l'invite de login que l'on obtient.

Invite de login licence cc-BY-NC

  • Par défaut un utilisateur de démonstration a été mis en place il s'agit de l'usager dont le login est moon et le mot de passe guest ; il est possible d'ajouter autant d'usagers que nécessaire par l'utilisateur localadm. Lors de la connexion l'usager utilise son mot de passe sur la RaspBerry (ou bientôt celui d'un annuaire) et travaille sur les dossiers et les fichiers de son environnement (ou bientôt sur les dossiers d'un profil en ligne), cela permet de conserver des traces du travail, d'éventuels rendus à des fins d'évaluation. L'image ci-dessous présente l'utilisation de l'utilisateur par défaut moon :

Login de l'utilisateur licence cc-BY-NC

  • Lors de la première utilisation il est possible qu'aucun serveur ne soit démarré et dans ce cas le boutont start my server apparait comme sur l'image ci-dessous, cliquer sur le bouton et le serveur dédié à l'utilisateur connecté démarre (cela prend quelques secondes).

Bouton de démarrage licence cc-BY-NC

  • Une fois démarré le serveur JupyterHubEdu propose le dossier du cahier de programmes par défaut de l'utilisateur moon, la navigation se fait comme dans n'importe quelle hiérarchie de dossiers et fichiers. Ce dossier est celui qui est partage librement sur github et qui est ouvert à la collaboration et à la contribution.

Entrée à la racine licence cc-BY-NC

  • Le cahier de programmes proposé contient plusieurs dossiers thématiques illustrés (voir ci-dessous) correspondant à des démarches de programmation sur des points plus ou moins complexes allant de l'allumage d'une DEL au pilotage d'une microstation météorologique à 3 capteurs. Tous les blocs de programmes sont opérationnels sans modification à condition que les câblages des DELs ou des capteurs soient corrects.

Dossiers de cahiers licence cc-BY-NC

  • Le point d'entrée le plus simple est l'utilisation de DELs, plusieurs programmes sont regroupés dans le dossier jeux de lumière (cf image ci-dessous) et chaque cahier à l'intérieur du dossier contient plusieurs programmes correspondant à l'une des trois plaques de développement présentées plus haut.

Liste des cahiers jdl licence cc-BY-NC

  • Nous choisissons le cahier uneLedEtFeuTricolore, l'extension .ipynb signifie ipython-notebook qui fait référence au logiciel de base sous-jacent à JupyterHubEdu. Une image de la plaque de développement est insérée dans le cahier afin de bien visualiser l'objectif du programme qui va être mis en oeuvre. La plaque de développement est "touffue" parce que nous avons souhaité proposer une grande variété de pistes dans un encombrement minimum, 6 "ateliers" sont proposés sur cette image et peuvent être séparés sur autant de plaques de développement. L'image ci-dessous présente l'introduction textuelle du cahier qui permet de guider les usagers.

Entête une led licence cc-BY-NC

  • Nous avons choisi le programme le plus basique qui permet d'allumer et d'éteindre une seule DEL "Contrôler l'allumage et l'extinction d'une LED par programme". Le montage est encadré en rouge sur l'image ci dessous. Les broches sont repérés en fonction de leur numéro d'ordre pour éviter d'introduire une complexité en utilisant la nomenclature du bus GPIO. Ce mode de numérotation est indépendant de la fonction attribuée à la broche et facilite l'interopérabilité.

Programme allumage une led licence cc-BY-NC

  • après l'introduction on observe (figure ci-dessous) des blocs de code séparés par des blocs de commentaires, les blocs de codes ne portent pas un nom ou une description simplifiée mais le code lui même. Il s'agit d'une évolution par rapport à des langages d'initiation ou d'immersion comme scratch ou snap qui permettent soit de manipuler les blocs soit de modifier directement le contenu du bloc pour atteindre un objectif non stéréotypé. L'image ci-dessous présente 4 blocs de code séparés par des blocs de commentaires précisant l'objet de chaque bloc de code, les fonctions de ces 4 blocs sont :
    • départ configuration de l'environnement et choix de la broche connectée
    • configuration de la broche
    • allumage de la DEL connectée à la broche
    • extinction de DEL connectée à la broche
  • Des lignes commentées de code sont proposées pour permettre de débuguer le programme en cas de problème. Comme le python est un langage interprété il n'est pas besoin de compiler l'intégralité pour pouvoir exécuter un binaire et observer son effet; il suffit ici de cliquer sur un bloc de code puis de cliquer sur la touche "play" en haut de la page et le code écrit est interprété et exécuté. Toujours prendre soin de faire une copie du cahier de programme (menu file) avant de commencer à le modifier. On pourra ainsi toujours revenir au code fonctionnel de départ après avoir toute les modifications de son choix.

Structure des blocs une led licence cc-BY-NC

  • Pour avancer dans le déroulé du programme cliquer successivement sur chacun des blocs et appuyer sur la touche "play", dans l'image suivante tous les blocs ont été exécutés jusqu'à l'allumage de la DEL (encadré en vert)

Led allumée licence cc-BY-NC

  • Pour éteindre la DEL exécuter le dernier bloc de code.

Procéder identiquement avec les autres programmes pré-enregistrés. Pour créer un programme ajouter un bloc de programmes et copier le code souhaité ou recopier un bloc de code existant.

2.c Connection à JupyterHubEdu et mini-station météo

Comme cela a été dit dans l'introduction la mesure des paramètres météorologiques est devenue accessible à un coût raisonnable en utilisant des micro-capteurs. Plusieurs activités sont proposées dans les cahiers de programmes du projet JupyterHubEdu. Des activités simples mono-capteur avec exercices et des activités plus complexes sur le pilotage d'une mini-station météo et l'enregistrement des paramètres mesurés ou leur représentation graphique. L'image ci-dessous propose une vue de la liste des cahiers disponibles depuis Jupyterhub.

Liste des cahiers meteo licence cc-BY-NC

Nous utilisons dans cet exemple une mini-station météorologique composée de 3 capteurs : * BME280 température hygrométrie pression * TSL2561 Luminosité * MCP9808 température de précision

Nous utilisons la bibliothèque upm proposée par INTEL qui fournir des pilotes pour ces 3 capteurs en langage C++, python java javascript (seul le python nous intéresse ici). Comme pour les DELs le fonctionnement du dispositif se fait par blocs, les blocs sont ici plus complexes et résultent de l'agrégation de blocs simples comme ceux du chapitre précédent. Plusieurs notions doivent avoir été introduites pour comprendre le fonctionnement du bloc principal, ces notions sont détaillées dans les autres cahiers car nous proposons ici un cahier abouti proche d'un programme exécutable directement sur une interface réelle de contrôle d'une station météo qui pourrait être construite par les élèves et installée dans l'établissement. Le premier bloc regroupe les appels aux bibliothèques contenant les pilotes des capteurs utilisés.

En tête du cahier ministation licence cc-BY-NC

Le second bloc concerne la définition des capteurs qui seront utilisés. Les programmes d'initialisation utilisés activent les connexions aux broches utilisées. Comme cela est visible sur le montage les capteurs sont placés sur un bus, le bus i2c de la Raspberry et c'est lui qui est activé. Toute cette partie "technique" est masquée derrière l'appel au pilote ; toutefois toute erreur de câblage, toute anomalie ou erreur de programmation se traduit par l'affichage des erreurs renvoyées par le système d'initialisation. Le troisième bloc enclenche le coœur du programme qui propose une forme simple d'interactivité décrivant les commandes à fournir pour examiner l'état des capteurs ou lancer les mesures. Dans l'exemple ci-dessous la commande start est enclenchée et le programme prêt à démarrer.

En attente de démarrage licence cc-BY-NC

L'image ci-dessous présente l'état de JupyterHubEdu après envoi de la commande stop et arrêt des mesures. Les mesures effectuées sont écrites sur la sortie standard et formatées selon les instructions du programme.

Fin d'exécution licence cc-BY-NC

2.d Création d'un cahier à partir de zéro

Il est aussi possible de créer un cahier de programmes vierge et soit de copier des blocs existants soit de les créer. Tout comme cela a été vu dans les cahiers existants il est possible de créer :

  • soit des blocs de texte pour guider ou accompagner le codage ou l'expérience en cours
  • soit des blocs de code actifs qu'il est possible d'exécuter en cliquant sur la touche "play" (exécuter) de la barre de menus de Jupyter.

2.e Fonctionnement par serveur de classe ou par poste de travail

Les exemples que nous venons de traiter utilisent une version client-serveur appelée jupyterhub. Elle permet à plusieurs utilisateurs de se connecter à une seule Raspberry pi proposant plusieurs capteurs ou plusieurs jeux de DELs. Il est possible de connecter un certain nombre de plaques de développement sur une seule Raspberry dans une salle de TP par exemple en permettant à plusieurs groupes de chacun câbler une plaque et de la connecter à la Raspberry de la salle. Le fonctionnement avec plus d'une dizaine de clients a été testé et validé. Le point d'entrée se présente sous la forme indiquée dans l'image ci-dessous :

JupyterHub sur un client licence cc-BY-NC

Cette image illustre l'accès à un cahier numérique situé sur l'espace de stockage de l'utilisateur sur la Raspberry serveur jupyterhub depuis un autre ordinateur (l'environnement de travail est reconnaissable).

Ouverture d'un notebook Jupyter sur jupyterhub licence cc-BY-NC

Il est aussi possible d'utiliser jupyter (et non jupyterhub) qui est une version pour poste unique. Dans ce cas jupyter est installé et démarré sur un seul ordinateur et il utilise une interface directe sur le navigateur web local pour afficher l'outil graphique de création de documents qui propose un cahier numérique vierge. L'usager est ramené au cas précédent mais avec un utilisateur unique connecté directement sur le navigateur web de la Raspberry et pas sur un navigateur d'une machine tierce.
Il est aussi possible d'ouvrir des cahiers numériques existants. La figure ci-dessous illustre un navigateur web utilisé pour ouvrir un cahier numérique existant avec un onglet "untitled" contenant un cahier vierge.

Jupyter sur un poste de travail licence cc-BY-NC

3 Exemples d'utilisation

Trois premiers exemples libres et ouverts sont mis à disposition sur la forge opensource github. * Un dossiers de cahiers de programmes sur les jeux de lumière * Un dossier de cahiers de programmes sur un instrument mixte DEL et capteurs * Un dossier de cahiers de programmes sur l'utilisation de micro-capteurs pour construire une ministation météorologique ou l'une de ses composantes.

3.a Dossier 1 "Jeux de lumière"

Ce dossier contient 3 cahiers déposés sur la Raspberry pi et téléchargeables sur le site github Jeux de lumière.

  • Une DEL et feu tricolore
  • DEL RGB
  • DEL avancée et chenillard

Chaque cahier contient des programmes de difficulté variable découpés en blocs de programmes et blocs de commentaires ou accompagnements permettant de progresser sans l'apprentissage du codage.

(exemple de vidéo en cours de réalisation)

3.b Dossier 2 "Instrument mixte DEL et capteurs"

Ce dossier contient un exemple de lien entre allumage de DEL en fonction de mesures effectuées par un capteur. Le cahier est présent sur la Raspberry pi et téléchargeable sur le site github Jeux de lumière. Le cahier présente une photographie du montage et le déroulé de l'opération.

  • Test température capteur MCP9808 et DEL

(exemple de vidéo en cours de réalisation)

3.c Dossier 3 "Mini-station météorologique et capteurs"

Ce dossier propose 4 cahiers téléchargeables sur le site github Station Météo.

  • Introduction à l'utilisation ds capteurs avec le BME280 (température pression hygrométrie)
  • Mesure de 3 paramètres météorologiques
  • Mesure de 3 paramètres météorologiques avec dessin de courbes
  • Pilotage d'une ministation avec 3 capteurs.

(exemple de vidéo en cours de réalisation)

4. AJustements et modifications manuelles pour le contrôle de la connexion au réseau

Par défaut la Raspberry Pi IFÉ-ENS de Lyon est configurée pour : * se connecter automatiquement à un réseau filaire proposant un service DHCP * proposer un service de serveur de terminaux permettant d'afficher sur l'écran d'une machine tierce l'écran de la Raspberry et d'interagir avec elle en mode interactif graphique * proposer le serveur jupyter opérationnel et l'accès aux programmes par authentification de l'utilisateur moon

Cette situation est possible parce que les deux serveurs ne démarrent qu'après que la Raspberry soit connectée au réseau et comme la configuration de l'outil de réseau est effacée cette dernière est réinitialisée et prend en compte les paramètres locaux.

Il reste un point délicat qui est l'identification de l'adresse de la Raspberry sur le réseau. Le plus simple est de disposer d'un outil de gestion de réseau qui fournit directement l'adresse comme sur la figure ci-dessous.

Adresse ip licence cc-BY-NC

Une solution efficace est d'utiliser une commande linux d'interrogation du réseau pour trouver la raspberry. Comme la raspberry porte un serveur VNC (serveur de terminaux) il suffit de rechercher toutes les machines en train d'émettre sur le port réservé à ce type de communication (port 5901). On utilise la commande nmap :

nmap -p5901 192.168.10.0/24 -oG - | grep open

Si la raspberry est la seule en train d'émettre sur le port 5901 on aura une réponse de la forme :

Host: 192.168.10.106 () Ports: 5901/open/tcp//vnc-1///

La raspberry recherchée est à l'adresse ip 192.168.10.106, si plusieurs machines proposent un serveur de terminaux on obtiendra plusieurs lignes identiques à celle proposée ci-dessus.

Une autre solution encore plus efficace est de rechercher l'adresse MAC de l'interface réseau, mais cela implique que ce paramètre soit connu ! Les raspberry pi proposées par le projet Tremplin portent un autocollant indiquant la valeur de l'adresse MAC. Si ce paramètre n'est pas connu il faut se connecter avec clavier/souris/écran et interroger les paramètres de l'interface réseau :

ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enxb827ebad7032: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:ad:70:32 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.106/24 brd 192.168.10.255 scope global enxb827ebad7032
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fead:7032/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:f8:25:67 brd ff:ff:ff:ff:ff:ff

Les données ci dessus fournissent les valeurs regroupées dans le tableau ci-dessous.

Nom de l'interface Adresse MAC
enxb827ebad7032 B8:27:EB:AD:70:32
wlan0 B8:27:EB:F8:25:67

On recherche alors l'interface connectée au réseau portant l'adresse MAC recherchée :

sudo nmap -sP -n 192.168.10.0/24 | grep -e B8:27:EB:AD:70:32 -B 2
Nmap scan report for 192.168.10.106
Host is up (0.0052s latency).
MAC Address: B8:27:EB:AD:70:32 (Raspberry Pi Foundation)

4.b Reconfiguration du réseau

La première connection de la raspberry au réseau via l'interface filaire entraîne la modification des fichiers de configuration qui prennent en charge les paramètres de la raspberry en cours d'usage. Une fois ces paramètres fixés il est possible sans aucune modification de changer de réseau via l'interface filaire. Par contre l'utlisation du WIFI requiert une configuration manuelle. Deux possibilités s'offrent à l'usager : * soit grace au serveur de terminaux (VNC) ou en se connectant avec un clavier et une souris on utilise l'interface graphique du gestionnaire de réseau wicd. * soit pour les utilisateurs avancés ne souhaitant pas utiliser un écran, en recopiant le contenu du fichier de configuration d'un ordinateur déjà connecté au réseau dans le fichier /etc/wicd/wireless-settings.conf ce qui permetà la raspberry d'utiliser les paramètres acquis sur un autre ordinateur.

Si on souhaite utiliser une micro-SD sur une nouvelle raspberry il est nécessaire de remettre à zéro la configuration du réseau pour prendre en compte les paramètres de la nouvelle raspberry. Pour cela effcer le fichier /etc/wicd/manager-settings.conf.

4.c Création d'un certificat d'authentification pour protéger les échanges entre la raspberry et les clients.

La sécurité est une étape cruciale de tout échange sur un réseau numérique. Même si votre raspberry qui est branchée dans une salle de TP derrière le pare-feu de l'établissement paraît ne pas être une menace, elle pourrait bel et bien le devenir ! (c'est très à la mode ne ce moment dans les séries américaines d'utiliser des Raspberries Pi comme instruments d'attaque numérique, cela est en général romancé mais repose effectivement sur la réalité). Il n'est pas nécessaire de mettre en place une politique de sécurité à outrance, par contre il est impératif de mettre en place quelques éléments basiques de protection qui pourront d'ailleurs servir de support à une sensibilisation sur les risques numériques et le comportement à adopter sur les réseaux. L'authentification permet à chaque groupe ou élève (suivant le choix du professeur) de disposer d'un espace protégé des actions du reste du monde.

Callisto est par défaut l'utilisateur qui lance jupyterhub, c'est lui qui dans la version fournie par défaut a créé le dispositif de certification. Pour conserver la configuration proposée c'est donc l'utilisateur callisto qui doit créer un nouveau certificat avec la procédure ci-dessous :

cd ~
mkdir -p Utils/Certificates
cd Utils/Certificates
openssl req -new -newkey rsa:2048 -rand /dev/urandom -nodes -keyout meteojuphub.key -out meteojuphub.csr
#répondre aux questions avec vos informations
openssl req -new -x509 -days 3652 -key meteojuphub.key -out meteojuphub.pem
#répondre aux questions avec vos informations

Le certificat doit être activé pour jupyterhub à la racine du user callisto, dans le répertoire Jupyterhub (il est présent par défaut dans l'image ENS-IFÉ)

cd ~/Jupyterhub
mkdir config
jupyterhub --generate-config 

Éditer le fichier jupyterhub_config.py en décommentant et renseignant les 3 lignes ci-dessous :

## Path to SSL certificate file for the public facing interface of the proxy
#  
#  Use with ssl_key
c.JupyterHub.ssl_cert = '/home/ens-ife/Utils/Certificates/meteojuphub.pem'

## Path to SSL key file for the public facing interface of the proxy
#  
#  Use with ssl_cert
c.JupyterHub.ssl_key = '/home/ens-ife/Utils/Certificates/meteojuphub.key'

## set of usernames of admin users
#  
#  If unspecified, only the user that launches the server will be admin.
c.Authenticator.admin_users = set(['loginAdminName'])

plus de détails dans l'article Installer un Système d'exploitation linux Debian Stretch sur une Raspberry Pi 2 ou 3 avec les outils Weewx, JupyterHub, MRAA et UPM

4.d Les fiches de travail (cahiers numériques)

Les cahiers numériques sont déposés sur un site de collaboration contribution en ligne, tous les cahiers disponibles au moment de la création de l'image ont été ajoutés dans le répertoire CahierDeProgrammes de l'utilisateur moon pour mettre à jour ce répertoire avec les derniers cahiers partagés par les contributeurs, entrer dans le répertoire et taper l'instruction suivante :

git pull

La mise à jour sera effectuée automatiquement, les cahiers numériques se trouvent dans les répertoires JeuxDeLumière, StationMeteo et mixteLedCapteurs.

Il est toujours possible de consulter les cahiers numériques en ligne ou sur le site de visualisation de jupyter

5. Installation de l'image sur une carte microSD (si besoin)

Pour avoir une Raspberry Pi opérationnelle il faut disposer d'une microSD contenant une image capable de démarrer (de "booter"). Ce paragraphe extrait du blog technique décrit comment préparer et installer une carte SD.

Le site Raspberry Pi et de nombreux forums proposent des images avec des goodies particuliers mais pour faciliter le travail des collègues du projet Tremplin et maîtriser complètement le contenu du système d'exploitation, nous avons réalisé et nous mettons à disposition une image contenant les logiciels dont nous avons besoin (appelée image IFÉ-ENS de Lyon). Cette image a été construite au détriment de quelques fonctionnalités que nous n'utilisons pas. Si vous souhaitez installer ces fonctionnalités, vous pouvez récupérer les paquets et de les intégrer (si tant est que des paquets ou des sources vraiment libres existent pour ces fonctions, notez bien que ce n'est pas parce que la Raspberry Pi est un dispositif ouvert que tous les logiciels qui fonctionnent dessus sont des logiciels libres ou opensource...).

La vitesse de la Raspberry Pi dépend fortement de la vitesse en écriture de la SD, la nomenclature classe 10 est dépassée, toutes les SD le sont maintenant. En première approximation la vitesse dépend du prix, choisissez des cartes UHS-I ou UHS-II mais vérifiez bien la vitesse en écriture qui peut être très différente de la vitesse de lecture.

L'installation décrite ici est faite en ligne de commande à partir d'une machine sous linux Debian. La Raspberry Pi fonctionnant d'origine sous linux ce mode d'installation est assez spontané et surtout extrêmement robuste. Il existe sur le net des tutoriaux pour d'autres OS qui sont parfaitement utilisables avec l'image proposée ici, quelques conseils sont fournis dans le déroulé ci-dessous pour permettre d'installer depuis l'OS le plus répandu.

Si vous n'avez pas de machine Debian et que vous souhaitiez suivre le mode d'emploi linux, vous pouvez démarrer votre ordinateur sur une distribution live Debian qui n'altèrera pas votre ordinateur et vous le restituera dans l'état où il était avant la session live. Vous trouverez ici les recettes pour créer une clef USB bootable sur Debian. (Tout autre distribution linux devrait aussi fonctionner d'ailleurs)

Pour parvenir à gérer la carte SD et l'installation de l'image vous aurez besoin des logiciels gparted, wget, 7z et bmap-tools. Pour ce dernier la version 3.2 est indispensable pour utiliser le fichier fourni au téléchargement. Si l'ordinateur que vous utilisez dispose d'une autre version 2.5 par exemple, il vous faudra impérativement refaire le fichier .bmap en appliquant cette ligne de commande

bmaptool create -o nom_image.bmap nom_image

L'expression mon-image correspond au nom du fichier fourni par l'IFE-ENS-de-Lyon sur le site de téléchargement (voir ci-dessous)

Formatter la SD linux

Il est toujours prudent de "nettoyer" sa micro SD et de la formatter proprement avant de commencer. Formatter la SD en fat 32, 1 seule partition sur toute la surface disponible la commande pour faire ce travail en linux est gparted qui propose une interface graphique. Attention cette commande est extrêmement puissante, veillez bien à ne traiter QUE votre SD uniquement votre SD (et surtout pas tout autre disque ou partition), votre SD devrait apparaître spontanément sous un nom de type mmcblk?

sudo gparted

Utiliser les commandes de gparted dans les menus déroulants pour effacer les partitions s'il en existe, sélectionner toute la surface et ajouter une seule partition primaire en fat32. Exécuter l'opération et quitter gparted.

Formatter la SD (autre OS)

Si vous souhaitez utiliser une carte SD préformattée pour la raspberryPi, il faut tout de même la formatter mais Windows ne reconnait pas nativement le système de fichiers ext4 il est nécessaire d'installer sur votre ordinateur un logiciel fournissant cette fonctionnalité par exemple ext2fsd (Read Write ext4).

Télecharger l'image mise à disposition

L'image se trouve sur le mediaserveur du projet tremplin des Sciences. Les chiffres YYYY-MM-DD représentent la date de création à paramétrer en fonction de ce qui est disponible en ligne pour obtenir ce numéro se connecter avec un navigateur web à l'adresse Raspberry Pi3 http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi3 ou Raspberry Pi2 http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi2.

Pour télécharger l'image il suffit de copier coller le nom de l'image dans la barre d'adresse et le téléchargement sera lancé, ou alors utiliser la commande linux wget ou curl, du fait du hardware et des périphériques les images sont différentes pour les Raspberry Pi 2 et 3, il se peut qu'elles soient compatibles mais le bon fonctionnement n'est pas garanti.

Raspberry Pi 2

wget http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi2/YYYY-MM-DD-debian-stretch.bmap
wget http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi2/YYYY-MM-DD-debian-stretch.img.xz  

Raspberry Pi 3

wget http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi3/YYYY-MM-DD-debian-stretch.bmap 
wget http://mediaserv.climatetmeteo.fr/images/RaspBerry/DebianStretchPi3/YYYY-MM-DD-debian-stretch.img.xz  

Décompresser l'image téléchargée

L'image est en format compressé il est nécessaire de la décompresser avec un des nombreux outils de décompression (ici nous utilisons 7Z) :

7z x YYYY-MM-DD-debian-stretch.img.xz

La décompression fournit le fichier image, après cette opération on a donc :

  • Un premier fichier de petite taille avec l'extension bmap qui est un fichier de configuration permettant une copie rapide avec l'utilitaire bmap-tool (ce fichier est inutile si vous utilisez un sytème d'exploitation moins puissant ne sachant pas exploiter le descriptif de l'image)

  • l'image proprement dite de grande taille (de l'ordre de 7.5Go) avec l'extension img

Copier l'image téléchargée sur la microSD

L'utilitaire bmap-tools utilise la description de l'image à copier pour raccourcir le temps de copie en ne copiant pas les blocs vides et en optimisant la taille des blocs copiés. Ci-dessous exemple de trace de la copie de l'image rp3 et rpi2.

sudo bmaptool copy --bmap YYYY-MM-DD-debian-stretch.bmap YYYY-MM-DD-debian-stretch.img /dev/mmcblk0

bmaptool: info: block map format version 2.0
bmaptool: info: 921600 blocks of size 4096 (3.5 GiB), mapped 899072 blocks (3.4 GiB or 97.6%)
bmaptool: info: copying image 'YYYY-MM-DD-debian-stretch.img' to block device '/dev/mmcblk0' using bmap file 'YYYY-MM-DD-debian-stretch.bmap'
bmaptool: info: 100% copied
bmaptool: info: synchronizing '/dev/mmcblk0'
bmaptool: info: copying time: 8m 3.9s, copying speed 7.3 MiB/sec

Copier l'image téléchargée sur la microSD (autre OS)

Sous windows la manipulation d'images ISO n'est pas possible en standard , télécharger le logiciel Win32Disk puis l'utiliser pour recopier l'image téléchargée sur la carte SD (voir image ci-dessous):

Logiciel Win32diskmanager licence cc-BY-NC

Redimensionner la taille utilisable à la taille de la micro SD

L'image n'occupe que la place nécessaire à contenir le système et les fichiers de base (avec un peu de marge pour les étourdis), il est souhaitable dès que possible d'augmenter la taille de la partition à la taille totale de la microSD pour avoir la place de mettre d'autres logiciels ou des données. Suivant vos habitudes et votre maîtrise vous pouvez si vous le souhaitez créer plusieurs partitions à ce moment (Ne vous engagez pas sur la création de plusieurs partitions si vous ne savez pas le faire car il faudra aussi modifier le fichier de configuration du système /etc/fstab en conséquence pour que cela fontionne). Pour redimensionner la partition deux procédures sont possibles :

Soit en utilisant l'ordinateur tiers

Éjecter et remonter la microSD avant de lancer la modification de taille, on réutilise gparted toujours avec les mêmes recommandations de prudence.

sudo gparted

Quitter gparted ejecter la microSD et l'installer sur la Raspberry Pi, vous disposez maintenant d'une Raspberry Pi opérationnelle prête pour la météo et la programmation ! Pour l'utiliser il faudra glisser la SD dans le logement prévu à cet effet, brancher la Raspberry Pi au résseau et à une alimentation micro-USB et on pourra y aller !

Ce branchement suffit effectivement pour être opérationnel mais pour les premières fois surtout si l'on n'est pas habitué à la ligne de commandes linux il est souhaitable de brancher aussi un écran un clavier et une souris....et on se retrouve alors face à un vrai ordinateur (voir plus bas).

Soit en utilisant la Raspberry Pi nouvellement installée (à faire plus tard, après le démarage et la mise en fonction de la raspi)

Dans certains cas des problème peuvent apparaître avec des SD redimensionnées avec gparted (vous trouverez sur le web une abondante littérature sur les performances et les faiblesses des différentes micro-SD si vous n'avez pas choisi une SD "bas de game" vous ne devriez pas être concernés par ces problèmes, mais ... on ne sait jamais). Dans d'autre cas la version de gparted un peu trop ancienne ne gère pas le paramètre metadata_csum et ne parvient pas à redimensionner la partition racine. Dans ces deux cas gparted est inutilisable et la solution ci-dessus est inaplicable et la solution ci-dessous utilisant la Raspberry Pi est obligatoire.

Pour éviter d'utiliser gparted et l'ordinateur tiers il est possible de redimensionner la partition racine directement sur la Raspberry Pi fonctionnant avec la nouvelle image. Pour cela une fois la Raspberry Pi opérationnelle et démarrée utiliser la commande

sudo fdisk /dev/mmcblk0
  • Taper m pour voir la liste des commandes (juste pour information)
  • Taper p pour voir la liste des partitions disponibles, normalement il y en deux

    • une FAT : /dev/mmcblk0p1 * 2048 133119 131072 64M c W95 FAT32 (LBA)
    • une linux : /dev/mmcblk0p2 133120 62517247 62384128 29,8G 83 Linux
  • Taper ensuite

    • d puis
    • 2 puis
    • n puis
    • p puis
    • 2 puis
    • accepter les valeurs par défaut qui correspondent à la taille effectivement disponible sur la cartes SD et écrire N pour "remove signature",
    • pour finir taper w.

Taper ensuite sudo reboot puis :

sudo resize2fs /dev/mmcblk0p2
sudo reboot

Après ce second redémarrage la racine du système occupe maintenant la totalité de l'espace disponible sur la SD.

Modifier le nom de la raspberry Pi

Si besoin il est possible de changer le nom de sa Raspberry Pi, s'il n'est pas installé ajouter le paquet dbus puis positionner la variable hostname sur le nouveau nom choisi :

sudo apt-get install -y dbus
hostname=mouveauNomDeLaRaspberry

Éditer le fichier /etc/hosts et remplacer raspife3 par le nouveau nom de la machine

jed /etc/hosts
127.0.0.1      mouveauNomDeLaRaspberry

Appliquer les changements puis redémarrer.

sudo hostnamectl set-hostname "$hostname"
sudo shutdown -r now

Webographie

  1. Installer un Système d'exploitation linux Debian Stretch sur une Raspberry Pi 2 ou 3 avec les outils Weewx, MRAA et UPM

  2. Site Raspberry Pi


Commentaires