Depuis des années maintenant,
Texas Instruments réalise de gros efforts pour rendre la programmation de ses calculatrices accessible à tous et toutes. Le constructeur a prêté une attention toute particulière aux plus jeunes et non initiés, souhaitant leur permettre de créer tous les projets imaginables sans avoir à se concentrer sur des difficultés annexes.
Nous pouvions déjà citer l'interface
TI-Innovator Hub, le robot pilotable
TI-Innovator Rover, la grille programmable
TI-RGB Array ou encore l'adaptateur
TI-SensorLink pour capteurs analogiques
Vernier.
Tous ces éléments ont de plus l'avantage d'être utilisables directement avec le langage
Python des calculatrices concernées, faisant de l'écosystème
Texas Instruments le seul
Python connecté !
Un superbe support pour les enseignements scientifiques au lycée surtout maintenant que tous partagent le même langage de programmation, notamment en
SNT, spécialité
NSI,
SI et
Physique-Chimie, avec le gros avantage de la mobilité. En effet, les programmes produits et données collectées restent présents dans la calculatrice apportée par chaque élève à chaque cours, ce qui allège la charge logistique de l'enseignant. Données et algorithmes pourront donc être traités / travaillés à la prochaine séance, en devoir à la maison ou même de façon transdisciplinaire en collaboration avec un autre enseignant !
Et
depuis la rentrée 2020 dernière grande révolution en date, plus besoin de t'équiper en
TI-Innovator pour bénéficier de ces formidables avantages. En effet, la
TI-83 Premium CE Edition Python s'est vu rajouter la gestion du nanoordinateur
BBC micro:bit programmable en
Python dont tu étais peut-être déjà équipé·e !
Attention, cela nécessite obligatoirement que ta calculatrice fasse tourner une version 5.5.1 ou supérieure.
La carte
micro:bit est initialement un projet lancé par la
BBC (British Broadcasting Corporation), le groupe audiovisuel public britannique, accompagné de nombre de partenaires dont
ARM,
Microsoft et
Samsung. Elle fut distribuée gratuitement à un million d'élèves britanniques de 11 et 12 ans.
Le nom rend hommage au précédent succès du groupe dans ce domaine, le microordinateur à vocation pédagogique
BBC Micro des années 1980, l'équivalent britannique de par son adoption à nos microordinateurs
Thomson MO5 et
TO7 inondant écoles, collèges et lycées à la fin de cette décennie dans le cadre du plan
IPT (Informatique Pour Tous).
La carte
micro:bit dans sa version 1 inclut :
- un afficheur, grille programmable de 5×5= 25 diodes rouges adressables, bien adapté pour l'affichage de motifs éventuellement animés ou encore de texte défilant
- nombre de capteurs intégrés :
- capteur de luminosité (lié aux diodes)
- capteur de température (sur le processeur)
- 2 boutons poussoirs
A
et B
programmables de part et d'autre, comme sur les premières manettes et consoles de jeux portables de chez Nintendo - accéléromètre 3D, permettant de détecter les variations d'accélération et par conséquence diverses actions : secouer, pencher, chute libre, ...
- boussole magnétique 3D, pour détecter cette fois-ci les champs magnétiques
- connectivité Bluetooth 4.0 basse énergie 2,4 GHz maître/esclave
La carte
micro:bit utilise un connecteur
micro-USB et ta calculatrice un
mini-USB.
Pour relier les deux une solution est d'adjoindre un
adaptateur USB A femelle ↔ USB mini-B OTG mâle au câble
micro-USB venant avec ta carte
micro:bit, testée avec succès.
Pour moins d'encombrement, tu as aussi la solution d'utiliser un câble direct, un
USB micro-B mâle ↔
USB mini-A mâle, disponible par exemple
chez Lindy et que nous avons testé avec succès.
Pour pouvoir contrôler ta carte
micro:bit à partir de tes scripts,
Texas Instruments te propose des modules
Python complémentaires à installer sur ta calculatrice. Le constructeur en met 9 à ta disposition, et ces modules te permettent chacun d'accéder à tout ou partie des modules ou classes correspondants dans le
Python micro:bit :
- mb_butns → microbit.buttons
- mb_disp → microbit.display
- mb_grove
- mb_music → music
- mb_neopx → neopixel
- mb_pins
- mb_radio → radio
- mb_sensr
Nous
avions même vu qu'il était parfaitement possible depuis ta
TI-83 Premium CE Edition Python de faire exécuter du code
Python totalement arbitraire à la carte
micro:bit, permettant ainsi d'accéder à des fonctions
Python non exposées par les modules de
Texas Instruments, ou même d'y définir ses propres fonctions.
Voici justement une fonction exécutant directement sur la carte
micro:bit connectée le code
Python passé en paramètre sous forme de chaîne de caractère, ainsi que de quoi en récupérer le résultat éventuel :
- Code: Select all
from ti_hub import *
def mb_run(code):
send('\x05') # enter paste mode (Ctrl-E)
send(code)
send('\x04') # exit paste mode (Ctrl-D)
def mb_get():
return get().split("\r\n")[-3]
C'était justement l'occasion d'explorer un peu plus profondément les possibilités de la
micro:bit, et ce fut hélas extrêmement décevant.
Rappelons que les interpréteurs
MicroPython ou similaires font appel à 3 types de mémoires avec les rôles suivants :
- la mémoire de stockage qui accueille et conserve tes scripts
- le stack (pile) qui, à l'exécution, accueille les références vers les objets créés
- le heap (tas) qui, à l'exécution, accueille le contenu de ces objets
En gros le
stack limite donc le nombre d'objets différents pouvant exister simultanément en mémoire, alors que le
heap limite la taille globale occupée par le contenu de ces objets.
Le langage
Python a toutefois le gros défaut d'être très gourmand en mémoire, le moindre petit objet de rien du tout créé gaspillant une place énorme. Voici quelques références de tailles pour les plateformes 32 bits :
- pour un entier nul : 24 octets déjà...
- pour un entier court non nul (codable sur 31 bits + 1 bit de signe) : 28 octets
- pour un entier long :
- 28 octets
- + 4 octets pour chaque groupe de 30 bits utilisé par son écriture binaire au-delà des 31 bits précédents
- pour une chaîne:
- 49 octets
- + 1 octet par caractère
- pour une liste :
- 64 octets
- + 8 octets par élément
- + les tailles de chaque élément
En pratique, le
heap est donc bien souvent le facteur limitant. Nous l'avions donc testé en priorité sur
BBC micro:bit :
- Code: Select all
mb_run("import gc")
mb_run("a,f=gc.mem_alloc(),gc.mem_free")
mb_run("a")
a=int(mb_get())
mb_run("f")
b=int(mb_get())
[a,f,a+f]
Et voilà, nous constations en effet que l'interpréteur de la
micro:bit offrait un
heap (tas) Python de seulement
10 Ko de capacité, avec en pratique juste
8 Ko et quelques de libres...
Une capacité absolument ridicule, inférieure à ce qu'offrent les interpréteurs
Python des calculatrices graphiques :
- 4,100 Mo : TI-Nspire CX II + TI-Nspire CX (Ndless + KhiCAS CX)
- 2,068 Mo : TI-Nspire CX II
- 2,050 Mo : TI-Nspire CX II + TI-Nspire CX + TI-Nspire (Ndless + MicroPython)
- 1,033 Mo : Casio Graph 90+E
- 1,014 Mo : HP Prime (version alpha)
- 258,766 Ko : Casio Graph 35/75+E (appli CasioPython)
- 101,262 Ko : Casio Graph 35+E II
- 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
- 33,545 Ko : NumWorks
- 32,648 Ko : Casio Graph 35+E II (appli CasioPython)
- 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
- 20,839 Ko : TI-83 Premium CE + TI-Python
- 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE-T Edition Python
- 8,240 Ko : BBC micro:bit
La
micro:bit permettait sans aucun doute un large éventail de projets grâce à ses capteurs et actionneurs, mais chaque projet pris individuellement ne pouvait pas aller bien loin, devant sans doute se limiter essentiellement à de l'utilisation très légère des fonctions fournies. Tout élève suffisamment intéressé pour avoir envie d'approfondir sera rapidement confronté à des erreurs de mémoire de plus en plus difficiles et ennuyantes à contourner, et peut-être même pire dégoûté de toute poursuite dans cette branche.
Mais rien de surprenant lorsque l'on sait que la
micro:bit utilise un microcontrôleur
nRF51822 de chez
Nordic Semiconductor, avec les spécifications suivantes :
- processeur 32 bits ARM Cortex-M0 cadencé à 16 MHz
- mémoire de stockage Flash d'une capacité de 256 Kio
- mémoire de travail RAM d'une capacité de 16 Kio, et voilà qui explique tout...
Mais pour cette année 2021 arrive la nouvelle carte
micro:bit v2.
Dépêchons-nous de voir ce qu'elle vaut.
Et bien justement, comme tu peux le constater ci-contre elle utilise un tout nouveau microcontrôleur, le
nRF52833, toujours de chez
Nordic Semiconductor. Cette fois-ci nous avons des spécifications qui devraient nous permettre de respirer :
- processeur 32 bits ARM Cortex-M0 cadencé à 64 MHz au lieu de 16 MHz soit 4 fois plus rapide !
- mémoire de stockage Flash d'une capacité de 512 Kio au lieu de 256 Kio soit 2 fois plus grande !
- mémoire de travail RAM d'une capacité de 128 Kio au lieu de 16 Kio soit 8 fois plus grande
Et ce n'est pas tout, nous constatons d'autres nouveautés sur cette face :
- ajout d'un haut-parleur
- ajout d'un microphone MEMs
- bouton poussoir qui ne sert plus seulement à la réinitialisation (reset), mais permet désormais également d'éteindre la carte (appui long) et de la rallumer (appui court)
- l'antenne Bluetooth qui devient compatible BLE Bluetooth 5.0, contre seulement 4.0 auparavant
Passons maintenant à l'autre face, car les nouveautés ne sont pas terminées. Ici nous avons donc en prime :
- ajout d'une diode DEL indiquant l'état du microphone
- ajout d'un bouton tactile sur le logo micro:bit, voici pourquoi il perd sa couleur au profit de contacts métalliques
Reste-t-il encore à confirmer en pratique que la capacité
RAM accrue sert bien entre autres à augmenter le
heap Python, et dans quelle mesure.
Première chose absolument indispensable à faire, tu dois commencer par reprogrammer ta carte
micro:bit avec le fichier
firmware .hex dédié fourni par
Texas Instruments.
Ce
firmware est conçu pour rajouter à ta carte
micro:bit la capacité de communiquer via son port
micro-USB avec ta calculatrice
TI-83 Premium CE Edition Python ou
TI-84 Plus CE-T Python Edition.
Normalement rien de bien compliqué, il te suffit juste de connecter ta carte à un ordinateur pour y copier le fichier en question, la carte redémarrant automatiquement en fin de copie pour exécuter le nouveau
firmware.
Sauf qu'ici ça ne marche pas. Le fichier
.hex distribué par
Texas Instruments n'est apparemment pas compatible
micro:bit v2, nous obtenons l'émoticône d'erreur accompagnée du code
529.
Mais ne baissons pas les bras. Rendons-nous sur l'
éditeur Python en ligne des cartes
micro:bit, et importons-y le fichier
.hex de
Texas Instruments.
Déjà bonne nouvelle, le fichier est reconnu par l'éditeur, nous y obtenons en clair le code
Python d'initialisation :
- Code: Select all
# version history
# 1.0 python functionality
# 1.1 Added TI LOGO and grove ranger
# 1.2 added handshake
# 1.3 added get_version
# 2.0 removed handshake and changed version to 2.0 for release in france
from microbit import *
from machine import time_pulse_us
ti = Image("07700:""07797:""77777:""07770:""00700")
def ranger(pin=pin0):
pin.write_digital(1)
pin.write_digital(0)
pin.read_digital()
t = time_pulse_us(pin,1,35000)
print(t)
def get_version():
print ("TI-Runtime Version 2.0")
display.show(ti,delay=10,wait=False)
Demandons donc à l'éditeur de nous générer un nouveau fichier
.hex à partir de ce code.
Il y a espoir, cette fois sa copie sur
micro:bit v2 ne déclenche plus d'erreur, et affiche bien le logo de
Texas Instruments.
Très bon signe, la
micro:bit v2 semble correctement se comporter, l'importation du module
microbit ne déclenchant aucune erreur.
Mais confirmons en lui faisant faire quelque chose, comme afficher l'icône de Pac-man... bingo, ça marche !
- Code: Select all
from microbit import *
from mb_disp import *
display.show("Image.PACMAN",delay=400,wait=True)
Nous te mettons ci-dessous dans les ressources directement le fichier
.hex corrigé, désormais compatible à la fois
micro:bit v1 et
micro:bit v2.
Finissons-en donc avec le test de la capacité
heap Python.
Pour l'exécution des scripts
Python sur
micro:bit v2 nous bénéficions donc apparemment de
63 Ko libres, pour une capacité totale de
64 Kio.
Fantastique c'est 8 fois plus que les pauvres
8 Ko de l'ancienne carte !
- 4,100 Mo : TI-Nspire CX II + TI-Nspire CX (Ndless + KhiCAS CX)
- 2,068 Mo : TI-Nspire CX II
- 2,050 Mo : TI-Nspire CX II + TI-Nspire CX + TI-Nspire (Ndless + MicroPython)
- 1,033 Mo : Casio Graph 90+E
- 1,014 Mo : HP Prime (version alpha)
- 258,766 Ko : Casio Graph 35/75+E (appli CasioPython)
- 101,262 Ko : Casio Graph 35+E II
- 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
- 63,024 Ko : BBC micro:bit v2
- 33,545 Ko : NumWorks
- 32,648 Ko : Casio Graph 35+E II (appli CasioPython)
- 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
- 20,839 Ko : TI-83 Premium CE + TI-Python
- 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE-T Edition Python
- 8,240 Ko : BBC micro:bit v1
63 Ko c'est quasiment le double de ce qu'offre la
NumWorks, et également 3,5 fois plus que ce qu'offre la
TI-83 Premium CE Edition Python, tu te rends compte ?
La capacité du
heap Python de la
TI-83 Premium CE Edition Python est en effet un gros point faible. Mais ici en lui adjoignant une
BBC micro:bit v2 tu multiplies la taille de
heap utilisable par 4,5 !
De quoi approfondir des projets
Python sur cette machine, à condition de distribuer correctement les différents objets
Python créés entre le
heap interne de la calculatrice et le
heap externe de la carte, et bien sûr les faire interagir correctement.
Malheureusement, à la différence nous n'avons à ce jour pas accès au code source des modules
micro:bit additionnels de la
TI-83 Premium CE Edition Python, ni à aucun outil permettant de générer ce genre de module, et ne pouvons donc ni corriger, ni améliorer, ni étendre ces modules.
Nous sommes donc hélas dans l'incapacité de faciliter ton utilisation des nouveaux éléments de la
micro:bit v2 depuis ta calculatrice, notamment les microphone, haut-parleur et bouton tactile. La seule façon de les exploiter à ce jour sera de faire appel à la fonction
mb_run() partagée plus haut, et lui passer en paramètre le code
Python brut à exécuter par la carte.
Avec les difficultés que cela implique, ton script comportant alors à la fois du code
Python qui sera exécuté dans le contexte de la calculatrice, et du code
Python qui sera exécuté dans le contexte de la carte
BBC micro:bit. Il ne faudra surtout pas confondre, les contextes des deux interpréteurs
Python étant très différents. Pas le meilleur cadre, du moins pour débuter...