π
<-
Chat plein-écran
[^]

News 2024
Avril (13)
Mars (7)
Janvier (20)

News 2023
Octobre (19)
Août (14)
Juillet (13)
Juin (21)
Mai (29)
Avril (24)
Mars (24)
Janvier (24)

News 2022
Octobre (23)
Août (14)
Juillet (15)
Juin (17)
Mai (31)
Avril (27)
Mars (28)
Janvier (34)

News 2021
Octobre (24)
Août (37)
Juillet (50)
Juin (32)
Mai (48)
Avril (61)
Mars (35)
Janvier (34)

News 2020
Octobre (17)
Août (43)
Juillet (43)
Juin (45)
Mai (60)
Avril (78)
Mars (36)
Janvier (39)

News 2019
Octobre (13)
Août (18)
Juillet (23)
Juin (28)
Mai (31)
Avril (26)
Mars (38)
Janvier (37)

News 2018
Octobre (13)
Août (32)
Juillet (23)
Juin (64)
Mai (63)
Avril (45)
Mars (43)
Janvier (45)

News 2017
Octobre (26)
Août (39)
Juillet (52)
Juin (88)
Mai (51)
Avril (43)
Mars (37)
Janvier (33)

News 2016
Octobre (25)
Août (42)
Juillet (34)
Juin (109)
Mai (55)
Avril (34)
Mars (37)
Janvier (24)

News 2015
Octobre (22)
Août (56)
Juillet (22)
Juin (94)
Mai (56)
Avril (32)
Mars (40)
Janvier (21)

News 2014
Octobre (26)
Août (18)
Juillet (23)
Juin (101)
Mai (57)
Avril (59)
Mars (54)
Janvier (31)

News 2013
Octobre (67)
Août (50)
Juillet (43)
Juin (193)
Mai (93)
Avril (102)
Mars (45)
Janvier (50)

News 2012
Octobre (64)
Août (63)
Juillet (53)
Juin (132)
Mai (88)
Avril (73)
Mars (57)
Janvier (58)

News 2011
Octobre (56)
Août (31)
Juillet (27)
Juin (71)
Mai (61)
Avril (32)
Mars (36)
Janvier (24)

News 2010
Octobre (11)
Août (8)
Juillet (14)
Juin (10)
Mai (3)
Avril (3)
Mars (1)

News 2009
Août (3)
Juin (2)
Mai (1)
Avril (2)
Mars (1)

Tanks, jeu Nintendo Wii Play adapté pour 83 Premium CE/84+CE

Nouveau messagede critor » 01 Mar 2022, 17:43

1146310913Nombre de jeux sortant pour smartphones, tablettes, ordinateurs et consoles de jeux, se retrouvent plusieurs années plus tard disponibles sur calculatrices graphiques.

Ta TI-83 Premium CE (ou TI-84 Plus CE hors de France) permet de jouer directement à l'ensemble des jeux compatibles avec la console Nintendo Game Boy monochrome (1989), grâce à l'émulateur dédié TI-Boy CE par calc84maniac.

Pour les consoles de jeux et plus généralement plateformes ne disposant pas encore d'un émulateur dédié sur TI-83 Premium CE ou compatible, les jeux doivent être adaptés au cas par cas. Parmi ces adaptations souvent très réussies de jeux sortis pour d'autres plateformes, on peut citer entre autres :
  • Spaze Invaders (d'après Space Invaders sur bornes d'arcade - 1978)
  • PacMan CE (d'après le jeu sur bornes d'arcade - 1980)
  • Donkey Kong CE (d'après le jeu sur bornes d'arcade - 1981)
  • Tetric A (d'après Tetris - 1984)
  • Androides (d'après le jeu sur microordinateurs Thomson - 1985)
  • Crystann (d'après le jeu sur microordinateurs Thomson - 1985)
  • Snail Maze (d'après le jeu sur console Sega Master System - 1986)
  • CMonster (d'après Arkanoid sur bornes d'arcade - 1986)
  • Oiram CE (d'après Super Mario Bros 3 sur console Nintendo NES - 1988)
  • Mario Kart CE (d'après le jeu sur console Nintendo Super NES - 1992)
  • Snorlax's Lunchtime (d'après le jeu Pokémon Mini inclus dans le jeu Pokémon Channel sur console Nintendo GameCube)
  • Portal Returns CE (d'après Portal - 2007)
  • Billy Box (d'après le jeu sur microordinateurs Thomson - 2010)
  • Flappy Bird (d'après le jeu mobile - 2013)
  • Geometry Dash CE (d'après le jeu mobile - 2013)
  • CEleste (d'après le jeu sur console Pico-8 - 2015)
6597533285485897622262646329656876981374715221532965666888758115132

15281Mais il existe encore bien d'autres consoles de jeux, comme par exemple la Nintendo Wii sortie en 2006. Dès 2006 au Japon et en Europe puis 2007 en Amérique du Nord, sort Wii Play, un jeu constitué de plusieurs mini-jeux.

Mais désormais, grâce à commandblockguy, tu te vois offrir une adaptation d'un de ces mini-jeux pour TI-83 Premium CE et compatibles (84+CE...), Tanks! CE.

Le but du jeu est de détruire le ou les chars adverses présents sur le terrain et contrôlés par une IA. Tu pilotes pour ta part ton char à l'aide des touches suivantes :
  • touches fléchées pour te déplacer
  • touche
    mode
    pour tourner la tourelle
  • touche
    2nde
    pour faire feu
  • touche
    alpha
    pour déposer une mine
  • touche
    suppr
    ou
    del
    pour passer directement au niveau suivant
  • touche
    +
    pour faire pause et obtenir le menu
  • touche
    annul
    ou
    clear
    pour quitter

Que ce soit pour toi ou tes ennemis, un seul tir au but suffit à détruire un tank. 20 niveaux sont disponibles.

Tu démarres le jeu en disposant de 3 tanks, histoire donc de remplacer 2 fois un tank détruit. Tu obtiendras par la suite un tank bonus après avoir gagné aux niveaux 5 puis 10 et 15.

Attention, Tanks CE rentre dans la catégorie des programmes en langage machine dits ASM.

Or, suite à un acte irresponsable d'un enseignant de Mathématiques français avec ses gesticulations certes compréhensibles mais aveugles dans le contexte de la réforme du lycée, Texas Instruments a réagi en supprimant la gestion de tels programmes depuis la mise à jour 5.5.1.

Si tu es sur une des versions ainsi bridées, tu peux quand même jouer sans trop d'efforts. Il te faut :
  1. installer arTIfiCE pour remettre la possibilité de lancer des programmes ASM
  2. ensuite de préférence installer Cesium pour pouvoir lancer les programmes ASM plus facilement, ou même AsmHook pour pouvoir les lancer comme avant
  3. installer les bibliothèques C nécessaires au fonctionnement de certains jeux dont celui-ci (mais rien de compliqué, juste à transférer le fichier et c'est tout)

Téléchargements :
Lien vers le sujet sur le forum: Tanks, jeu Nintendo Wii Play adapté pour 83 Premium CE/84+CE (Commentaires: 0)

Prototype TI-Nspire CAS Touchpad Hildebrando + OS 3.9.0.450

Nouveau messagede critor » 02 Mar 2022, 12:11

Pour la rentrée 2007 sortaient les toutes premières TI-Nspire. Elles furent remplacées pour la rentrée 2010 par les TI-Nspire Touchpad, l'un des changements majeurs comme leur nom l'indiquait était l'ajout d'un pavé tactile.

Le logiciel de mathématiques intégré TI-Nspire est un véritable chef-d'œuvre d'horlogerie, faisant exister et interagir entre elles nombre d'applications interconnectées (tableur, géométrie dynamique, acquisition de données, ...). Un changement local à une application peut ainsi avoir des conséquences hors de l'application en question, et il est difficile de toujours tout anticiper.

C'est pour cela que Texas Instruments fait régulièrement appel à des développeurs et testeurs QA (Quality Assurance) externes, notamment de chez Hildebrando, une société au Mexique.

Aujourd'hui, Frédéric Desautels alias mr womp womp nous a déniché un prototype TI-Nspire CAS Touchpad apparemment passé entre les mains d'Hildebrando.

Les prototypes chez Texas Instruments suivent des phases successives :
  1. PROTO : prototype (concept initial)
  2. EVT : engineering validation tests (concernent plutôt le développement matériel)
  3. DVT : developement validation tests (concernent plutôt le développement logiciel)
  4. PVT : production validation tests (derniers tests avant le lancement de la production de masse)
  5. MP : production de masse

1314713143Effectivement ici il s'agit bien d'un prototype, puisque nous notons au dos plusieurs mentions de la phase DVT :
  • dans le cadre à la place du numéro de série, une mention CAS RCB DVT1 NOT FOR SALE 188 P-1209
  • une étiquette à code barre résumant la chose de façon plus lisible en DVT1-188 P-1209
Il s'agit donc d'un prototype DVT1 de numéro de série 188 assemblé en décembre 2009 dans l'usine de code P (usine d'Inventec à Pudong en Chine).

Mais d'autre part, nous avons une autre étiquette DVT1-188 P-1209 mentionnant cette fois-ci HILDEBRANDO.

1314213148Sur du DVT nous ne nous attendons à rien de bien surprenant, mais Frédéric a quand même démonté le prototype pour nous. Nous avons :
  • une carte mère PCB-TG2995D-MB-4420, au lieu de PCB-TG2995D-MB-4420 pour les modèles de production
  • une carte écran TG2995-C-LB-2410 identique à celle des modèles de production

13144Non, ce qui devrait être intéressant sur ce prototype, c'est le logiciel.

Démarrer la calculatrice avec les touches
esc
menu
-
enfoncées nous permet d'accéder au logiciel de diagnostics. Nous notons une version 2.00.837 compilée le 1er décembre 2009 inconnue jusqu'à ce jour, alors que les modèles de production sont dotés de la version 2.00.1183 compilée le 19 février 2010, un gros écart.

13145Une fois la calculatrice redémarrée normalement rien de spécial avec les Boot1 et Boot2, mêmes versions respectives 1.1.8916 et 3.0.1.131 que sur les modèles de production.

13146Par contre le système d'exploitation est pour sa part intéressant. Il s'agit d'une version 3.9.0.450 jusqu'ici inconnue, compilée le 11 avril 2014. Une préversion donc de l'avant-dernier système d'exploitation sorti pour les TI-Nspire TouchPad, le 3.9.0.461 compilé le 16 mai 2014.

Bien qu'il s'agisse d'un prototype, l'OS a visiblement été signé avec les clés de production et peut donc être installé sur n'importe quelle calculatrice TI-Nspire CAS TouchPad commercialisée.

Frédéric l'a justement dumpé pour nous et tu peux dès maintenant l'installer sur ta calculatrice ou ton émulateur adéquat.

Outre l'intérêt historique de cette sauvegarde, les quelques différences entre les vieux OS 3.9.0.450 et 3.9.0.461 peuvent paraître sans enjeu maintenant 8 ans après.

Mais avoir accès à des prototypes testés chez Hildebrando pourrait se révéler particulièrement intéressant. Si les fichiers de tests sont toujours présent dans le système de fichiers, cela pourrait nous révéler la nature des tests ainsi que les bugs recherchés, et être fort utile à l'équipe Ndless si elle veut bien reprendre du service plutôt que de laisser mourir le projet comme elle le fait depuis maintenant 1 an (avec 4 mises à jour TI-Nspire depuis dont aucune suivie d'une mise à jour de Ndless).

Malheureusement ici le système de fichiers était quasiment vide, peut-être plus de chances la prochaine fois... ;)




Téléchargements : TI-Npire CAS OS 3.9.0.450
Lien vers le sujet sur le forum: Prototype TI-Nspire CAS Touchpad Hildebrando + OS 3.9.0.450 (Commentaires: 1)

Coque NumWorks édition limitée Mars 2022 à gagner

Nouveau messagede Admin » 02 Mar 2022, 21:49

13036Depuis la rentrée 2020, NumWorks te sort chaque fois une coque collector en édition limitée pour ta calculatrice. Si tu es chanceux(se) et a su te montrer assidu(e), alors tu devrais avoir pu te constituer une formidable collection : :D
1323013229 14802 135731480014799 14801

Voici pour ce mois de Mars 2022 la toute dernière édition limitée de la coque NumWorks à ajouter à ta collection, dédiée cette fois-ci à l'exploration de la planète Mars.

Tu peux dès maintenant tenter de gagner la coque sur les différents comptes sociaux du constructeur :

Pour participer et peut-être gagner, c'est très simple. À partir des liens précédents, et d'ici le 31 mars au plus tard, il te suffit de :
  1. suivre, aimer ou t'abonner au compte du constructeur
  2. taguer ou identifier un ami ou une amie

N'hésite pas à participer sur les différents comptes sociaux, afin de maximiser tes chances. ;)
Lien vers le sujet sur le forum: Coque NumWorks édition limitée Mars 2022 à gagner (Commentaires: 2)

Prototype TI-Nspire CAS Touchpad DVT1 avec tests Hildebrando

Nouveau messagede critor » 03 Mar 2022, 14:07

Le logiciel de mathématiques intégré TI-Nspire est d'une immense complexité, faisant exister et interagir entre elles nombre d'applications interconnectées (tableur, géométrie dynamique, acquisition de données, ...). Un changement local à une application peut ainsi avoir des conséquences hors de l'application en question, et il est difficile de toujours tout anticiper.

C'est pour cela que Texas Instruments fait régulièrement appel à des développeurs et testeurs QA (Quality Assurance) externes, notamment de chez Hildebrando, une société au Mexique.

Nous te présentions un premier prototype passé par chez Hildebrando dans une actualité précédente, mais hélas son système de fichiers avait été nettoyé et était donc vide de toute trace de tests.



Pour la rentrée 2010 sortaient les TI-Nspire Touchpad, premières éditions avec pavé tactile des TI-Nspire.

Les prototypes conçus par Texas Instruments avant la commercialisation d'un nouveau produit suivent différentes phases successives :
  1. PROTO : prototype (concept initial)
  2. EVT : engineering validation tests (concernent plutôt le développement matériel)
  3. DVT : developement validation tests (concernent plutôt le développement logiciel)
  4. PVT : production validation tests (derniers tests avant le lancement de la production de masse)
  5. MP : production de masse




13109Aujourd'hui, Frédéric Desautels alias mr womp womp nous a déniché un nouveau prototype TI-Nspire CAS Touchpad passé entre les mains d'Hildebrando.

Il s'agit bien d'un prototype, puisque nous notons au dos plusieurs mentions de la phase DVT (Developement Validation Tests):
  • dans le cadre à la place du numéro de série, une mention NOT FOR SALE DVT1-0909 002
  • une étiquette à code barre résumant justement la chose en Espagnol avec un DVT1-0909 002, adoptant justement le même format que celle du prototype Hildebrando déjà présenté
Il s'agit donc d'un prototype DVT1 de numéro de série 002 assemblé en septembre 2009 dans l'usine de code P (usine d'Inventec à Pudong en Chine).

13113Sur un prototype de phase DVT nous ne nous attendons à rien de bien surprenant sur le matériel, mais Frédéric l'a quand même démonté pour nous. Nous avons :
  • une carte mère N1_MB_NKB_4420, malheureusement avec l'emplacement J04 du connecteur JTAG laissé vide contrairement à d'autres prototypes de la phase précédente EVT
  • une carte écran N1/N3_LB_PCR2_FPC_2410

13116Passons plutôt au logiciel qui peut habituellement réserver davantage de surprises sur un prototype de phase DVT.

Démarrer la calculatrice avec les touches
esc
menu
-
enfoncées nous permet d'accéder au logiciel de diagnostics. Nous notons une version 2.00.DEVBUILD compilée le 19 août 2009 inconnue jusqu'à ce jour, alors que les modèles de production sont dotés de la version 2.00.1183 compilée le 19 février 2010, un gros écart dans le temps.

1311213111Une fois la calculatrice redémarrée normalement rien de spécial avec les Boot1 et Boot2, mêmes versions respectives 1.1.8916 et 3.0.1.131 que sur les modèles de production.

Par contre le système d'exploitation est pour sa part intéressant. Il s'agit d'une version 2.0.0.900 jusqu'ici inconnue.

Mais nous en arrivons au véritable trésor que renferme ce prototype, les système de fichiers contient des fichiers de tests d'Hildebrando.

On peut noter entre autres :
  • plusieurs gros fichiers nommés en "My_seat_leon …", et contenant une vidéo de publicité automobile illustrée ci-contre
  • un dossier nommé "120 Files" et contenant justement exactement 120 petits fichiers, obtenus par copier-coller successifs d'un même fichier initial
  • un fichier nommé avec pas moins de 188 caractères
  • des documents TI-Nspire complexes (beaucoup d'onglets/applications)
  • ...

Visiblement Hildebrando teste le logiciel TI-Nspire dans des conditions extrêmes, soit pour vérifier que son comportement reste conforme, soit pour explorer et signaler des failles éventuelles, soit les deux.

Une véritable mine d'informations qui pourrait être bien utile à l'équipe Ndless si elle voulait bien reprendre du service, que nous mettons à ta disposition ci-dessous.



Téléchargements :
002 Files.rar
(7.24 Mio) Téléchargé 378 fois
Lien vers le sujet sur le forum: Prototype TI-Nspire CAS Touchpad DVT1 avec tests Hildebrando (Commentaires: 0)

Mise à jour BBC micro:bit v2.3 pour TI-83 Premium CE

Nouveau messagede critor » 07 Mar 2022, 11:32

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 française s'est vu rajouter la gestion du nanoordinateur BBC micro:bit programmable en Python dont tu étais peut-être déjà équipé·e ! :bj:

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).
12277Les cartes micro:bit utilisent un connecteur micro-USB et ta calculatrice un mini-USB.

Pour relier les deux une solution est d'adjoindre un adaptateur mini-USB.

1296512964Pour moins d'encombrement, tu as aussi la solution d'utiliser un câble direct, au choix :
  • USB micro-B mâle ↔ USB mini-A mâle
  • USB micro-B mâle ↔ USB mini-B OTG mâle

1296212961La carte micro:bit dans ses versions 1 est programmable en Python et présentait initialement les caractéristiques et capacités 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 permettant un heap (tas) Python de 10,048 Ko
  • 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

134501296113451Depuis début 2021 est disponible la nouvelle carte micro:bit v2.

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, permettant un heap (tas) Python de 64,512 Ko ! :bj:

Elle apporte sur cette même face plusieurs nouveautés ou changements :
  • 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
1344912962D'autres nouveautés ou changements sont également présents sur l'autre face :
  • 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

13453Expliquons brièvement la composition de la solution de connectivité BBC micro:bit de Texas Instruments, ainsi que son fonctionnement.

Le solution se compose d'une part d'un fichier TI-Runtime unique à copier sur la carte micro:bit v1 ou v2 et qui lui permet d'être pilotée par la calculatrice. La bonne installation du fichier est aisément vérifiable, puisque faisant afficher à la carte le logo Texas Instruments.

La solution a un principe de fonctionnement très simple, mais non moins ingénieux pour autant. La carte micro:bit étant justement programmable en Python, une fois le TI-Runtime installé elle se met alors à écouter les commandes Python envoyées depuis la calculatrice et à les exécuter.

Depuis ta calculatrice, tu peux envoyer n'importe quelle commande Python à ta carte micro:bit et profiter pleinement de ses capacités grâce à la fonction ti_hub.send(), à condition d'encadrer la commande des bons caractères de contrôle. Voici une fonction mb_run() en ce sens :

14956
Code: Tout sélectionner
from ti_hub import *

def mb_run(code):
  send('\x05') # enter paste mode (Ctrl-E)
  send(code)
  send('\x04') # exit paste mode (Ctrl-D)

Pour afficher par exemple Pac-Man, il te suffit d'appeler mb_run("display.show(Image.PACMAN)"), conformément à la documentation du Python micro:bit.

Toutefois en pratique dans le contexte scolaire, cette façon de faire n'était pas idéale. Elle rajoutait un niveau d'imbrication : tu devais produire du code Python qui lui-même devait construire le code Python à envoyer et exécuter par la carte micro:bit, une marche sans doute un peu haute pour bien des élèves débutants.


Et bien justement, Texas Instruments est loin de s'être arrêté là. Sa solution de connectivité comporte également des bibliothèques Python additionnelles à charger sur ta calculatrice, au choix en Français ou Anglais, et rajoutant alors des menus permettant de faire appel plus simplement aux éléments correspondants sur la carte micro:bit. 11 bibliothèques étaient disponibles dans la dernière version, facilitant ainsi l'utilisation de certaines bibliothèques du Python micro:bit :
  • microbit (générale, permet d'accéder aux menus des autres bibliothèques)
  • mb_audiomicrobit.audio (effets sonores - accessible via le menu Audio)
  • mb_butnsmicrobit.buttons (boutons A, B et tactile intégrés - accessible via le menu Buttons ou Boutons)
  • mb_dispmicrobit.display (afficheur à 5×5=25 LEDs rouges intégré - accessible via le menu Display ou Affichage)
  • mb_grove (capteurs et actionneurs Grove à rajouter - accessible via le menu Grove Devices)
  • mb_log (enregistrement de données - accessible via le menu Data logging ou Enregistrement de données)
  • mb_mic microbit.microphone (micro intégré - accessible via le menu Microphone)
  • mb_musicmicrobit.music (haut-parleur à rajouter sur micro:bit v1 ou intégré sur micro:bit v2 - accessible via le menu Music ou Musique)
  • mb_neopxmicrobit.neopixel (rubans de LEDs programmables à rajouter - accessible via le menu NeoPixel)
  • mb_notes (notes de musique - accessible via le menu Music ou Musique)
  • mb_pins (contacts programmables intégrés - accessible via le menu Input/output pins ou Broches entrée/sortie)
  • mb_radiomicrobit.radio (communication radio intégrée - accessible via le menu Radio)
  • mb_sensr (capteurs intégrés : boussole, accéléromètre, température - accessible via le menu Sensors and gestures ou Capteurs et gestes)

Texas Instruments nous sort aujourd'hui une nouvelle mise à jour de l'édition française de cette solution, découvrons-la ensemble.







1) Eléments et versions

Go to top

Le pack d'aujourd'hui nous apporte une double mise à jour :
  • D'une part, le TI-Runtime pour les micro:bit v2 passe de la version 2.1.0 à la version 2.4.0, comme on constate en interrogeant la carte micro:bit avec microbit.runtime_version() après mise à jour
  • D'autre part les bibliothèques Python et menus en Français associés pour les micro:bit v2 passent de la version 2.1.0 à la version 2.3.0
Nous allons commencer par te présenter les changements exposés par les différentes bibliothèques, puis nous pencherons sur cette mystérieuse mise à jour du TI-Runtime, majeure si on en croit l'écart de numérotation.




2) Changements microbit

Go to top

Comme déjà expliqué, microbit est la bibliothèque principale apportant un menu permettant d'accéder aux autres bibliothèques liées à certaines fonctionnalités de la carte micro:bit.
Dans la dernière version, l'entrée liée à la bibliothèque mb_grove pour les capteurs Grove n'avait pas été traduite et était restée intitulée en Anglais : Grove Devices.

C'est maintenant corrigé, l'entrée à été renommée en Capteurs Grove.




B3) Changements mb_grove

Go to top

Justement, commençons donc par le choix Capteurs Grove.

Il permet toujours d'importer les bibliothèques mb_grove et mb_pins, et d'activer leurs menus respectifs.

Nous nous concentrerons ici sur la seule bibliothèque mb_grove. Elle permet pour sa part de contrôler des capteurs et actionneurs Grove connectés à ta carte micro:bit.

Et justement autre petit changement d'intitulé, le menu associé à mb_grove une fois activé est renommé de grove en capteurs grove.

Dans l'onglet Entrée nous constatons 2 changements.

D'une part, l'entrée .read_sht() disparaît. Elle permettait d'interroger un capteur Grove de température et humidité et appelait en fait la méthode grove.read_sht35(), qui est supprimée dans cette nouvelle version.
En effet les puces des capteurs compatibles SHT35 et DHT11 ont été placées en fin de vie par leurs fabricants et ne sont plus recommandées pour de nouveaux projets.

À la place nous obtenons une nouvelle méthode grove.read_dht20 pour interroger le capteur DHT20 les remplaçant.

Nous avons également un ajout, la méthode grove.read_sgp30() permettant d'interroger un capteur SGP30.

Le capteur SGP30 effectue deux types de mesures de gaz différentes : le TVOC / COVT (Composés Organiques Volatils comme les hydrocarbures) et le CO2 (dioxyde de carbone équivalent). Plein d'applications pratiques pour des projets dans le contexte actuel.
Voici un exemple d'utilisation de cette bibliothèque :
Code: Tout sélectionner
from microbit import *
from mb_grove import *
from mb_pins import *

disp_clr()

while not escape():
  T = grove.read_temperature(pin0)
  print("Temperature = %.1f\u00b0C"%round(T,1))
  p = 50
  print("Pump On at %.1f"%round(p,1)+"% power")
  grove.power(pin8,p)
  sleep(2000)
  p = 0
  print("Pump On at %.1f"%round(p,1)+" % power")
  grove.power(pin8,p)
  disp_clr()
grove.power(pin8,0)




B4) Changements mb_log

Go to top

Le choix Enregistrement de données permet d'importer la bibliothèque mb_log et d'activer son menu.

Cette bibliothèque permet de représenter en direct sous la forme d'un diagramme en ligne brisée, les valeurs retournées par le capteur micro:bit de ton choix, ou plus généralement par n'importe quel appel Python.

Cette bibliothèque a bien été modifiée dans le cadre de cette mise à jour, mais nous ignorons la finalité des changements apportés.

Aucun changement au menu, par contre si l'on fouille le contenu de la bibliothèque on note la disparition de la méthode Data_Log.set_rate().
Voici un exemple interrogeant et traçant en boucle la composante X de l'accéléromètre :
Code: Tout sélectionner
from microbit import *
from mb_log import *
from mb_sensr import *

data_log.set_duration(10)
data_log.set_sensor('accelerometer.get_x()')
data_log.set_range(-1200,1200)
data_log.start()




5) Changements mb_neopx

Go to top

Le choix NeoPixel et Couleur permet d'importer la bibliothèque mb_neopx et d'activer son menu.

Cette bibliothèque permet de piloter des rubans de diodes adressables à connecter à ta carte micro:bit.

Dans l'édition anglaise, les noms de broches (pin0, pin1, ...) étaient accessibles pour saisie rapide sous l'onglet dédié pins.

Malheureusement dans l'édition française précédente avec le renommage de l'onglet setup en Configuration, il n'y avait plus suffisamment de place en largeur à l'écran pour ce 4ème onglet. :'(

Problème corrigé avec cette mise à jour.

Plutôt qu'un 4ème onglet, les noms de broches nous sont ici rajoutés sous l'onglet Configuration, et en prime nous en avons beaucoup plus ! :bj:


Peut-être également une correction ou contournement de bug, car on se rend compte que l'entrée np=NeoPixel(pin,pixels) de ce même onglet Configuration ne saisit plus np=NeoPixel('pin0',16) mais np=NeoPixel('pin1',20). Texas Insturments pousse donc soudainement à l'usage d'une broche différente, ce n'est pas anodin.

Voici un exemple d'utilisation de cette bibliothèque :
Code: Tout sélectionner
from microbit import *
from mb_neopx import *
from random import *

np = NeoPixel(pin1, 20)

while not escape():
  for id in range(len(np)):
    red = randint(0,255)
    green =randint(0,255)
    blue =randint(0,255)
    np[id]=(red, green, blue)
    np.show()
    sleep(100)
np.clear()




6) Changements mb_sensr

Go to top

Le choix Capteurs et gestes permet d'importer la bibliothèque mb_sensr et d'activer son menu.

Cette bibliothèque permet d'interroger les capteurs intégrés à ta carte micro:bit, dont notamment l'accéléromètre et la boussole.

Petit problème dans la version précédente, l'intitulé du menu associé à mb_sensr une fois activé souffrait d'une erreur de typographie : capteurs et estes.

L'intitulé est corrigé avec cette dernière mise à jour : capteurs et gestes.


Autre léger problème, la traduction française n'était pas complète. Pour les fonctions attendant un nom de geste en paramètre, le menu suggérait en Anglais "gesture".

C'est ici aussi corrigé avec cette dernière mise à jour, le menu indique maintenant correctement "geste"




7) Changements TI-Runtime

Go to top

Et passons donc enfin au TI-Runtime pour BBC micro:bit v2. Avec un saut de version de 2.1.0 à 2.4.0, il pourrait bien apporter des changements majeurs. Mais surtout, avec une version 2.4.0 supérieure à la 2.3.0 des bibliothèque Python pour ta calculatrice, il pourrait bien inclure des fonctionnalités futures non encore présentes aux menus... ;)

Ici pas de menu à fouiller, mais on peut procéder autrement. On peut en effet ouvrir directement le fichier sur https://python.microbit.org/v/2 pour pouvoir lire son code source :
Code: Tout sélectionner
from microbit import *
from machine import freq, reset, time_pulse_us
from time import ticks_us
from utime import sleep_us
#from time import sleep_ms, sleep

#check = Image("00000:""00009:""00090:""90900:""09000")

ti = Image("05500:""05595:""55555:""05550:""00500")

tello="TELLO-9EF498"
# Grove
#TX_pin = pin15
#RX_pin = pin1
# breadboard
#TX_pin = pin1
#RX_pin = pin2
# bitmaker
TX_pin = 'pin2'
RX_pin = 'pin1'
is_connected = False

def tello_read(cmd,TX=TX_pin,RX=RX_pin):
  try:
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    uart.read()
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep (100)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp+"\r\n")
    sleep(100)
    timeout = 1
    timer = 0
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status = 'Error: timeout'
            break
    msg = str(uart.read())
    start=msg.find(':')
    end = msg.find('\\r\\n',start)
    msg = msg[start+1:end]
    if msg.find('Non')!=-1:
        msg = '0'
    uart.init(baudrate=115200)
    return(msg)
  except:
    uart.init(baudrate=115200)
    return("Error: communication")

def tello_control(cmd,TX=TX_pin,RX=RX_pin):
  try:
    timeout = 10
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    uart.read()
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep(100)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp)
    timer = 0
    sleep(100)
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status ='Error: timeout'
            break
    msg = str(uart.read())
    if msg.find('SEND OK')==-1:
      uart.init(baudrate=115200)
      return (False)
    sleep(100)
    uart.read()
    timer = 0
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status = 'Error: timeout'
            break
    sleep(100)
    msg = str(uart.read())
    start=msg.find('\\r\\n+IPD')

    if msg.find('ok',start)!=-1:
        status = "ok"
    uart.init(baudrate=115200)
    return(status)
  except:
    uart.init(baudrate=115200)
    return("Error: communication link")

def tello_connect(ssid,pswd="",TX=TX_pin,RX=RX_pin):
  display.show(ti)
  try:
    timeout = 30
    global TX_pin
    global RX_pin
    TX_pin=locals()[TX]
    RX_pin=locals()[RX]
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    uart.write('AT+CWQAP\r\n')
    uart.write('AT+RST\r\n')
    #uart.write('AT+RFPOWER=0\r\n')
    uart.write('AT+CWMODE=3\r\n')
    uart.read()
    sleep(100)
    the_ap ='AT+CWJAP=' + '"' + ssid +'"' + "," + '"' + pswd +'"\r\n'
    uart.write(the_ap + '\r\n')
    is_connected = False
    timer = 0
    sleep(100)
    while is_connected == False:
      timer = 0
      while not(uart.any()):
        sleep(1)
        timer += .002
        if timer > timeout:
            tello_AT('AT+RST')
            reset()
      msg = str(uart.read())
      if msg.find("WIFI GOT IP") !=-1:
        is_connected = True
    uart.write('AT+CIFSR\r\n')
    sleep(100)
    timer = 0
    while not(uart.any()):
      sleep(1)
      timer >.002
      if timer == timeout:
          tello_AT('AT+RST')
          reset()
    msg = str(uart.read())
    if msg.find("192.168.10") !=-1:
        status = 'got IP'
    uart.write('AT+CIPMUX=1\r\n')
    sleep(100)
    msg = uart.read()
    uart.write('AT+CIPSTART=0,"UDP","192.168.10.1",8889,8889,2\r\n')
    sleep(100)
    msg = uart.read()
    sleep(100)
    cmd='command'
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep(200)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp)
    msg = str(uart.read())
    if msg.find('SEND OK')==-1 and status =='got IP':
        status = "Tello Connected"
        display.show(Image.HAPPY)
    else:
        status = "Tello not responding"
        display.show(Image.SAD)
        uart.init(baudrate=115200)
        return (False)
    uart.init(baudrate=115200)
    #print(status)
    return(status)
  except:
    uart.init(baudrate=115200)
    display.show(Image.SAD)
    return("Error: communication link")
   
def ismb():
  return(True)
 
def ranger(pin=pin0,time = True):
  timeout_us=30000     
  pin.write_digital(0)
  sleep_us(2)
  pin.write_digital(1)
  sleep_us(10)
  pin.write_digital(0)
  pin.read_digital()
  duration = time_pulse_us(pin, 1, timeout_us)/1e6 # t_echo in seconds 
  distance = 343 * duration/2 * 100
  if time:
    return duration
  else:
    return distance

# this function only works on V2
def time_pulses(pin,pulses):
    try:
        pin.read_digital()
        # wait for one trigger pulse
        while not pin.read_digital():
            pass
        while pin.read_digital():
            pass
        while not pin.read_digital():
            pass
        # begin timing pulses
        t0=ticks_us()
        for n in range(pulses-1):
            while (not pin.read_digital()):
                pass
            while pin.read_digital():
                pass
        tf=ticks_us()
        pulses_time = (tf-t0)/1000000
        return(str(pulses_time))
    except:
        pass

def time_H_to_L(pin):
        pin.read_digital()
        while (pin.read_digital()):
            pass
        t0=ticks_us()
        while not (pin.read_digital()):
            pass
        tf=ticks_us()
        pulse_time = (tf-t0)/1000000
        return(str(pulse_time))

def time_L_to_H(pin):
        pin.read_digital()
        while not (pin0.read_digital()):
            pass
        t0=ticks_us()
        while (pin.read_digital()):
            pass
        tf=ticks_us()
        pulse_time = (tf-t0)/1000000
        return(str(pulse_time))


IDRegister  = 0xD0          # ID holds 0x60, always readable
RESET       = 0xE0          # Reset only executed by writing 0xB6
CTRL_HUM    = 0xF2          # Selects humidity measurement and oversampling
STATUS      = 0xF3          # Indicates data availability
CTRL_MEAS   = 0xF4          # Temperature, pressure oversampling, selects normal, forced or sleep mode
CONFIG      = 0xF5          # Controls normal mode standby time, IRR filter, SPI mode
t_fine      = 0

ConfigurationData           = bytearray(6)

CalData00_25                = bytearray(25)
CalData00_25BaseAddress     = bytearray(1)
CalData00_25BaseAddress[0]  = 0x88

CalData26_41                = bytearray(7)
CalData26_41BaseAddress     = bytearray(1)
CalData26_41BaseAddress[0]  = 0xE1

RawSensorData               = bytearray(8)
RawSensorDataBaseAddress    = bytearray(1)
RawSensorDataBaseAddress[0] = 0xF7


def BuildS16(msb, lsb):
    sval = ((msb << 8) | lsb)
    if sval > 32767: 
        sval -= 65536
    return sval
       
def BuildU16(msb, lsb):
    return ((msb << 8) |lsb)


def BuildS8(b):
    if b > 127:
        return (b-256)
    else:
        return b
       
def CalculateTemperature(TRAW):   
    global t_fine
    Traw = float(TRAW)
    v1 = (Traw/ 16384.0 - float(dig_T1) / 1024.0) * float(dig_T2)
    v2 = ((Traw / 131072.0 - float(dig_T1) / 8192.0) * (
    Traw / 131072.0 - float(dig_T1) / 8192.0)) * float(dig_T3)
    t_fine = int(v1 + v2)
    T = (v1 + v2) / 5120.0
    return T

def CalculatePressure(PRAW):
    Praw = float(PRAW)
    v1 = float(t_fine) / 2.0 - 64000.0
    v2 = v1 * v1 * float(dig_P6) / 32768.0
    v2 = v2 + v1 * float(dig_P5) * 2.0
    v2 = v2 / 4.0 + float(dig_P4) * 65536.0
    v1 = (float(dig_P3) * v1 * v1 / 524288.0 + float(dig_P2) * v1) / 524288.0
    v1 = (1.0 + v1 / 32768.0) * float(dig_P1)
    if v1 == 0:
        return 0
    p  = 1048576.0 - Praw
    p  = ((p - v2 / 4096.0) * 6250.0) / v1
    v1 = float(dig_P9) * p * p / 2147483648.0
    v2 = p * float(dig_P8) / 32768.0
    p  = p + (v1 + v2 + float(dig_P7)) / 16.0
    return p
   
def CalculateHumidity(HRAW):
    global t_fine
    Hraw = float(HRAW)
    h = float(t_fine) - 76800.0
    h = (Hraw - (float(dig_H4) * 64.0 + float(dig_H5) / 16384.0 * h)) * (
        float(dig_H2) / 65536.0 * (1.0 + float(dig_H6) / 67108864.0 * h * (
        1.0 + float(dig_H3) / 67108864.0 * h)))
    h = h * (1.0 - float(dig_H1) * h / 524288.0)
    if h > 100:
        h = 100
    elif h < 0:
        h = 0
    return h
try:
  IDAddress     = bytearray(1)
  IDAddress[0]  = IDRegister
  i2c.write(0x76, IDAddress, repeat = False)
  id = i2c.read(0x76, 1, repeat = False)
  i2c.write(0x76, CalData00_25BaseAddress, repeat = False)    # Send base address
  CalData00_25 = i2c.read(0x76, 25, repeat = False)
  i2c.write(0x76, CalData26_41BaseAddress, repeat = False)    # Send base address
  CalData26_41 = i2c.read(0x76, 7, repeat = False)
  dig_T1 = BuildU16(CalData00_25[1], CalData00_25[0])     # unsigned short
  dig_T2 = BuildS16(CalData00_25[3], CalData00_25[2])     # signed short
  dig_T3 = BuildS16(CalData00_25[5], CalData00_25[4])     # signed short
  dig_P1 = BuildU16(CalData00_25[7], CalData00_25[6])     # unsigned short
  dig_P2 = BuildS16(CalData00_25[9], CalData00_25[8])     # signed short
  dig_P3 = BuildS16(CalData00_25[11], CalData00_25[10])   # signed short
  dig_P4 = BuildS16(CalData00_25[13], CalData00_25[12])   # signed short
  dig_P5 = BuildS16(CalData00_25[15], CalData00_25[14])   # signed short
  dig_P6 = BuildS16(CalData00_25[17], CalData00_25[16])   # signed short
  dig_P7 = BuildS16(CalData00_25[19], CalData00_25[18])   # signed short
  dig_P8 = BuildS16(CalData00_25[21], CalData00_25[20])   # signed short
  dig_P9 = BuildS16(CalData00_25[23], CalData00_25[22])   # signed short
  dig_H1 = CalData00_25[24]                               # unsigned char
  dig_H2 = BuildS16(CalData26_41[1],CalData26_41[0])
  dig_H3 = CalData26_41[2]
  dig_H4 = (BuildS8(CalData26_41[3]) << 4) | (CalData26_41[4] & 0x0F)         # signed short presented in 12 bits
  dig_H5 = (BuildS8(CalData26_41[5]) << 4) | ((CalData26_41[4] >> 4) & 0x0F)  # signed short presented in 12 bits
  dig_H6 = BuildS8(CalData26_41[6])                       # signed char
  ConfigurationData[0] = CTRL_HUM         # Register address
  ConfigurationData[1] = 0b00000101       # Hunidity sampling on: x16
  ConfigurationData[2] = CTRL_MEAS        # Register address
  ConfigurationData[3] = 0b10110111       # Temperature and pressure x16, normal mode
  ConfigurationData[4] = CONFIG           # Register address
  ConfigurationData[5] = 0b01000000       # Normal mode standby 125ms, IRR off, SPI irrelevant
  i2c.write(0x76,ConfigurationData, repeat=False)
except:
  pass

# the Grove bme_280 has the SDO pulled low and the address is 0x76. Pulling high changes to 0x77. Adafruit is 0x77
def read_bme280():
    i2c.write(0x76, RawSensorDataBaseAddress, repeat = False)
    RawSensorData = i2c.read(0x76, 8, repeat = False)
    TRAW = ((RawSensorData[3] << 16) | (RawSensorData[4] << 8) | RawSensorData[5]) >> 4
    PRAW = ((RawSensorData[0] << 16) | (RawSensorData[1] << 8) | RawSensorData[2]) >> 4
    HRAW = (RawSensorData[6] << 8)   | RawSensorData[7]
    return CalculateTemperature(TRAW),CalculatePressure(PRAW),CalculateHumidity(HRAW)
   



def get_version():
    print ("TI-Runtime Version 2.1.0")

display.show(ti)

Code: Tout sélectionner
from microbit import *
from machine import freq, reset, time_pulse_us
from time import ticks_us, sleep_ms
from utime import sleep_us

# ------------------------------------------- Tello Drone -----------------------------------------------------------

#tello="TELLO-9EF498"
TX_pin = 'pin1' # yellow grove wire
RX_pin = 'pin15' # white grove wire
is_connected = False

def tello_read(cmd,TX=TX_pin,RX=RX_pin):
  try:
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    uart.read()
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep (100)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp+"\r\n")
    sleep(100)
    timeout = 1
    timer = 0
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status = 'Error: timeout'
            break
    msg = str(uart.read())
    start=msg.find(':')
    end = msg.find('\\r\\n',start)
    msg = msg[start+1:end]
    if msg.find('Non')!=-1:
        msg = '0'
    uart.init(baudrate=115200)
    return(msg)
  except:
    uart.init(baudrate=115200)
    return(False)

def tello_control(cmd,TX=TX_pin,RX=RX_pin):
  try:
    timeout = 10
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    uart.read()
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep(100)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp)
    timer = 0
    sleep(100)
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status ='Error: timeout'
            break
    msg = str(uart.read())
    if msg.find('SEND OK')==-1:
      uart.init(baudrate=115200)
      return (False)
    sleep(100)
    uart.read()
    timer = 0
    while not(uart.any()):
        sleep(1)
        timer += .001
        if timer > timeout:
            status = 'Error: timeout'
            break
    sleep(100)
    msg = str(uart.read())
    start=msg.find('\\r\\n+IPD')

    if msg.find('ok',start)!=-1:
        status = "ok"
    uart.init(baudrate=115200)
    #print("ok")
    #sleep(100)
    #print("ok")
    #sleep(100)
    return(status)
  except:
    uart.init(baudrate=115200)
    return(False)

def tello_connect(ssid,pswd="",TX=TX_pin,RX=RX_pin):
  #display.show(ti)
  try:
    timeout = 30
    global TX_pin
    global RX_pin
    TX_pin=locals()[TX]
    RX_pin=locals()[RX]
    uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
    #uart.write('AT+CWQAP\r\n')
    uart.write('AT+RST\r\n')
    #uart.write('AT+RESTORE\r\n')
    uart.write('AT+RFPOWER=30\r\n')
    uart.write('AT+CWMODE=3\r\n')
    uart.read()
    #sleep(100)
    the_ap ='AT+CWJAP=' + '"' + ssid +'"' + "," + '"' + pswd +'"\r\n'
    uart.write(the_ap + '\r\n')
    is_connected = False
    timer = 0
    sleep(100)
    while is_connected == False:
      timer = 0
      while not(uart.any()):
        sleep(1)
        timer += .002
        if timer > timeout:
            tello_AT('AT+RST\r\n')
            reset()
      msg = str(uart.read())
      if msg.find("WIFI GOT IP") !=-1:
        is_connected = True
    uart.write('AT+CIFSR\r\n')
    sleep(100)
    timer = 0
    while not(uart.any()):
      sleep(1)
      timer >.002
      if timer == timeout:
          tello_AT('AT+RST')
          reset()
    msg = str(uart.read())
    if msg.find("192.168.10") !=-1:
        status = 'got IP'
    uart.write('AT+CIPMUX=1\r\n')
    sleep(100)
    msg = uart.read()
    uart.write('AT+CIPSTART=0,"UDP","192.168.10.1",8889,8889,2\r\n')
    sleep(100)
    msg = uart.read()
    sleep(100)
    cmd='command'
    udp_len=len(cmd)
    uart.write('AT+CIPSEND=0,' + str(udp_len) + ',"192.168.10.1",8889\r\n')
    sleep(200)
    uart.read()
    udp = bytes(cmd, 'utf-8')
    uart.write(udp)
    msg = str(uart.read())
    if msg.find('SEND OK')==-1 and status =='got IP':
        status = "Tello Connected"
        display.show(Image.HAPPY)
    else:
        status = "Tello not responding"
        display.show(Image.SAD)
        uart.init(baudrate=115200)
        return (False)
    uart.init(baudrate=115200)
    #print(status)
    return(status)
  except:
    uart.init(baudrate=115200)
    display.show(Image.SAD)
    return(False)

def discover_tello(TX_pin,RX_pin):
  count = 0
  uart.init(baudrate=115200,tx=TX_pin,rx=RX_pin)
  uart.write('AT+CWLAPOPT=1,2\r\n')
  while count < 15:
    uart.write('AT+CWLAP\r\n')
    while not(uart.any()):
      sleep(10)
    uart.read()     
    sleep(1000)
    msg = str(uart.read())
    start=msg.find('TELLO')
    if start != -1:
      end = msg.find('"',start)
      msg = msg[start:end]
      uart.init(baudrate=115200)
      return(msg)
    else:
      count += 1
  uart.init(baudrate=115200)
  return(False)
 
def write_tello_setup(ssid,tx,rx,number):
  try:
    cfg=open('tello.cfg','w')
    cfg.write(ssid + "@" + tx + "$" + rx + "%" +  number)
    cfg.close()
    return(True)
  except:
    print (False)

def read_tello_setup():
  cfg=open('tello.cfg','r')
  msg = cfg.read()
  d1 = msg.find('@')
  d2 = msg.find('$')
  d3 = msg.find('%')
  ssid = msg[:d1]
  tx = msg[d1+1:d2]
  rx = msg[d2+1:d3]
  number = msg[d3+1:]
  display.show(number)
  return ssid, tx,rx, number
 
# ------------------------------------------- ultrasonic ranger -----------------------------------------------------------

def ranger(pin=pin0,time = True):
  timeout_us=30000     
  pin.write_digital(0)
  sleep_us(2)
  pin.write_digital(1)
  sleep_us(10)
  pin.write_digital(0)
  pin.read_digital()
  duration = time_pulse_us(pin, 1, timeout_us)/1e6 # t_echo in seconds 
  distance = 343 * duration/2 * 100
  if time:
    return duration
  else:
    return distance

# ------------------------------------------- pulse timer ----------------------------------------------------------------
def time_pulses(pin,pulses):
    try:
        pin.read_digital()
        # wait for one trigger pulse
        while not pin.read_digital():
            pass
        while pin.read_digital():
            pass
        while not pin.read_digital():
            pass
        # begin timing pulses
        t0=ticks_us()
        for n in range(pulses-1):
            while (not pin.read_digital()):
                pass
            while pin.read_digital():
                pass
        tf=ticks_us()
        pulses_time = (tf-t0)/1000000
        return(str(pulses_time))
    except:
        pass

def time_H_to_L(pin):
        pin.read_digital()
        while (pin.read_digital()):
            pass
        t0=ticks_us()
        while not (pin.read_digital()):
            pass
        tf=ticks_us()
        pulse_time = (tf-t0)/1000000
        return(str(pulse_time))

def time_L_to_H(pin):
        pin.read_digital()
        while not (pin0.read_digital()):
            pass
        t0=ticks_us()
        while (pin.read_digital()):
            pass
        tf=ticks_us()
        pulse_time = (tf-t0)/1000000
        return(str(pulse_time))
       

# -------------------------------------------BME280 Barometric Pressure -----------------------------------------------------------
class BME280():
  def __init__(self):
    self.ready = False
    self.IDRegister  = 0xD0         
    self.CTRL_HUM    = 0xF2                 
    self.CTRL_MEAS   = 0xF4         
    self.CONFIG      = 0xF5       
    self.t_fine      = 0
    self.dig_T1      = 0
    self.dig_T2      = 0
    self.dig_T3      = 0
    self.dig_P1      = 0   
    self.dig_P2      = 0   
    self.dig_P3      = 0   
    self.dig_P4      = 0   
    self.dig_P5      = 0 
    self.dig_P6      = 0
    self.dig_P7      = 0 
    self.dig_P8      = 0
    self.dig_P9      = 0
    self.dig_H1      = 0                         
    self.dig_H2      = 0
    self.dig_H3      = 0
    self.dig_H4      = 0
    self.dig_H5      = 0
    self.dig_H6      = 0
    self.TRAW      = 0
    self.PRAW      = 0
    self.HRAW      = 0
    self.ConfigurationData           = bytearray(6)
    self.CalData00_25                = bytearray(25)
    self.CalData00_25BaseAddress     = bytearray(1)
    self.CalData00_25BaseAddress[0]  = 0x88
    self.CalData26_41                = bytearray(7)
    self.CalData26_41BaseAddress     = bytearray(1)
    self.CalData26_41BaseAddress[0]  = 0xE1
    self.RawSensorData               = bytearray(8)
    self.RawSensorDataBaseAddress    = bytearray(1)
    self.RawSensorDataBaseAddress[0] = 0xF7
   
  def init(self):
    try:
      IDAddress     = bytearray(1)
      IDAddress[0]  = self.IDRegister
      i2c.write(0x76, IDAddress, repeat = False)
      id = i2c.read(0x76, 1, repeat = False)
      i2c.write(0x76, self.CalData00_25BaseAddress, repeat = False)   
      self.CalData00_25 = i2c.read(0x76, 25, repeat = False)
      i2c.write(0x76, self.CalData26_41BaseAddress, repeat = False)   
      self.CalData26_41 = i2c.read(0x76, 7, repeat = False)
      self.dig_T1 = self.BuildU16(self.CalData00_25[1], self.CalData00_25[0])     
      self.dig_T2 = self.BuildS16(self.CalData00_25[3], self.CalData00_25[2])     
      self.dig_T3 = self.BuildS16(self.CalData00_25[5], self.CalData00_25[4])     
      self.dig_P1 = self.BuildU16(self.CalData00_25[7], self.CalData00_25[6])     
      self.dig_P2 = self.BuildS16(self.CalData00_25[9], self.CalData00_25[8])     
      self.dig_P3 = self.BuildS16(self.CalData00_25[11], self.CalData00_25[10])   
      self.dig_P4 = self.BuildS16(self.CalData00_25[13], self.CalData00_25[12])   
      self.dig_P5 = self.BuildS16(self.CalData00_25[15], self.CalData00_25[14])   
      self.dig_P6 = self.BuildS16(self.CalData00_25[17], self.CalData00_25[16])   
      self.dig_P7 = self.BuildS16(self.CalData00_25[19], self.CalData00_25[18])   
      self.dig_P8 = self.BuildS16(self.CalData00_25[21], self.CalData00_25[20])
      self.dig_P9 = self.BuildS16(self.CalData00_25[23], self.CalData00_25[22])
      self.dig_H1 = self.CalData00_25[24]                           
      self.dig_H2 = self.BuildS16(self.CalData26_41[1],self.CalData26_41[0])
      self.dig_H3 = self.CalData26_41[2]
      self.dig_H4 = (self.BuildS8(self.CalData26_41[3]) << 4) | (self.CalData26_41[4] & 0x0F)
      self.dig_H5 = (self.BuildS8(self.CalData26_41[5]) << 4) | ((self.CalData26_41[4] >> 4) & 0x0F)
      self.dig_H6 = self.BuildS8(self.CalData26_41[6])
      self.ConfigurationData[0] = self.CTRL_HUM       
      self.ConfigurationData[1] = 0b00000101     
      self.ConfigurationData[2] = self.CTRL_MEAS       
      self.ConfigurationData[3] = 0b10110111
      self.ConfigurationData[4] = self.CONFIG     
      self.ConfigurationData[5] = 0b01000000       
      i2c.write(0x76,self.ConfigurationData, repeat=False)
      sleep(100)
      self.ready = True
    except:
      pass

  def BuildS16(self,msb, lsb):
      sval = ((msb << 8) | lsb)
      if sval > 32767: 
          sval -= 65536
      return sval
         
  def BuildU16(self,msb, lsb):
      return ((msb << 8) |lsb)


  def BuildS8(self,b):
      if b > 127:
          return (b-256)
      else:
          return b
         
  def CalculateTemperature(self):   
      self.t_fine
      Traw = float(self.TRAW)
      v1 = (Traw/ 16384.0 - float(self.dig_T1) / 1024.0) * float(self.dig_T2)
      v2 = ((Traw / 131072.0 - float(self.dig_T1) / 8192.0) * (
      Traw / 131072.0 - float(self.dig_T1) / 8192.0)) * float(self.dig_T3)
      self.t_fine = int(v1 + v2)
      T = (v1 + v2) / 5120.0
      return T

  def CalculatePressure(self):
      Praw = float(self.PRAW)
      v1 = float(self.t_fine) / 2.0 - 64000.0
      v2 = v1 * v1 * float(self.dig_P6) / 32768.0
      v2 = v2 + v1 * float(self.dig_P5) * 2.0
      v2 = v2 / 4.0 + float(self.dig_P4) * 65536.0
      v1 = (float(self.dig_P3) * v1 * v1 / 524288.0 + float(self.dig_P2) * v1) / 524288.0
      v1 = (1.0 + v1 / 32768.0) * float(self.dig_P1)
      if v1 == 0:
          return 0
      p  = 1048576.0 - Praw
      p  = ((p - v2 / 4096.0) * 6250.0) / v1
      v1 = float(self.dig_P9) * p * p / 2147483648.0
      v2 = p * float(self.dig_P8) / 32768.0
      p  = p + (v1 + v2 + float(self.dig_P7)) / 16.0
      return p
     
  def CalculateHumidity(self):
      self.t_fine
      Hraw = float(self.HRAW)
      h = float(self.t_fine) - 76800.0
      h = (Hraw - (float(self.dig_H4) * 64.0 + float(self.dig_H5) / 16384.0 * h)) * (
          float(self.dig_H2) / 65536.0 * (1.0 + float(self.dig_H6) / 67108864.0 * h * (
          1.0 + float(self.dig_H3) / 67108864.0 * h)))
      h = h * (1.0 - float(self.dig_H1) * h / 524288.0)
      if h > 100:
          h = 100
      elif h < 0:
          h = 0
      return h

  def read(self):
    if self.ready:
      try:
        i2c.write(0x76, self.RawSensorDataBaseAddress, repeat = False)
        sleep(100)
        self.RawSensorData = i2c.read(0x76, 8, repeat = False)
        sleep(100)
        self.TRAW = ((self.RawSensorData[3] << 16) | (self.RawSensorData[4] << 8) | self.RawSensorData[5]) >> 4
        self.PRAW = ((self.RawSensorData[0] << 16) | (self.RawSensorData[1] << 8) | self.RawSensorData[2]) >> 4
        self.HRAW = (self.RawSensorData[6] << 8)   | self.RawSensorData[7]
        return self.CalculateTemperature(),self.CalculatePressure(),self.CalculateHumidity()
      except:
        pass
    else:
      self.init()
      if self.ready:
        return (self.read())
      else:
       return None
# -------------------------------------------DHT20 Temperature and Humidity -----------------------------------------------------------
       
class DHT20():
  def __init__(self):
    self.ready = False
   
  def init(self):
    try:
      i2c.write(0x38, bytes([0xa8,0x00,0x00]))
      sleep_ms(100)
      i2c.write(0x38, bytes([0xbe,0x08,0x00]))
      sleep(100)
      self.ready = True
    except:
      pass   
   
  def read(self):
    if self.ready:
      try:
        i2c.write(0x38, bytes([0xac,0x33,0x00]))
        sleep(100)
        raw = i2c.read(0x38, 7, True)
        sleep(100)
        data = []
        for i in raw[:]:
          data.append(i)
        temperature = 0
        temperature = (temperature | data[3]) << 8
        temperature = (temperature | data[4]) << 8
        temperature = temperature | data[5]
        temperature = temperature & 0xfffff
        temperature = (temperature * 200 * 10 / 1024 / 1024 - 500)/10
        humidity = 0
        humidity = (humidity | data[1]) << 8
        humidity = (humidity | data[2]) << 8
        humidity = humidity | data[3]
        humidity = humidity >> 4
        humidity = (humidity * 100 * 10 / 1024 / 1024)/10   
        return temperature, humidity
      except:
        pass
    else:
      self.init()
      if self.ready:
        return (self.read())
      else:
       return None


# -------------------------------------------SGP30 VOC and CO2 -----------------------------------------------------------

class SGP30:
  def __init__(self):
    self.ready = False
   
  def init(self):
    try:
      i2c.write(0x58,bytes([0x36, 0x82]))
      self.iaq_init()
      self.ready = True
    except:
      pass 
   
  def TVOC(self):
    return self.iaq_measure()[1]
   
  def baseline_TVOC(self):
    return self.get_iaq_baseline()[1]
   
  def eCO2(self):
    return self.iaq_measure()[0]
   
  def baseline_eCO2(self):
    return self.get_iaq_baseline()[0]
   
  def iaq_init(self):
    self.run(['iaq_init',[0x20,0x03],0,10])
   
  def iaq_measure(self):
    return self.run(['iaq_measure',[0x20,0x08],2,50])
   
  def get_iaq_baseline(self):
    return self.run(['iaq_get_baseline',[0x20,0x15],2,10])
   
  def set_iaq_baseline(self,eCO2,TVOC):
    if eCO2==0 and TVOC==0:raise RuntimeError('Invalid baseline')
    b=[]
    for i in [TVOC,eCO2]:
      a=[i>>8,i&0xFF]
      a.append(self.g_crc(a))
      b+=a
    self.run(['iaq_set_baseline',[0x20,0x1e]+b,0,10])
   
  def set_iaq_humidity(self,PM3):
    b=[]
    for i in [int(PM3*256)]:
      a=[i>>8,i&0xFF]
      a.append(self.g_crc(a))
      b+=a
    self.run(['iaq_set_humidity',[0x20,0x61]+b,0,10])
   
  def run(self,profile):
    n,cmd,s,d=profile
    return self.get(cmd,d,s)
   
  def get(self,cmd,d,rs):
    i2c.write(0x58,bytearray(cmd))
    sleep(d)
    if not rs:return None
    cr=i2c.read(0x58,rs*3)
    o=[]
    for i in range(rs):
      w=[cr[3*i],cr[3*i+1]]
      c=cr[3*i+2]
      if self.g_crc(w)!=c:raise RuntimeError('CRC Error')
      o.append(w[0]<<8|w[1])
    return o
   
  def g_crc(self,data):
    c=0xFF
    for byte in data:
      c^=byte
      for _ in range(8):
        if c&0x80:c=(c<<1)^0x31
        else:c<<=1
    return c&0xFF
 
  def read(self):
    if self.ready:
      try:
        return self.eCO2(), self.TVOC()
      except:
        pass
    else:
      self.init()
      if self.ready:
        return (self.read())
      else:
       return None

# ------------------------------------------- start up -----------------------------------------------------------

def ismb():
  return(True)
 
def get_version():
    print ("TI-Runtime Version 2.4.0")
   
bme280 = BME280()
dht20 = DHT20()
sgp30 = SGP30()
ti = Image("05500:""05595:""55555:""05550:""00500")
display.show(ti)


Tous les changements sont donc sous tes yeux.

Dans sa version précédente 2.1.0, le TI-Runtime contenait 2 images pour l'afficheur de la carte BBC micro:bit :
  • le logo Texas Instruments : Image("05500:""05595:""55555:""05550:""00500")
  • et une coche qui n'était pas utilisée puisque laissée en commentaire : Image("00000:""00009:""00090:""90900:""09000")
En tous cas tu ne reverras plus cette dernière car son code a été supprimé dans la nouvelle version.

On peut remarquer effectivement l'ajout du support des capteurs SGP30 et DHT20 évoqués plus haut, mais également pas mal de changements concernant le capteur BME280. Peut-être une amélioration du support de ce dernier.

Mais surtout, grande découverte. Nous l'avions raté, mais la version 2.1.0 précédente comportait 3 fonctions partageant le nom tello :
  • tello_connect(ssid,pswd="",TX=TX_pin,RX=RX_pin)
  • tello_control(cmd,TX=TX_pin,RX=RX_pin)
  • tello_read(cmd,TX=TX_pin,RX=RX_pin)
Et bien cette nouvelle version 2.4.0 ajoute 3 nouvelles fonctions très conséquentes nommées en tello :
  • read_tello_setup()
  • write_tello_setup(ssid,tx,rx,number)
  • discover_tello(TX_pin,RX_pin)
Qu'est-ce que ça signifie ? Et bien c'est une découverte absolument fantastique ; Texas Instruments avait visiblement commencé à ajouter le support du drone Tello et serait donc maintenant sur le codage de fonctions te permettant de le configurer.

Dans une prochaine mise à jour tu devrais donc pouvoir piloter le drone Tello en Python directement depuis ta calculatrice Texas Instruments via la carte BBC micro:bit, pour des projets encore plus extraordinaires et ambitieux ! :bj:




Téléchargements

Go to top

  • TI-Runtime :
    • 2.4.0 pour BBC microbit v2
    • 1.0.0 pour BBC microbit v1
  • bibliothèques Python complémentaires :
    • 2.3.0 Français pour TI-83 Premium CE Edition Python, TI-84 Plus CE-T Python Edition ou TI-84 Plus CE Python avec BBC microbit v1/v2
    • 2.1.0 English pour TI-83 Premium CE Edition Python, TI-84 Plus CE-T Python Edition ou TI-84 Plus CE Python avec BBC microbit v2
    • 1.0.0 English pour TI-83 Premium CE Edition Python, TI-84 Plus CE-T Python Edition ou TI-84 Plus CE Python avec BBC microbit v1
    • 2.34 Français English pour TI-Nspire CX II avec BBC microbit v1/v2

Source : https://resources.t3france.fr/t3france?resource_id=3078
Lien vers le sujet sur le forum: Mise à jour BBC micro:bit v2.3 pour TI-83 Premium CE (Commentaires: 5)

Nouvel accessoire Casio 2022: housse officielle calculatrice

Nouveau messagede critor » 08 Mar 2022, 12:10

1299112990Les diverses représentations locales de Casio font depuis plusieurs années des efforts remarquables dans la conception de formidables goodies destinés à accompagner ta calculatrice, à lui donner ta touche personnelle.

De la part de Casio France, on peut citer par exemple pour la rentrée 2020 la batterie USB externe Casio, une majestueuse extension permettant de prolonger l'autonomie de ta calculatrice graphique munie d'un port USB (hors Graph 25 et fx-7400G donc).

14640Pour la rentrée 2021 nous avons eu droit à de magnifiques coques perso, avec 2 visuels déclinés eux-mêmes sous 2 formats :
  • un petit format (coques bleues) convenant à la Graph 35+E II française ainsi qu'à ses équivalents à l'international (fx-9750GIII en Amérique du Nord, fx-9860GIII dans le reste du monde)
  • un grand format (coques blanches) convenant à la Graph 90+E française ainsi qu'à ses équivalents à l'international (fx-CG50AU en Australie, fx-CG50 dans le reste du monde)

De la part de Casio Espagne, nous avons également eu droit à de magnifiques coques personnalisées pour la rentrée 2019 dans le cadre de la collection Women in Science, mais cette fois-ci pour la dernière génération de calculatrices scientifique Casio Classwiz, à laquelle appartiennent les fx-92 Spéciale Collège distribuées en France.

Au menu initialement 12 femmes scientifiques ont été illustrées en partenariat avec des artistes, pouvant chacune être déclinée jusque dans 3 versions différentes avec de légères variations de couleurs :
  • pour les modèles à coque noire (fx-82SP X, fx-350SP X)
  • pour les modèles à coque bleue (fx-85SP X)
  • pour les modèles à coque blanche (fx-570SP X, fx-991SP X)
Pour la rentrée 2021 la collection vient même d'être étendue avec 2 nouvelles femmes scientifiques.

Si jamais tu arrives à en récupérer, précisons que ces coques sont parfaitement compatibles avec ta fx-92 Spéciale Collège française.

Pour la rentrée 2021, Casio Allemagne a également apporté sa touche avec une collection de 5 coques ici encore personnalisées par des artistes pour les calculatrices Casio scientifiques Classwiz, cette fois-ci sur le thème des STEM (Science, Technologie, Ingénierie, Mathématiques).

Et bien sûr tout aussi compatibles avec ta fx-92 Spéciale Collège.

Grand mystère, quelles allait être le nouvel accessoire conçu pour ta calculatrice Casio pour la rentrée 2022 ?

Et bien nous y sommes. Si tu t'es rendu(e) dans les bons magasins ces dernières semaines (fnac, Darty, Bureau Vallée) tu as pu commencer à voir apparaître à côté des calculatrices Casio, des emballages carton très similaires mais essentiellement blancs et illustrant en gros le nom du constructeur.

Ne te faisons pas languir plus longtemps, il s'agit de housses pour calculatrices Casio, un accessoire cette fois-ci conçu au niveau de Casio Europe si l'on en croit les inscriptions au dos de l'emballage. Ces housses sont fort bienvenues sachant que l'environnement scolaire est un milieu très hostiles pour les appareils électroniques : transports quotidiens, chocs, chutes, nombreuses variations quotidiennes de température et humidité suite aux divers changements de salle.

15295152962 références sont dès maintenant disponibles au choix :
  • le FX-CASE pour les calculatrices scientifiques
  • le GRAPH-CASE pour les calculatrices graphiques
1529315292

Il s'agit ici de housses semi-rigides signées du logo du constructeur, une grande inscription CASIO étant présente en relief avec des lettres extrudées. La finition extérieure en fibre de carbone protège contre les intempéries pendant que la doublure intérieure protège ta calculatrice. Actuellement elles ne sont disponibles qu'en noir.

Un compartiment te permet de plus de ranger quelques affaires : stylos, clés USB, etc.

Nous n'allons pas te mentir : ce n'est pour nous pas un accessoire indispensable ; les calculatrices Casio sont tout spécialement conçues pour le milieu scolaire hostile et très résistantes ; nous n'en avons pas une seule de cassée en plus de 10 ans. Mais précisons toutefois que nous prenons grand soin de nos calculatrices.

Mais c'est quand même un plaisir et une fierté de pouvoir accompagner ta calculatrice Casio de sa housse officielle siglée du logo du constructeur. La housse permet de mieux protéger ta calculatrice (à condition de continuer à utiliser son couvercle rigide correctement) et l'aide ainsi à conserver un aspect esthétique optimal, t'offrant alors une utilisation plus agréable et te permettant également d'en tirer un meilleur prix pour le jour où tu la revendras. C'est de plus l'occasion de minimiser le risque de perte des patins agrippants, que tu retrouveras donc peut-être dans la housse si ils tombent et pourras donc recoller à temps.

Découvrons ces deux housses ensemble dès maintenant.

1530715308La housse FX-CASE mesure 10×18,4 cm² pour 2,8 cm d'épaisseur. Elle permet d'accueillir des calculatrices occupant jusqu'à 8×16,5 cm² pour 2,3 cm d'épaisseur, c'est-à-dire entre autres les calculatrices scientifiques Casio.
1530615305

Les dernières calculatrices Casio scientifiques (gamme Classwiz) y rentrent parfaitement, que ce soient les modèles français (fx-92 Spéciale Collège) ou distributés dans le reste du monde :
153041530215301

La housse convient tout autant aux calculatrices scientifiques Casio de générations précédentes :
15300152991529815297

15303Et la cerise sur le gâteau est de pouvoir accompagner la chose de stylos et clé USB Casio, bien évidemment. ;)

1532415325La housse GRAPH-CASE mesure quant à elle 12,5×22 cm² pour 3,3 cm d'épaisseur. Elle permet d'accueillir des calculatrices occupant jusqu'à 10,5×20,1 cm² pour 3,3 cm d'épaisseur, c'est-à-dire entre autres l'ensemble des calculatrices graphiques Casio.
1532315322

Les modèles de la dernière génération de calculatrices graphiques Casio (gamme USB Power Graphic 3) distribués en France (les Graph 25+E II, Graph 35+E II et Graph 90+E) y rentrent parfaitement :
153191532015321

La housse va également comme un gant aux modèles équivalents distribués dans le reste du monde :
1531815317

La housse convient également aux calculatrices graphiques Casio de générations précédentes, même les modèles munis de sorte de grandes oreilles de part et d'autre de l'écran :
1531015309

Et le comble du fan de Casio est bien évidemment ici aussi de remplir le compartiement dédié avec toute la collection de goodies Casio : :D
153161531515314153131531215311

Liens d'achat :
Lien vers le sujet sur le forum: Nouvel accessoire Casio 2022: housse officielle calculatrice (Commentaires: 0)

OutRun, jeu d'arcade Sega adapté pour Graph 90+E fx-CG50

Nouveau messagede critor » 09 Mar 2022, 12:22

Nombre de jeux sortant pour smartphones, tablettes, ordinateurs et consoles de jeux, se retrouvent plusieurs années plus tard disponibles sur calculatrices graphiques.

Justement, un énorme avantage jusqu'à présent des calculatrices graphiques Casio, le constructeur ne combat pas l'exécution d'application tierces lorsque la calculatrice n'est pas en mode examen. Un choix de la raison à l'exact opposé de l'ensemble de la concurrence qui pousse pour l'excessif avec le blocage, l'effacement ou parfois même les deux, de tout programme ou application faisant appel à du code machine tiers, parfois même hors mode examen.

Les formidables Casio Graph 90+E (ou fx-CG50 à l'international), ainsi que les modèles les ayant précédés fx-CG10 et fx-CG20, grâce aux émulateurs dédiés NESizm et prizoom par tswilliamson, te permettent de jouer directement aux jeux compatibles avec les consoles de jeux suivantes :
  • Nintendo Famicom (1983)
  • Nintendo NES (1985)
  • Nintendo Game Boy (1989)
  • Nintendo Game Boy Color (1998)
8198831412255


Pour les consoles de jeux et plus généralement plateformes ne disposant pas encore d'un émulateur dédié sur ta Casio, les jeux doivent être adaptés au cas par cas. L'on n'en compte pas moins diverses adaptations ou portages hautement réussis de jeux sortis pour d'autres plateformes. On peut citer entre autres :
1189112784144371445415176

Les Casio Graph 90+E et compatibles sont de formidables machines vidéoludiques, aussi bien pour les joueurs que les développeurs, de loin le meilleur choix à ce jour toute concurrence confondue ! :bj:

Parlons aujourd'hui d'un tout autre jeu. OutRun est un jeu de course en 3D sorti initialement sur borne d'arcade par Sega en 1986.

Au départ de Coconut Beach au volant de ta Ferrari Testarossa décapotable et accompagné de ta copine, tu devais enchaîner avec succès 5 circuits. L'épopée te faisait sillonner l'Europe avec sa haute variété de paysages et reliefs. À chaque fin de course tu avais le choix entre deux destinations possibles avec des conséquences sur la fin du jeu.

6774En 2016 OutRun avait fait l'objet d'une première adaptation sur calculatrices graphiques par Mark Power sous le nom de Racer, pour la tant regrettée HP Prime.

Le jeu avait ici été recodé intégralement dans le langage interprété de la machine, le HPPPL.

Malgré cela ainsi que le recodage intégral, le lien avec l'original n'en restait pas moins évident vu la réutilisation des sprites de Sega.

9617En 2018, nous avons eu droit cette fois-ci à un portage de Cannonball pour TI-Nspire par gameblabla en langage compilé C.

Cannonball est un moteur de jeu amélioré dédié au jeu OutRun. Nécessitant ici la ROM du jeu original, il te permettait d'en retrouver toutes les fonctionnalités.

15326Aujourd'hui grâce au prolifique SlyVTT, voici enfin le jeu OutRun pour Casio Graph 90+E et compatibles ! :bj:

Il s'agit ici d'une adaptation mais recodée intégralement en langage compilé C.

Bien que toujours en développement, le circuit et les graphismes sont déjà très riches :
  • virages à gauche ou à droite
  • piste en montée ou descente
  • environnement en plaine ou désert
  • éléments décoratifs de bord de route avec 3 espèces d'arbres différentes
  • fond d'écran avec défilement de nuages

Les touches sont le suivantes :
  • SHIFT
    pour accélérer
  • ALPHA
    pour freiner/reculer
  • EXIT
    pour quitter
  • ou
    pour aller à gauche ou à droite
  • F1
    et
    F2
    pour afficher des infos de debug

Et puis admire un petit peu les performances sur les derniers modèles Graph 90+E et fx-CG50, et ce sans aucun overclocking de la machine : :#tritop#:

Un nouveau chef d'œuvre de maître à l'actif de SlyVTT ! :bj:

Téléchargement : archives_voir.php?id=2869696

Source : https://www.planet-casio.com/Fr/forums/ ... h-90e.html
Lien vers le sujet sur le forum: OutRun, jeu d'arcade Sega adapté pour Graph 90+E fx-CG50 (Commentaires: 5)

Liste caIculatrices IB 2022: NumWorks enfin approuvé !

Nouveau messagede Admin » 11 Mar 2022, 17:31

Aux épreuves d'examens de l'enseignement secondaire français, la calculatrice graphique doit être mise en mode examen, un mode qui selon les modèles efface ou verrouille les données, et parfois même certaines fonctionnalités.

La France n'est pas le seul pays à avoir ainsi institutionnalisé le mode examen. C'est également le cas, entre autres :

Au Baccalauréat International le mode examen peut être exigé depuis la session 2015. Il y a une liste internationale de modèles approuvés, précisant pour chacun si il faut utiliser le mode examen, avec d'éventuelles contraintes de configuration ou version système, ou pas. Dans la négative, c'est un effacement intégral de la mémoire qui sera exigé en début d'épreuve.

Comme au Portugal et aux Pays-Bas, cette liste est mise à jour chaque année avant les épreuves.

L'année dernière pour la session 2021 par exemple, la mise à jour avait :
  • supprimé plein de modèles autorisés les années précédentes (TI-Nspire monochromes, Casio fx-9750G+, fx-9750GII, Graph 35+, Graph 35+USB, Graph 35+E, cfx-9850G+, Graph 65+, cfx-9950G+, fx-1.0+, fx-9860G, fx-9860G SD, fx-9860G AU, Graph 85, Graph 85SD, Graph 75, Graph 95, fx-CG10)
  • ajouté quelques modèles nouvellement autorisés (TI-84 Plus CE-T Python Edition, Casio fx-CG50AU, fx-9750GIII et fx-9860GIII)
  • ajouté des exigences de mise à jour vers la dernière version système disponible (Casio fxCG50, Graph 90+E, Graph 35+E II)
  • ajouté une exigence de mise en mode examen (Casio Graph 35+E II)

Nous t'avons fait part récemment des mises à jour 2022 des listes de modèles approuvés :
Cette dernière mise à jour au Portugal faisait rentrer NumWorks dans la liste mais avec un nouveau modèle inconnu jusqu'alors, la N0120 EX.

Rappelons qu'il y avait eu un très gros incident entre NumWorks et l'institution portugaise en 2020-2021 :
Pour la rentrée 2020, NumWorks était en effet tout fier de s'afficher dans la presse portugaise, cette dernière annonçant le modèle comme en cours de validation par le JNE (Jury National des Examens) et la chose comme acquise, une simple formalité.

Véritable camouflet pour NumWorks lors de la publication de la liste mise à jour pour la session 2021 en Mars 2021 ; l'approbation de la NumWorks avait été refusée. Les motivations accompagnant la liste ne faisaient pas nommément mention de NumWorks, mais incriminaient clairement la possibilité d'installer des fonctionnalités de calcul formel sur de nouveaux modèles examinés dans le cadre de l'élaboration de cette liste. La NumWorks étant le seul modèle récent absent de la liste finale aucun doute possible, lui était donc reproché la possibilité d'installer des capacités de calcul littéral et formel avec le firmware tiers Omega et l'application KhiCAS.

À première vue ce n'était pas si grave. Au Portugal comme déjà expliqué, la liste nationale garantit juste la conformité des modèles énoncés, dans le sens où ils n'ont pas besoin de vérifications complémentaires par les centres d'examens locaux et leurs surveillants. Les candidats équipés de modèles non listés ont juste à faire vérifier leur calculatrice avant la session d'épreuves auprès de leur centre d'examens, ce dernier ayant parfaitement le droit de la juger conforme et de l'autoriser localement. Et les candidats ayant acheté une NumWorks suite aux articles de rentrée 2020 allaient quand même pouvoir l'utiliser.

Sauf que les choses ne se sont pas arrêtées là, l'institution nationale est allée beaucoup plus loin en émettant sans doute exprès pour la session 2021 une stricte interdiction des calculatrices open source, empêchant ainsi toute autorisation de la NumWorks au niveau d'un centre d'examen local, interdiction nationale donc qui n'avait jamais été utilisée contre aucun autre modèle ou constructeur. Une mention possiblement discriminatoire et illégale, une entité n'ayant pas à s'occuper de la façon dont un produit est développée tant que les objectifs du cahier des charges sont atteints, à moins bien sûr qu'il y ait eu une mention en ce sens au cahier des charges. Une mention supprimée sous quelques semaines.

Ce très grave incident est à notre connaissance l'une des deux raisons essentielles ayant conduit au verrouillage des calculatrices NumWorks N0110 ainsi qu'au changement de licence avec la version 16.3.

L'entrée de NumWorks dans la liste du Portugal pour la session 2022 est donc d'autant plus remarquable qu'elle nous semblait hautement improbable après tout cela, et nous ne pouvions que grandement féliciter le constructeur pour cet exploit herculéen ! :bj:

Et justement, il nous manquait encore la mise à jour de la liste pour le Baccalauréat International...

Nous y sommes enfin aujourd'hui, la liste des calculatrices autorisées au Baccalauréat International vient tout juste d'être mise à jour pour la session d'examen 2022.

Quelques changements pour les TI-Nspire CX. Jusqu'à l'année dernière les candidats devaient se présenter avec une calculatrice mise à jour au moins en version 5.0 pour les TI-Nspire CX II, ou 4.5.1 pour les TI-Nspire CX.
Et bien grosse fuite en avant cette année, ce sont maintenant respectivement les dernières versions 5.4 et 4.5.5 qui sont exigées, comme par hasard des versions toujours non supportées par Ndless à ce jour.

Nouveau modèle autorisé, la TI-84 Plus CE Python, sortie pour la rentrée 2022 en Amérique du Nord.

Et autre nouveauté NumWorks rentre enfin dans la liste !
Nous notons au passage que pour être utilisées aux épreuves du Baccalauréat International, les NumWorks devront être mises à jour au minimum en version 18.1.

Décidément tout semble sourire en ce moment à NumWorks, nous renouvelons nos félicitations grandement méritées ! :bj:

Source : https://www.numworks.com/calculator/exa ... 650594.pdf via https://www.numworks.com/calculator/exa ... alaureate/
Lien vers le sujet sur le forum: Liste caIculatrices IB 2022: NumWorks enfin approuvé ! (Commentaires: 3)

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1383 utilisateurs:
>1365 invités
>13 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)