BBC micro:bit v2 + mise à jour pour TI-83 Premium CE Python
Posted: 21 Jan 2021, 15:43
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 !
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 :
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 :
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 :
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
etB
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 :
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 :
En pratique, le heap est donc bien souvent le facteur limitant. Nous l'avions donc testé en priorité sur BBC micro:bit :
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 :
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 :
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
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 :
Et ce n'est pas tout, nous constatons d'autres nouveautés sur cette face :
Passons maintenant à l'autre face, car les nouveautés ne sont pas terminées. Ici nous avons donc en prime :
Reste-t-il encore à confirmer en pratique que la capacité RAM accrue sert bien entre autres à augmenter le heap Python, et dans quelle mesure.
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.
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 :
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 !
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.
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 !
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.
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...
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...
Téléchargements :
- firmware TI (pour micro:bit v1 et micro:bit v2)
- OS 5.5.2.0044 + applis (pour TI-83 Premium CE)
- OS 5.5.2.0044 (pour TI-83 Premium CE)
- OS 5.6.0.0020 + applis (pour TI-84 Plus CE)
- OS 5.6.0.0020 (pour TI-84 Plus CE)
- application Python 5.5.2.0044
- module Python MICROBIT (essentiel)
- modules Python micro:bit : MB_BUTNS, MB_DISP, MB_GROVE, MB_MUSIC, MB_NEOPX, MB_PINS, MB_RADIO, MB_SENSR (au choix selon besoins du projet)
- modules Python graphiques : ce_turtl, ce_chart, ce_quivr, ce_box
Ressource : activités vidéo micro:bit pour TI-83 Premimum CE