Page 1 of 1

BBC micro:bit v2 + mise à jour pour TI-83 Premium CE Python

Unread postPosted: 21 Jan 2021, 15:43
by critor
12212Depuis 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é ! :bj:

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

129591295812957Et 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 ! :bj:
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).

129621296112960La 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


12277La 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.

1296512964Pour 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... :#roll#:

Une capacité absolument ridicule, inférieure à ce qu'offrent les interpréteurs Python des calculatrices graphiques :
  1. 4,100 Mo : TI-Nspire CX II + TI-Nspire CX (Ndless + KhiCAS CX)
  2. 2,068 Mo : TI-Nspire CX II
  3. 2,050 Mo : TI-Nspire CX II + TI-Nspire CX + TI-Nspire (Ndless + MicroPython)
  4. 1,033 Mo : Casio Graph 90+E
  5. 1,014 Mo : HP Prime (version alpha)
  6. 258,766 Ko : Casio Graph 35/75+E (appli CasioPython)
  7. 101,262 Ko : Casio Graph 35+E II
  8. 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
  9. 33,545 Ko : NumWorks
  10. 32,648 Ko : Casio Graph 35+E II (appli CasioPython)
  11. 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
  12. 20,839 Ko : TI-83 Premium CE + TI-Python
  13. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE-T Edition Python
  14. 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. :mj:

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... :'(

13451Mais pour cette année 2021 arrive la nouvelle carte micro:bit v2.

Dépêchons-nous de voir ce qu'elle vaut. ;)

1345012961Et 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 ! :bj:
  • mémoire de stockage Flash d'une capacité de 512 Kio au lieu de 256 Kio soit 2 fois plus grande ! :bj:
  • mémoire de travail RAM d'une capacité de 128 Kio au lieu de 16 Kio soit 8 fois plus grande :bj:

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

1344912962

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.

13452
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)

1345413453Demandons 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.

13455Mais confirmons en lui faisant faire quelque chose, comme afficher l'icône de Pac-man... bingo, ça marche ! :bj:
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. :D

13456Finissons-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 ! :bj:
  1. 4,100 Mo : TI-Nspire CX II + TI-Nspire CX (Ndless + KhiCAS CX)
  2. 2,068 Mo : TI-Nspire CX II
  3. 2,050 Mo : TI-Nspire CX II + TI-Nspire CX + TI-Nspire (Ndless + MicroPython)
  4. 1,033 Mo : Casio Graph 90+E
  5. 1,014 Mo : HP Prime (version alpha)
  6. 258,766 Ko : Casio Graph 35/75+E (appli CasioPython)
  7. 101,262 Ko : Casio Graph 35+E II
  8. 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
  9. 63,024 Ko : BBC micro:bit v2
  10. 33,545 Ko : NumWorks
  11. 32,648 Ko : Casio Graph 35+E II (appli CasioPython)
  12. 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
  13. 20,839 Ko : TI-83 Premium CE + TI-Python
  14. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE-T Edition Python
  15. 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 ? :D

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 ! :bj:
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... :#roll#:



Téléchargements :

Ressource : activités vidéo micro:bit pour TI-83 Premimum CE