img2calc: convertis tes images à afficher sur micro:bit


Depuis peu, img2calc gère la production de scripts Python incluant de quoi afficher l'image convertie sur l'écran de ta calculatrice.


En effet la BBC Micro:bit dispose d'un afficheur muni de 5×5 LEDs rouges.
Une option disponible pour les modèles gérant cette carte, soit à ce jour les TI-Nspire CX II ainsi que les éditions Python des TI-83 Premium CE et TI-84 Plus CE.

img2calc t'offre ici la possibilité de générer ton script pour 2 modules Python différents au choix :
- soit microbit
- soit ti_innovator (micro:bit) pour les TI-Nspire CX II ou ti_hub (micro:bit) pour la plateforme CE
Si par contre tu choisis ti_innovator (micro:bit) ou ti_hub (micro:bit), ici tu n'as rien à installer puisque ces modules sont directement intégrés à la calculatrice !

L'astuce mise en œuvre est d'utiliser leur méthode send() afin de définir notre propre fonction permettant d'envoyer directement à la carte micro:bit le code Python que l'on souhaite lui faire exécuter :
- Code: Select all
def send_microbit(cmd):
send("\x04")
send(cmd)
send("\x05")

Mais quel format adopter pour l'image au sein du script Python ?
On peut certes imaginer une boucle allumant les diodes une par une à coups d'appels
display.set_pixel(x,y,brillance)
, la brillance étant codée de 0 à 9, ce qui nous laisse toute liberté sur le format de stockage des données de l'image.Cette méthode a toutefois le défaut d'être lente, puisque concernant ici un afficheur externe. En effet pour 5×5=25 diodes, les délais dus au protocole de communication seront multipliés par 25. Cela donnera de plus un affichage de l'image non pas instantané mais progressif, et pas du meilleur effet, bien embêtant de plus si tu souhaites afficher plusieurs images à la suite pour donner un effet d'animation.

Sachant qu'avec le projet img2calc nous visons en priorité les performances, il nous faut trouver autre chose. Et bien cela tombe bien, car la carte BBC micro:bit gère son propre format d'image :
- Code: Select all
#your image data
#5x5 10-shades of gray pixels
image = "33445:20005:21006:00006:98877"
display.show(Image(...))
! 
Tu peux maintenant dessiner absolument tout ce que tu veux, de préférence en niveaux de gris sur 5×5 pixels, et obtenir rapidement le script l'affichant sur ta micro:bit !

Tu restes libre bien sûr de fournir des images couleurs ou plus grandes, elles seront si besoin redimensionnées et passées en niveaux de gris. Mais avec ici sur la micro:bit un afficheur munis de pixels peu nombreux et assez "gros", il vaut mieux garder le contrôle de ce que ça donnera pixel par pixel, en fournissant une image au plus proche du format d'affichage.
Liens img2calc :
Modules micro:bit :