Dujardin stephane
IUT de CERGY N LRSD
01 02 2021
CODEX DUJ
Abstract
.Ce document est destiné à l'auto-formation des étudiants de S2
Lors de leurs projets
Sommaire
Page 1 photos de vacances .
Page 2 Présentation des projets , outils et logiciels
Page 3 partie A Comparaison entre C et Python , philosophie générale les fichiers Page 4 partie A Codage en ligne : débuter en python
Page 5 partie A Codage en Ligne 8 exercices
Page 6 partie A Codage en Ligne 8 exercices pour progresser Page 7 partie A Codage en local l'IDE Thonny
Page 8 partie A Codage en local Premier programme sur l'IDE Thonny Page 9 partie A Codage en local utilisation des capteurs de la carte
Page 10 partie A Codage en local Les sous programmes ..trucs et astuces de python Page 11 partie A Codage en local travaux pratiques avec la carte micro:bit V2 ..
Page 12 partie B exercices de codage en processing .. boutons et étapes Page 13 A&B A+B mise nen œuvre de la DEMO sinus
Page 14 A&B A+ B DEMO PROJET COMPLET mise en Œuvre version 01/02 Page 15 A&B A sur Thonny exo pour envoyer des datas en DUJ5
Page 16 A&B B Processing : étude du programme PJS2duj5 ou programmer ? Page 17 A&B A Python présentation du main.py en version COMPLEXE.
Page 18 A&B A Python ou programmer dans le main.py ? ..
Page 19 Annexe théorie du protocole DUJ 5
Page 1
PRESENTATION des « PROJETS technologiques »
BUT :
Réalisation d'un dispositif de mesure, autonome, connectable à un ordinateur.Il sera constitué de 2 parties reliées ensemble par une liaison série au protocole DUJ5 Partie A une Micro:BIT V2 programmée en Python sur Thonny ou Create.withcode.uk Partie B un ordinateur doté d'un programme écrit en processing
Lors des projets de S2 , vous serez amenés à vous auto-former sur la programmation en Python d'une carte Microbit ( en prêt) .. ce document vous servira de guide
.. Un Répertoire type est à votre disposition : c'est projetS2.zip ..
: répertoire processing PJSTduj5 : programme affichant des données issues de la carte microbit : répertoire microbi : avec 4 programmes de démonstration .. dont un générateur de sinus
UTILISATION Du DOCUMENT : pour votre auto-formation
En premier : Auto-formation à Python .en ligne . page 3 4 et 5 6 Travaillez sur le site Create.withCode.uk
Faites les exercices proposés
En second : Auto-formation à Python avec la carte microbit, et sur THONNY Travaillez sur Thonny avec les pages 7 et 8 9
En Troisième Processing .. le retour:).. sans carte Essayez la notion de clic et celle d'étape
En quatrième :faites fonctionner le programme processing grâce à la page 13 ..
Recevant les informations de la carte microbit programmée avec sinus.hex ( dans projetS2.zip)
En Cinquième :faire fonctionner le programme type, version 01/02 page 14 et 15 16 et faites fonctionner mon projet de base Mettez la carte en MODE 1 .. et mettez le doigt sur Pin0 ( 0 ) En sixième: avec la carte branchée en mode 1
essayerez de changer des affichages dans la fenêtre processing Regarder la page 13 , Faites un tour page 16
Et consulter le draw dans processing
Faites apparaître votre nom !!.. mettez le doigt sur la broche 0 de la microbit Bon travail:)
Page 2
Pc . Mac .linux
usb - +
Partie A Partie B
Datas capteur
s
MICROBIT
Mini Plaque LAB
arm Programme
Programme
COMPARAISONS « C et PYTHON »
// LRSD univ exo1
#include "mbed.h"
Serial serial(SERIAL_TX, SERIAL_RX);
int main() {
serial.baud(115200);
while (true) {
serial.printf("bonjour");
wait(10);
} }
# LRSD univ exo1 from microbit import * uart.init(115200) while True:
print("bonjour") Sleep(10000)
Programme écrit en C sur Mbed Programme en Python
Le Python s'inspire du C . Vous n'y verrez plus de pointeurs , les variables son plus souples à déclarer , et il vous sera demandé de la précision avec les tabulations ...
commentaires
;
POINT CLEF : l’indentation C'est la gestion rigoureuse des tabulations, elle remplace
l'usage des { }
Comparaisons philosophiques
Le Compilateur C . vous écrivez les commandes à réaliser. Un logiciel calcule l'espace mémoire utile , et ensuite il les transforme en langage machine composé de 0 et de 1 adapté à l'unité centrale de la carte ou il sera exécuté .
L’éditeur Python Vous écrivez les commandes à faire réaliser par un interpréteur « PYTHON » présent dans votre carte microbit. Ensuite Vous les envoyez en format texte vers la carte microbit .
Approche pratique : Le Python sur votre carte Microbit ..
« micropython » est le fameux « python » pré installé dans le microprocesseur ARM de votre carte microbit. Il sait interpréter ligne à ligne les commandes que vous lui enverrez, il peut exécuter un programme téléchargé .
2 Types de fichiers compatibles avec la carte microbit
Les fichiers xx.hex , ce sont les programmes que vous pouvez écrive et compiler directement sur le site microbit .. le hex est du langage machine ..
Ce hex englobe vos lignes de texte en python , et l’interpréteur python ! (1,8Mo) Il se place dans la carte , comme un fichier se copie dans une clef USB
Le fichier sinus.hex dans le répertoire projetS2.zip en est un exemple IL s'exécute automatiquement dès la mise sous tension de la carte . Les fichiers xx.py , ce sont ceux que vous éditerez sur Thonny
C'est du texte interprétable par le programme micropython déjà dans la carte (Micropython sera téléchargé au moins une fois avant utilisation ( voyez la doc)) Vos fichiers « py » se chargent par liaison série grâce à Thonny
Le fichier main.py en est un exemple
Seule les fichiers nommés main.py sont exécutés à la mise sous tension .
:
D'autres noms de commandes
Page 3
CODAGE EN LIGNE débuter en python Create.withcode.uk
Vous programmerez directement sur le site de create.withcode.uk , c'est le site d'une université Anglaise qui fait de la recherche pédagogique en partenariat avec le privé, et partage ses résultats pour les rendre accessibles gratuitement aux écoles du monde entier...
Ici nous apprendrons à nous passer de la carte Micro:BIT ,car nous utiliserons le simulateur de carte microbit présent en ligne .. c'est très pratique pour débuter .. et suffisant ..mais pas si génial au final pour télécharger le résultat sur votre carte ..
.
from microbit import * while True:
display.show(Image.HAPPY) sleep(500)
display.show(Image.SAD) sleep(500)
Arrivée sur le site Create
1/ Vous allez copier ces 6 lignes
vers la fenêtré du haut 3/ regardez les 25 Leds C'est beau
2/ vous faites RUN
Page 4
Une fois réalisé un copier coller
Pour utiliser ces lignes de codes dans createcode Vérifiez si l'indentation est correctement copiée
from microbit import * while True:
display.show(Image.HAPPY) sleep(500)
display.show(Image.SAD) sleep(500)
indentation
Exo1
from microbit import
display.show(Image.HAPPY)
le Python interprète les commandes Python, ligne après ligne
1/ from microbit import .. indique quelle bibliothèque utilisera l'interpréteur
2/ display.show(Image.HAPPY) commande les 25 led de la carte pour faire un sourire ..
Exo 2
from microbit import * while True:
display.show(Image.HAPPY) sleep(500)
display.show(Image.SAD) sleep(500)
...I .. c'est cela l'indentation ..
« : »
dit après le True , il y aura des lignes à faire dans le whileelles seront toutes alignées avec le même nombre de "tabulation" ou indentation from microbit import *
while True:
display.show(Image.HAPPY) sleep(500)
display.show(Image.SAD) sleep(500)
...I... regardez ce sleep() il n'est pas aligné , il fera planter l'interpréteur Exo 3
from microbit import * titi = 'A'
while True:
display.show(titi)
Utilisons la liaison série , car elle sera plus utile dans le projet
Exo4
from microbit import * uart.init(115200)
while True:
print('teste fait par LK !') sleep(1000)
À tester > bonjour !
Exo 5 utilisons des variables from microbit import *
uart.init(115200) titi = 100
toto = 'abc' while True:
print(titi) print(toto) sleep(1000)
C'est Python qui gère la déclaration de la nature des variables
Exo 7 jouons avec un bouton
Ici le bouton n'est testé par la carte que lorsque l'instruction le demande
from microbit import * while True:
if button_a.is_pressed():
display.show(Image.HAPPY) sleep(500)
display.show(Image.SAD) sleep(500)
Dans cet exo sans action sur A c'est:(
Avec une action continue c'est :( et :) Exo 6 utilisons des « if »
from microbit import * titi = 0
while True:
if titi > 100 :
display.show(Image.HAPPY) if titi > 200 :
Titi = 0 if titi < 100 :
display.show(Image.SAD) sleep(5)
titi = titi + 1
if test : : faire ce qui est identifié pareil A faire 1
A faire 2
Exo 8 à l’insu de vous,une action sur A ou B incrémente une variable en interruption
from microbit import * while True:
display.show('O') sleep(2000)
titi = button_a.get_presses() if titi > 1:
display.show('1') sleep(2000) display.show('!') sleep(1000))
Seule button_a.get_presses() saura récupérer le nombre de clics , et le remettre à 0
Page 5
Exercices de Python à faire en ligne pour progresser .
Exo4
from microbit import * uart.init(115200) while True:
rec= ' ' V0= 10*[0]
for i in range (10):
V0[i]=pin0.read_analog() rec = rec + str(V0[i]) + '/' print(rec)
sleep(10000) Exo3
from microbit import * uart.init(115200) rec = 'rr'
while True:
rec = rec + str(20)+ 'A' print(rec)
sleep(10000) Exo2
from microbit import * uart.init(115200) while True:
display.show(Image.SAD) titi = pin0.read_analog() if titi > 512:
display.show(Image.HAPPY) Exo1
from microbit import * uart.init(115200) rec = 'bonjour' while True:
print(rec) sleep(10000)
Ecrit : bonjour
Exo1 bis
from microbit import * uart.init(115200) rec = 125
while True:
print(rec) sleep(10000)
Ecrit : 125
:)
:(
v0<512 v0>512Écrit 0/0/0/0/0/0/0/0/0/0/
si V0 = 0 Ecrit
10/10/10/10/10/10/10/10/10/10/
Si V0 = 10 Écrit
rr20A
Et 10 secondes après rr20A20A
Et 10 sec …ainsi de suite rr20A20A20A
Action de simulation
Attention la barre de simulation donne de -1024 à 1024 , en réalité c'est de 0 à 1024.
rec est ici une variable texte
rec est ici une variable
numérique 32bits Print se débrouille
rec est ici une variable texte
On lui ajoute du texte à sa fin en
transformant la quantité 20 en une chaine de deux ascii . Plus le caractère 'A' VO est un tableau de 10 valeurs = 0
rec est en lettres on lui additionne la transformation
De V0 en une chaîne avec un / en plus
Page 6
1/ Allons chez Thonny:) Url : thonny.org
L'IDE THONNY .. Ou
Environnement de Développement IntégréSur Thonny vous écrirez des lignes de commandes et les enverrez par liaison série vers la carte microbit , ou son interpréteur micropython les exécutera . C'est Thonny gère la carte.
Pour que la carte microbit puisse communiquer par liaison série , il faut que votre ordi possède le bon driver ( c'est celui de la carte Mbed le ARM Mbed WindowSerie port driver ) Logiquement il est déjà installé dans Windows 10.. sinon il faudra le faire )
2/ Téléchargez
suivant votre besoin
4/ paramétrez pour fonctionner avec une carte micro:bit
>>>> Outils :
>> interpréteur
5/ Choisir
l’interpréteur pour microbit
6/ branchez la carte et faites le choix du port 7/ Faites OK
Ici vous initialisez la carte avec l'interpréteur de commandes python nommé « micropython »
3 installez .. vous obtenez ceci
>> vous êtes connectés
Page 7
Téléchargement et installation de Thonny pour microbit
premier programme sur Thonny et téléopération de la carte
Exo 1
Ce programme utilise la liaison série pour écrire bonjour dans la console en bas de page ..
Logiquement si Thonny est bien paramétré ( page d'avant) Et si La carte est branchée sur le port USB
Thonny l'a vu et écrit « >>> » en bas de page ( faites un Reset carte si problème )
Vous pouvez copier et coller le programme suivant dans la fenêtre exo1.py
from microbit import * uart.init(115200) while True:
print("bonjour") Sleep(10000)
Lancez le programme avec la flèche verte Bonjour apparaît en bas de l'écran
Le fait de lancer le programme par un RUN, envoie les lignes de commandes écrites en Python vers la carte, et les exécute les une après les autres .
Si la carte exécute une commande qui écrit du texte sur la liaison série, le texte apparaît en bas de page dans la console . Cependant, quant vous revenez en mode édition avec un stop, Thonny ne reprend pas la main sur la carte.. Seul un reset carte la réveille et renoue ce lien avec Thonny, alors vous pouvez continuer à écrire du code dans thonny .
Je vous conseille de refaire les exos des pages d'avant !
>>>Indique
Que la carte microbit Est synchronisée avec Thonny Elle vous attend !
« bonjour » est Visible une fois le programme lancé
Page 8
Utilisation des capteurs de la carte microbit
Nous resterons dans le cadre de La version 01/02 qui limite la capacité de transfert Problème 1 : Duj5 version 01/02 ne peut transférer que des datas de 0 à 1024
Solution 1 : on limitera les chiffres à transmettre entre 1 et 1023 ..
Problème 2 : Duj5 ne sait pas encore transférer des chiffres négatifs
Solution 2 : les négatifs seront limités par -512 et +512 et décalés de 512 avec un +512 Mesures sur pin0
La pin0 , mesure les tensions en 0 et 3,3V pas de négatif ! en 10bits Le résulta sera un chiffre en 0 et 1024 ..
Mettez 0 sur pin0 ou 3,3V
from microbit import * uart.init(115200) while True:
captation = pin0.read_analog() print ( captation )
sleep(1000) from microbit import *
uart.init(115200) while True:
captation = accelerometer.get_z() print('Z',captation)
sleep(1000)
from microbit import * uart.init(115200) while True:
captation = accelerometer.get_z() titi= int ( captation / 4 + 512 ) print('Z',titi)
sleep(1000)
Mesures au magnétomètre ( X Y ou Z) La mesure va de +-1000000 avec un aimant La mesure ira de +-100000 avec la terre
L'axe des z est au dessus L'axe des x de coté
L'axe des y devant ( câble usb) ..
Se limiter à 10 mesures à la seconde
Diviser par 250 borde la mesure aux valeurs du champ magnétique terrestre
Dans le PC on enlèvera 512 et on retrouvera une valeur autour de 0 ( +-512)
from microbit import * uart.init(115200) while True:
titi = compass.get_x() print('g X',titi)
sleep(1000) from microbit import * uart.init(115200) while True:
titi = int(compass.get_x() / 250 + 512) print('g X',titi)
sleep(1000)
from microbit import * uart.init(115200) while True:
titi = microphone.sound_level() print('son',titi)
sleep(1000)
Mesures avec l'accéléromètre ( X Y ou Z) mesure de l’accélération entre +2 et -2g
+2g = 2048 -2g = -2048 L'axe des z est au dessus L'axe des x de coté
L'axe des y devant ( cable usb) ..
Ici mesure sur Bougez la carte
À plat sur Z On mesure l’accélération terrestre Modification pour capter ,
border et minimiser la mesure /4 passe de +-2048 à +-512 +512 passe de +-512 à 0 1024
Mesures sur le micro
La mesure du son donne un résultat avec une valeur comprise entre de 0 à 512 ..
Mesures de la température interne temperature() donne un résultat en Celsius Mais gare au négatif ! Alors je passe en Kelvin avec un + 273
from microbit import * uart.init(115200) while True:
titi = temperature()+ 273 print('dKelvin',titi)
sleep(1000)
Page 9
Annexe 3
Programmation fine Trucs et astuces de Python
Déclarer un sous programme
L'import rend présentes les lignes de commandes contenues dans spi.py Dans main.py
L'appel de jon() se fait bien Attention aux variables Privilégiez le passage de paramètres dans la fonction
Stocker des fonctions , dans des programmes situés à l'extérieur du programme principal
from microbit import * from spi import*
while True:
print(124) jon()
sleep(500)
Programme principal
nommé main.py Programme secondaire nommé spi.py
def jon():
print(126)
124 126 ..
console
main.py spi.py
Racine carte Micro:Bit
from microbit import * def jon():
print(126) while True:
print(124) jon() sleep(500) Notez les
:
console
Écrire des sous programmes Permet d’éviter des répétitions
1/ problème du PYTHON : Vous écrivez du code qui sera interprété ensuite, ligne à ligne par le python situé dans la puce .. Cela implique que certaines parties de votre programme peuvent êtres fausses, sans que votre éditeur ne le voit. Ce n'est que quant la ligne corrompue est exécutée qu'une erreur apparaît. Il faudra multiplier les essais pour trouver toutes les erreurs .
2/ Sur Thonny , votre carte est reliée par liaison série avec votre PC.. quant la puce plante , la liaison série plante .. tout s’arrête .. seule solution : Reset sur la carte .. et stop exécution ..
Dans des cas très rares, il faut aller dans > OUTILS > OPTIONS > INTERPRETEUR Et recharger le firmware micropython sur la carte .. puis faire ok
Variables et sous programme
Attention les sous programmes déclarent en local, toutes les variables qu'ils utilisent ..
Sauf si on précéde le nom de la variable par le mot « global » .
Passer des paramètres est ce qui est le mieux . from microbit import * titi = 33
def jon():
global titi titi = titi + 1 print(titi) while True:
print(124) jon() sleep(500)
124 126
.. 124
34 ..
console
Grâce à global Python sait qu'il faut sortir de la fonction pour aller trouver la valeur de titi
Le mieux est de Passer les variables dans la fonction
Importer un sous programme Les sous programmes
DEPANNAGE
Page 10
TRAVAUX PRATIQUES avec câblage:)
Dans cette partie vous allez câbler des LEDs sur la plaque lab et utiliser la carte microbit pour en faire clignoter une
kito nic
3 p0 p1 p2 p3 p4
3,3 P0 P1 P2 P3 P4 P5 P6 P7 P8 Ov
P20 P19 P16 P15 P14 P13 P12 P10 P11 P9 Ov
Le connecteur extension votre premier Câblage CABLAGE 1 .. allumer une LED VERTE sur le 3,3V
330ohms orange
orange marron LED verte
Grande patte vers le +
3,3V 0V
330ohms
CABLAGE 2 .. faire clignoter une LED jaune Sur Thonny
1/ Trouvez le port COM ( option)
2/ Faire stop .. et faire apparaître les >>
( sinon rechargez le firmware)
3/ copier coller le programme suivant from microbit import *
while True:
pin2.write_digital(0) sleep(500)
pin2.write_digital(1) sleep(500)
Branchez la LED jaune avec 330ohms , entre la broche P2 et le 0V
CABLAGE 2 ..mesurer la tension de la LED verte
1/ Tirez un fil entre la broche P0 du connecteur
( P0 est à coté du 3,3V) , et l'anode de la diode verte 2/ copiez collez le programme à gauche
3/ lancez et regardez Nota
Pin0.read_analog() retourne une valeur de 1024 pour 3,3V D’où la règle de 3 à son égard
from microbit import * uart.init(115200) while True:
pin2.write_digital(0) sleep(500)
pin2.write_digital(1) sleep(500)
titi =pin0.read_analog()
print((titi*3.3)/1024)
Page 11
// EXO 1 test d'un bouton central
color ON = color(200, 0, 0); // ON veut dire Rouge color OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; // bout est l' etat du bouton
int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; // // pour le dessin du bouton void setup()
{ size(600, 600); }
void draw() // c'est notre main pour dessiner à l'écran {background(50,60,0);
textSize(24); fill ( 250) ; text("bonjour exo 1 ", 50,50);
fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin du draw
void mousePressed() // programme appelé par un clic souris
{ if ((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H)))bout = -bout; }
Processing révisions
EXO1 : Créer une fenêtre de size(600,600), avec un bouton
Un joli carré rouge y sera dessiné , et lorsque vous cliquerez dessus PC le saura , (car vous avez utilisé le sous programme d'interruption PC mousePressed() ) ..
Dans cette interruption vous ferez un if complexe pour savoir si la position de mouseX et Y se situe dans le fameux carré .. vous y inverserez la couleur du carré à chaque clic .
Regardez comment on utilise les variables color pour fabriquer une couleur avec un nom testez exo1
// EXO 2 test d'un bouton central et d'un systeme avec 2 etats color ON = color(200, 0, 0); // ON veut dire Rouge
color OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; int etat = 0 ;
int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; int off = 100;
void setup()
{ size(600, 600); }
void draw() // c'est notre main pour dessiner à l'écran {if ( etat == 0)
{ background(50,60,0);
textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 0 ", 50,50);
fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin etat = 0
if ( etat == 1)
{ background(50,0,60);
textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 1 ", 50,50);
fill(OFF); if ( bout == 1) fill(ON) ; rect((PX+off),PY,L,H); //un bouton } // fin etat = 1
}
void mousePressed() // programme appelé par un clic souris
{ if(etat==0){if((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 1 ;}}
if(etat==1){if((mouseX>(PX+off))&&(mouseX<(PX+L+off))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 0 ;} }
}
EXO2 Créer une fenêtre de size(600,600), avec un boutons et 2 états dans le draw.
Une variable état est testée ,si etat = 0 il y aura un graphisme différent que si etat = 1 Le test dans le mousePressed() est différentié entre les 2 états grâce à etat et off testez exo2
Processing ne s'installe pas, car c'est un programme qui utilise le java (déjà installé sur votre PC ou Mac) .. allez sur le site de la fondation processing , télécharger processing.zip .. et décompressez le dans un répertoire connu .. ensuite allez dans le répertoire pour trouver et lancer processing.exe .. c'est tout
Page 12
Mise en œuvre de la démo « sinus.hex »
Configuration .ordinateur : Processing en run dans le projet PJSduj5
.carte Microbit : Chargée avec SINUS.hex trouvé dans le répertoire microbit SINUS.hex se copie et se colle dans la carte microbit : ( clef usb)
Faites un run ici
vote fenêtre programme s'ouvrira
! carte micro:bit déconnectée
Elle montre les ports COM utilisés par mon PC , celui de carte microbit n’apparaît pas encore:)
Connectez la carte microbit , sans oublier de lui avoir chargé le
programme main.py ( page d'avant)
Un nouveau port com s'ouvre
Cliquez ( ici dans le 6)
Une nouvelle fenêtre s'ouvre Une Première fenêtre s'ouvre
Ici la carte Microbit est chargée avec le fichier SINUS.hex Le Rôle de SINUS.hex
Est d'emettre un signal sinus observable sur le terminal graphique constitué par le programme processing nommé PJS2duj5
Page 13
Programmes de lancement
Page 14
PROJETS2 renferme des sous programmes utiles au lancement des projets
Répertoire PJS2duj5
Le programme écrit en processing PJS2duj5 pour votre Ordinateur .Son rôle est de recevoir et d'afficher les datas arrivant de la carte . ICI il n'affiche que les 100 valeurs du tableau V1[]
Dans le répertoire microbit
les 4 programmes pour la carte microbit, ils seront présentés du plus simple au plus complexe
SINUS pour une approche "débutant" .. un bon outil de test de processing SINUS.py est le programme python
Il calcule les 100 valeurs d'un sinu, les place dans le tableau V1[] et le transfert en série un 'h' indique au PC que c'est le mode SINUS
SINUS.hex est le programme en code machine à copier directement dans la carte LIVE pour une approche "test capteur" s'adapte à tous les capteurs, une forme de scop LIVE.py pour Thonny en python
Dans une boucle on échantillonne 100 valeurs de l’accélération en X ( chaque 10 ms) On les place dans le tableau V1[] , et ensuite on les sérialise vers PJS2duj5
un 'g' indique au PC que c'est le mode LIVE
LIVE.hex ..est le programme en code machine à copier directement dans la carte SIMPLE pour une approche "mise en mémoire et restitution, basique "
SIMPLE .py pour Thonny en python
cette version propose 2 possibilités de fonctionnement par une pression sur A et B > clic A record de 100 mesures en flash et attente ( on efface les valeurs d'avant) > clic B lecture flash et transfert dans V1[] et attente
SIMPLE.hex .. .est le programme en code machine à copier directement dans la carte COMPLEXE pour une approche "multi usage "
COMPLEXE.py pour Thonny en python
cette version propose 4 choix de fonctionnement par des actions complexes sur A et B > one shoot : 100 mesures dans V1[] , transfert serie , et attente .
> 100 mesures dans V1[], et transfert en boucle > record de 100 mesures en flash et attente > lecture flash et transfert dans V1[] et attente
COMPLEXE.hex .. est le programme en code machine à copier directement dans la carte mode d'emploi de la carte en mode "COMPLEXE"
A/ Au début à la mise sous tension ou par un reset la carte affiche un 0
B/ à chaque clic sur A on passe de 1 2 3 4 1 2 3 4 l'état est affiché sur les LED état 1: 100 mesures et transfer chaque 0.5s en boucle auto
état 2: one shoot ! et transfert de 100 mesure et retour au point A/
état 3: one shoot et mise en flash de test.txt avec les valeurs, et retour au point A/
état 4: relecture des datas de test.txt et transfert serie, retour au point A/
C/ Choix et lancement d'un des 4 états ..
1/ choisir l'état que l'on désire exécuter par des clics sur le bouton A 2/ lorsque l'état désiré s'affiche
cliquez entre 0,5 à 1 seconde sec sur B la carte fait un petit « o » pendant 1 S
et montrera ensuite un « O » pendant 2 secondes pendant ce « 0 » de 2 secondes faites 2 clics B
la carte répond par un « ! » .. et exécute le mode choisi 3/ quant un mode est fini .. la carte retourne en attente de clic A un Clic B réveille la carte du mode automatique ( état 1)
un marche arrêt annule tout
Page 15 Étude du programme SINUS.py sur Thonny
Ou comment coder un programme en python qui sache envoyer, automatiquement chaque seconde, un tableau de datas vers le PC en utilisant le protocole DUJ5.
À la fin des exos vous saurez enoyer l100 valeurs d'un sinus r vers le PC équipé de PJTS2duj5 Qui les recevra comme un tableau pour les placer en V1[] grâce au H et R
exo 1
from microbit import * uart.init(115200)
while True: # boucle globale GENEALE
uart.write('a') uart.write('e') Sleep(1000)
Dire au programme du PC que la carte microbit est la, en mode auto.
Je suis la = 'e' mode auto 'a' exo 2
from microbit import * uart.init(115200)
titi = 0
while True: # boucle GENEALE uart.write('a')
uart.write('e') print( titi)
uart.write('H') # cloture d'une data uart.write('R')
sleep(1000)
print(titi) > envoie 0 car titi = 0 H ferme l'envoie d'une data R ferme le transfert du tableau
Ici on envoie un tableau de 1 élément
exo 3
from microbit import * uart.init(115200)
while True: # boucle GENEALE uart.write('a')
uart.write('e') for i in range(100):
print( i)
uart.write('H') # cloture data uart.write('R') # cloture tableau sleep(1000)
La boucle for va envoyer 100 datas Chacune finie par un 'H'
Le tout fini par un 'R' exo 4
from microbit import * uart.init(115200)
while True: # boucle globale GENEALE uart.write('a')
uart.write('e') for i in range(100):
print( 10*i)
uart.write('H') # cloture d'une data uart.write('R')
sleep(1000)
La boucle for va envoyer 100 datas Chacune finie par un 'H' et R Une demi dent de scie sur le PC'
Exo 5
from microbit import * import math
uart.init(115200)
while True: # boucle globale GENEALE uart.write('h')
for i in range(100):
toto = 510 + 250 * math.sin(3.6*i *math.pi/180) titi = int(toto)
print( titi)
uart.write('H') # cloture d'une data uart.write('R')
sleep(1000)
Math est la bibliothèque qui permet de calculer des sinus ( exprimés en radiant) Je calcule 100 valeurs de 0 à 360 ( d'ou le 3,6 i math.pi/180 radiant
Exo 5 est la base du programme sinus.hex ..
Etude du programme Processing PJS2duj5
PJS2duj5 est dans le répertoire processing lui même dans le répertoire zip projets S2 . Il fait appel au fichier de sous programmes nommé PROJETS2 ( non décrit)
Dans le draw() : La variable nommée « etat » sépare deux modes de dessins différents
Si etat = 0 , on fera etat0() qui paramétré le bon port COM avec la carte et force l' etat à 11 Si etat = 11 , en tache de fond la carte écoute le port COM et mémorise les datas arrivées if ( état ==11) est le lieu ou vous devez écrire vos programmes
Exemple .. dans état == 1 , une fenêtre montre les 100 données de V1[] arrivées en DUJ5 Les Variables en provenance de microbit sont dans le tableau V1[120] pré créé par PROJETS2 La carte renseigne aussi la variable « type » (accessible) sur l'état de la carte microbit
// PROJET PJ2
// ecoute la carte microbit en version 01/02 ( com carte > Pc) import processing.serial.*; // bibliothèque gestion com de processing
Serial myPort; // myport sera le nom de notre objet de communication serie // Variables du DRAW
int etat = 0;
// variables utiles pour l'etat 0
int kx= 0; int ky= 100 ; int dk= 30 ; int mk= 40 ; int ptk= 1; int nbk= 10 ;String toto; int o= 0;
// variables utiles pour l'état 11
color ON = color(204, 0, 0); color OFF = color(0, 0, 200); color OK = color(0, 200, 0);
int type = 0 ; // 0 pas de carte , 1 carte version 01/02 'e' , 2 carte version ? 'f' // variables liées à votre façon de dessiner dans le if(etat == 11)
// int bl bla void setup() {
textSize(20); size(600, 600); // votre fenetre d'APP sur le PC
initPJS2(); // initialisation de mon programme et des variables client OBLIGEE }
void draw() // c'est notre main pour dessiner à l'écran {
if ( etat == 0) etat0(); //recherche le bon port COM car il le faut !!!!!
if ( etat == 11)
{ int PX = 100 ; int PY = 100 ; // position fenetre de datas de V1[] dans l' ecran // exemple demonstratif d'un programme simple
background(10,60,0);
fill(250); text ( "Datas Vision de test pour Version 01/02 " , PX , 50 );
// scop minimaliste
fill(250); rect(PX,PY,400,400); // couleur et tracé scop for ( int i = 0 ; i < 101; i++)
{ fill(250,0,0); ellipse(4*i + PX, PY + 400 - 4* (V1[i]/10) , 3,3);}
// V1[] va de 1 à 1024 .. l'affichage de 0 à 400 alors je fais 4/10 // car avec un int 0.4 est impossible
// affiche l'etat de la carte
fill(250); // ecoute de la carte pour savoir si elle vit encore text ( "mode" , 100 , 550 ); text ( state , 160 , 550 );
if ( type == 0) text ( "pas de carte Active " , 250 , 550 );
if ( type == 1) text ( "Carte Microbit avec main 01/02 " , 250 , 550 );
}
} // fin du draw
void mousePressed() // programme appelé si on clic avec la souris
{ switch(etat) // les tests de clic souris sont relatifs à l'état dans lequel ils sont utiles { case 0: { testclicetat0(); } break;
case 11: { //**************vos tests de CLIC *******
// if ((mouseX>50)&&(mouseX<150)&&(mouseY>50)&&(mouseY<150))bout = -bout;
} break;
default: ; } // fin switch
}//fin mouse pressed
Page 16
C'est la que vous
pouvez créer une
fenêtre d'affichage
de données à
votre goût
Lieu de vos variables
initialisations
Init = 0 Prépa mode
Par clics
Init = 1 Mesurage Sur 4 modes
'e' vers COM pause(500)
N O
ON
N O
prépa mode par clics
Etat > led 'e' sur COM
A?
State ++
State =
Bout = 1 Led = 'o' sleep(1s)
B > X+1
N
O
'a' sur COM= 1
'a' sur COM= 4
= 3 'a' sur COM
= 2 'a' sur COM
N
N B?
Bout = 1
En interruption
Led = 'O' X=0 sleep(2s)
X = 2 Led = ' !'
Bout=0 Etat= state
Init = 1
in
out
Etat = 1
i de 1 à 120 print(V1[i]+H
in
Mesurage sur 4 modes
i de 1 à 100 V1[i]=capteurise()
sleep(temps)
R > com A ? Etat = 0
Init = 0
Etat = 2
i de 1 à 120 print(V1[i]+H i de 1 à 100 V1[1]=capteurise()
sleep(temps)
R > com Etat = 0 Init = 0
Etat = 3 i de 1 à 100 V1[i]= capteurise()
sleep(temps)
Etat = 0 Init = 0 i de 1 à 100 V1[i]> flash
Etat = 4
Etat = 0 Init = 0 i de 1 à 120 print(fichier flash)
out
MODE AUTO
MODE one Shoot
MODE Record
MODE Play Programme
COMPLEXE.py
Le fichier
s'appelle test.txt Il est consultable par thonny
Mesure d'un double clic
pendant les 2 sec de visibilité du 'O'
Récupère le fichier pour affichage dans PJS2duj5
Page 17
Sous programme capteurise()
1/ Échantillonne l'entrée désirée ici c'est pin0
2/ norme la valeur entre
min et max soit de 1 à 1023 place un offset de 512 si négatif 3 retourne la valeur norméée
# base version 1/02 du main 31 duj
# ne pas oublier de mettre l'extension .py de main.py
# quant vous mettrez le main sur la carte microbit from microbit import *
uart.init(115200)
# sous programmes de mesure sur un capteur def capteurise( max , min ):
captation = pin0.read_analog() # ici c'est l'entrée pin0 if captation > max: #limitation à la valeur max transmise captation = max
if captation < min: # limitation à la valeur min transmise captation = min
return int(captation)
while True: # boucle globale GENEALE
# déclaration de variables et leur initialisation
temps = 1 # 1 ms .. c'est votre temps entre 2 mesures etat = 0 # 1 auto 2 shoot 3 men 4 play
state = 0 # etat intermédiaire par le bouton a
init = 0 # = 1 si init aux boutons faites donc mesures bout = 0 # = 0 pas de demande de memo etat
V1= 120*[0] # ouverture tableau pour canal V1
# initialisation des paramètres A/D envoyés vers le PC V1[110] = 0
V1[111] = 100*temps # pour 100 echantillons V1[112] = 1023 # valeur max en 10 bits V1[113] = 1 # valeur min en 10 bits
while True: # boucle « prépa mode » ou « jouer mode » while init == 0: # init=0 prépa
Suivent les lignes de codes prépa mode par clics Choix du mode par clic A
Lancement du mode par clic B et double clic B while init == 1: # init = 1 modes
Suit l’exécution des lignes de mesurage sur 4 modes Avec utilisation de capteurise() pour mesurer
sleep(500)
uart.write('e') # f si mocro < PC
Détails sur le COMPLEXE.py : ou modifier le code ?
Le sous programme capteurise() numérise l'entrée pinA0 (10bits) Partie modifiable
Consultez l'annexe 1
exo capteur DUJ5 pour savoir comment utiliser les capteurs et savoir adapter la mesure à la dynamique de 0>1024 V1/02 Attention DUJ5 ne transfert pas les signes négatifs . .
Partie modifiable Le temps entre 2
échantillons est à définir ici par la variable temps
Mise à 1 (1 ms) au début
Page 18
Dans projetS2.zip , vous disposer du programme main.py que j'ai écrit pour gérer la carte microbit et lui dire d'envoyer les informations numérisées de la pin0 en DUJ5 vers le PC.
Vous allez devoir modifier certaines parties de ce programme ( mais rien ne vous empêche de tout re écrire .. si vous respecter le DUJ5)
Donc logiquement , dans un premier temps, vous vous servirez du programme main.py tel quel , vous regarderez le transfert de 100 valeurs de pin0 , et ensuite vous allez devoir utiliser un autre capteur , et peut être même changer le temps entre 2 mesures .
Le temps entre 2 mesures est géré par la variable temps
Dans V1[11] il sera place 100 x temps .(ms) la durée totale des 100 échantillons . De cette manière le PC sait afficher une valeur en X
Le type de capteur utilisé est modifiable Dans le sous programme capteurise()
Le temps total
Le Protocole DUJ5 : la théorie
DUJ5 est un protocole de transfert des données codées en ASCII, il est bidirectionnel et symétrique , il utilises des caractères ASCII pour transférer des datas ou des ordres , sur une liaison série généralement à une vitesse de 57600bps ou 115200bps.
Le protocole DUJ5 existe sous la forme d'un sous programme, déjà codé en Mbed ou en Processing ou microbit , vous n'avez qu'a l'utiliser .. en jouant avec ses fonctions ou ses variables qui sont déjà déclarées, et réussir à communiquer avec une partie qui attend ce protocole.
BASES : 3 modes de transfert , 1 d'ordres et 2 de datas
Transfert d'Ordres par un seul caractère ASCII en minuscule Caractères ascii attendus de 'a' 'b' jusqu'à .'z' C'est à vous de de décider la signification d'un ordre Exemple « a » allumera une led , un « b » l’éteindra ..
Transfert d'une variable en décimal, codée par des caractères ASCII en Majuscule Procédure : int codé en ASCII décimal, 5 caractères max, suivi d'un caractère de clôture . Les caractères de clôture permettent de séparer entre elles 6 variables différentes.
Les caractères de clôture sont prédéfinis de K L M N O P à Q Exemple : int toto = 256 (décimal), donne et « 256 »
Transfert de toto par le canal de la variable M
'2' '5' '6' 'M' .. donnera 256 dans M dès l'arrivée du 'M' '6' 'N' .. donnera 6 dans N dès l'arrivée du 'N'
Transfert de plusieurs variables d'un tableau d'int . dit « transfert tableau » Un Le tableau comporte 120 int , dont 100 datas utiles , et 10 de paramètres.
Chaque variable est transmise en décimal codé ASCII , clôture par un H, I ou J Le tableau est fini par un caractère de clôture 'R' 'S' 'T' ( 3 tableaux possibles) Exemple : Tab[] comporte 120 cases (int) , de [0] à [100] ce sont les variables ,
de [110] à [120] ce sont les paramètres liées aux données à transmettre Exemple si V1[] porte 100 variables = 1 et 4 paramètres de [110] à [114] = à 100
On transmet : 100 x '1''H' + 10 x '0''H' + 4 x '1''0''0''H' + 6 x '0''H' et le 'R' de clôture Soit 100 variables 10 vides 4 paramètres 6 vides et la clôture à R
H indique : mise en mémoire intermédiaire et incrémentation du pointeur vers cette mémoire R indique : transfert du tableau intermédiaire vers utilisation, et remise à zéro du pointeur . Caractères ASCII réservés
Caractères minuscules ordres
de a > y .. Le 'z' est réservé pour le reset général Caractères en majuscules
0 à 9 sont les caractères ASCII réservés pour le Décimal
H , I , J caractère de clôture ..transfert d'un élément de tableau, + pointeur+
R , S, T caractère de clôture .. fin de transfert d'un tableau et utilisation, pointeur = 0 K L M N O P caractère de clôture du transfert d'un entier et utilisation directe .
Dans la VERSION 01/02, seule la carte microbit peut émettre des datas ou des ordres Elle est écrite ( pour le moment ) n'émet que le tableau V1[] , et les ordres a b c d e
Le programme processing est non limité .
Pc . Mac .linux
usb +
Datas et Ordres Microbit
K1 led0 Avec processing ou Mbed il est possible de
recevoir et de transmettre des caractères en ASCII sur une liaison série ( port COM) Ces caractères peuvent coder des ordres ou des valeurs ..
Dans les 2 environnements lorsqu'un caractère arrive sur le port COM il exécute un sous programme qui décode les données, le
protocole DUJ5 sert à organiser ce décodage . .