Vous êtes sur la page 1sur 14

Ateliers Python+Qt et Arduino : Recevoir une chane avec paramtre numrique en provenance du PC.

par X. HINAULT www.mon-club-elec.fr

Tous droits rservs 2013.


Document gratuit.
Ce support PDF d'atelier Python + Qt vous est o ert. Pour a!heter d'autres supports d'ateliers Python + Qt rende"#vous i!i $ http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php n!"AIN.#$%T %ous ave" !onstat une erreur & une !o'uille & ('hsite" pas ) nous le si*naler ) !ette adresse $ support+,on#!lu-#ele!. r

Truc d'utilisation : visualiser ce document en mode diaporama dans le visionneur PDF. Navigation avec les flches HAUT !A" ou la souris.
#n mode fen$tre% activer le panneau lat&ral vous facilitera la navigation dans le document. !onne lecture '

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 1 7 18

1. PyQt + Arduino : Recevoir une chane avec paramtre numrique en provenance du PC.
#ar X. HINAULT & 'an(ier )*+, & www.mon-club-elec.fr & Tou- .roit- r/-er(/-

Ce que nous allons faire


0an- ce tuto1 2e (ou- montre comment en(o3er une cha4ne .e caract5re- a(ec param5tre num/ri6ue au format chaine( ! 7 partir .8une interface #3%t et 7 ./co.er la cha4ne re9ue pour en e:traire le param5tre num/ri6ue .u c;t/ Ar.uino1 7 l8ai.e .e ma librairie Ar.uino Util-.

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 2 7 18

Ressources utilises
Ct PC : l inter!ace Python + Qt utili"e :

<n utili-era ici -implement le terminal -/rie = Ar.uino-like > /crit en #3%t :

Ct Arduino : le pro#ramme utili" :

<n utili-era un pro?ramme Ar.uino ba-/ -ur librairie Util- 6ue 28ai /crite et 6ui permet .8e:traire facilement le- param5tre- num/ri6ue- .8une cha4ne .e la forme chaine @(al+1 (al)1 (al,1 A1 (alnB Cette librairie .i-po-e .e plu-ieur- fonction- utile- facilitant ?ran.ement la r/ception .e cha4ne- pa--ant .e- (aleur- num/ri6ue- ou non en param5tre -oula forme chaine@:::B. Noter 6ue cha4ne e-t totalement param/trable1 ce 6ui offre une -ouple--e ma:imale et permet -urtout .e ./finir .e (/ritable= fonction- > 6ui -eront reconnue- en r/ception -ur le port -/rie.

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 3 7 18

$.

%atriel nce""aire pour cet atelier Python+Qt et Arduino

#our cet atelier1 (ou- aureD be-oin .e tout ou partie .e- /l/ment- -ui(ant- pour pou(oir r/ali-er le- e:emple- propo-/- :

De l'espace de dveloppement Arduino


L8e-pace .e ./(eloppement Ar.uino a--ocie : un or.inateur -ou- Ein.ow-1 "ac <- X ou Fnu/Linu: @UbuntuB a(ec le lo?iciel Ar.uino in-tall/ @(oir : http://www.ar.uino.cc/B un cGble UHI une carte Ar.uino UN< ou /6ui(alente.

.i-ponible cheD : http://-hop.-nootlab.com/ ou http://www.?otronic.fr/

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 8 7 18

&.

Pr'requi" : (n"tallation et pr"entation de la li)rairie *til" +une li)rairie ,,,.mon'clu)'elec.!r Le constructeur principal
Le con-tructeur principal -e nomme Util- et e-t .e la forme : Util- util- N #our la -uite1 nou- allon- utili-er une librairie 6ue 28ai /crite et 6ui permet .e facilement rece(oir une fonction a(ec un ou plu-ieurparam5tre- -ur le port -/rie. Cette librairie -8appelle UtilCette librairie (a permettre .e rece(oir .e- cha4ne- .e la forme chaine@(al+1 (al)1 (al,1 .. 1 (alnB et .8e:traire facilement le- param5trenum/ri6ue- re9u-. L8archi(e e-t .i-ponible ici : librairie UtilLa .ocumentation .e la librairie e-t ici : http://www.mon-clubelec.fr/pmwiki_reference_lib_ar.uino_per-o/pmwiki.php n!"ain.UtilT/l/char?er l8archi(e. au format Dip ou autre. L8e:traire J/rifier 6ue le nom .u r/pertoire .e la librairie e-t -trictement le mKme 6ue le nom .u fichier L.h ou L.cpp principal. Corri?er au be-oin. Ici le nom e-t "tils Copier/coller le r/pertoire .e la librairie .an- le r/pertoire librarie- .e (otre r/pertoire Ar.uino

La librairie utilise

Fonctions de la librairie
.onction" de rception de chane de caractre" "ur le port /rie :
Htrin? waitin?Htrin? @boolean .ebu?InB : r/ception .8une chaine -ur le port H/rie Htrin? waitin?Htrin? @B : r/ception .8une chaine -ur le port H/rie (oi. waitOorHtrin?@Htrin? -trin?OorEaitInB : attente .e la r/ception .8une chaine pr/ci-e -ur le port H/rie

Tlcharger la librairie

Documentation de la librairie

.onction" d analy"e de chane de caractre" :


Htrin? te-tIn-tructionHtrin? @Htrin? chaineTe-t1 Htrin? chaineMefInB: e:traction .8un param5tre te:te boolean te-tIn-tructionLon? @Htrin? chaineMeception1Htrin? chaineTe-t1 int nb#aram1 lon? param-InPQB : e:traction .8un ou plu-ieur- param5tre- entier-

Installation

.onction" de conver"ion de chane" :


lon? -trin?ToLon? @Htrin? chaineLon?B float -trin?ToOloat @Htrin? chaineOloatB

Code d'e emple


#include <Utils.h> Utils utils; // dclare objet racine d'accs aux fonctions de la librairie Utils String chaineIn; // dclare un String de rce tion !oid setup"# $ Serial.begin"%%&'((#; // Initialisation !itesse // Utiliser !itesse ide) ct *er)inal srie ort Srie

Melancer Ar.uino et (/rifier 6ue la librairie e-t pr/-ente .an- le menu #$etch % &mport'i(rary.

+ !oid loop"# $ //chaineIn,utils.-aitingString"false#; chaineIn,utils.-aitingString"#; Serial. rintln"./rduino a recu 0 . 1 chaineIn#; +

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 9 7 18

0.

1e monta#e 2 utili"er
0an- cet atelier1 nou- allon- faire 6uel6ue cho-e .e tr5- -imple : la carte Ar.uino .e(ra -implement Ktre connect/e au #C utili-/ @po-te fi:e1 netbook1 Ma-pberr3#i1 AB

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. : 7 18

3.

1e pro#ramme Arduino : Recevoir "ur le port "rie une chane avec un paramtre numrique :
La premi5re cho-e n/ce--aire ici e-t .8Ktre en me-ure .e rece(oir -ur le port -/rie une cha4ne au format chaine@(al+1 (al)B et .8e:traire automati6uement le(aleur- ain-i re9ue-. #lu-ieur- po--ibilit/- : -oit tout co.er .e D/ro1 -oit utili-er la librairie MunO ./27 pr/-ent/e par ailleur-1 -oit utili-er ma librairie Ar.uino Util- 6ui permet une ?e-tion -implifi/e .e la r/ception .e cha4ne a(ec param5tre- num/ri6ue-

Ce qu'on va faire ici!!!

Le- librairie- propo-/e- ici ne -ont pa- .e- librairie- -tan.ar.-1 et elle- .e(ront .onc Ktre in-tall/e- au pr/alable. "a librairie Util- e-t .i-ponible ici : http://www.mon-club-elec.fr/pmwiki_reference_lib_ar.uino_per-o/pmwiki.php n!"ain.Home#a?e

"nt#te dclarative
(nclu"ion de" li)rairie" utile"

<n commence par inclure la librairie Util<n ./clare une con-tante .e broche pour la LR0 utili-/e

4claration )roche utili"e 5aria)le" utile"

;n d!lare $ un o-<et =trin* pour la sto!>er la !ha0ne re?ue en r!eption un ta-leau de lon* destin ) sto!> les para,1tres re?us en r!eption $ la taille du ta-leau i@e le no,-re ,a@i,u, de para,1tres re?us.

#include <Utils.h> // inclusion de la librairie Utils utils; // dclare objet racine d'accs aux fonctions de la librairie Utils String chaine2ece tion,..; // dclare un String long ara)s345; // dclare un tableau de long 6 taille en fonction no)bre )ax ara)tres attendus

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. A 7 18

Fonction setup$%
Con!i#uration )roche utili"e

<n confi?ure la broche .e LR0 en -ortie <n initiali-e la communication -/rie 7 ++S)** bau.<n affiche un -imple me--a?e in(itant 7 -ai-ir une cha4ne .e la forme LR0@pwmB

(nitiali"ation "rie Code initial

!oid setup"# $ Serial.begin"%%&'((#; // Initialisation !itesse // Utiliser !itesse ide) cot *er)inal srie ort Srie

Serial. rintln".Saisir une chaine de la for)e chaine"xxx# a!ec xxx un no)bre entier 0.#; // )essage initial + // fin setu

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. B 7 18

Fonction loop$%
Rception de la chane "ur le port "rie

La librairie Util- int5?re la fonction waitin?Htrin?@B 6ui atten. -ur le port -/rie une cha4ne 2u-6u87 l8arri(/e .8un -aut .e li?ne @= Tn >B : la cha4ne re9ue e-t -tock/e .an- un ob2et Htrin? Rn-uite1 7 l8ai.e .8une fonction1 on te-te -i la cha4ne n8e-t pa- (i.e : on appelle alor- la fonction te-tIn-tructionLon?@B en lui pa--ant en param5tre : la cha4ne re9ue1 la racine .e la cha4ne 7 reconna4tre @la partie chaine( .8une chaine 7 reconna4tre .e la forme chaine@:::B B le nombre .e param5tre : + pour + param5tre1 ) pour )1 etc... le tableau .e -tocka?e : celui 6ue nou- a(on- ./clar/ en ./but .e pro?ramme

67traction de" paramtre" numrique"

la fonction ren(oie true -i l8anal3-e e-t correcte1 autrement .it 6u8une cha4ne chaine(valeur! a bien /t/ re9ue

!oid loop"# $ //chaine2ece tion,utils.-aitingString"true#;// a!ec debug chaine2ece tion,utils.-aitingString"#;// sans debug if "chaine2ece tion7,..# $ // si une chaine a t re8ue if"utils.testInstruction9ong"chaine2ece tion:.chaine".:%: ara)s#,,true# $ // si chaine chaine"!aleur# bien re8ue Serial. rintln"./rduino a recu le + // fin si testInstruction9ong,,true + // fin // si une chaine a t re8ue + // fin loo ara)etre 0 . 1 "String# ara)s3(5#;

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. C 7 18

8.

1 inter!ace Python + Qt utili"e : 9erminal "rie : Arduino li;e < crit avec PyQt
Cette interface e-t .i-ponible ici : terminal -/rie = Ar.uino-like > /crit en #3%t

" cution vous deve" disposer dans votre rpertoire des 3 i!hiers suivants Dadapter le no, ) votre situationE $
le fichier nom)ichier.ui corre-pon.ant au fichier ?/n/r/ initialement par %t0e-i?ner @ce fichier n8e-t pa- obli?atoire pour l8e:/cutionB le fichier p3thon nom)ichier.py corre-pon.ant au fichier ?/n/r/ 7 partir .u fichier nomOichier.ui a(ec la comman.e p3uicU et enfin le fichier p3thon contenant le co.e actif 7 proprement parler1 le fichier nom)ichier*ain.py

Lancer l8e:/cution .u co.e : -oit par -imple .ouble clic -ur le fichier nom)ichier*ain.py -oit en li?ne .e comman.e a(ec .+nom,ichier*ain.py @-e placer au pr/alable .an- le bon r/pertoire a(ec le comman.e cd chemin ...B ou .irectement .epui- l8/.iteur Fean3 a(ec le bouton 1 le fichier nom)ichier*ain.py /tant ou(ert.

Rsultat
<n obtient au lancement @remar6uer 6ue notre terminal H/rie -e lance mKme -i la carte Ar.uino n8e-t pa- connect/e1 ce 6ui n8e-t pa- le ca- a(ec le Terminal H/rie .e l8I0R Ar.uino...B :

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 10 7 18

Connecter une carte Ar.uino -ur le port UHI1 la pro?rammer a(ec le co.e ci-.e--ou- ou /6ui(alent... M/?ler le port1 le ./bit (oulu. Lor-6ue l8on appuie -ur le bouton Initiali-er1 cela .onne -i tout -e pa--e bien :

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 11 7 18

Rn-uite1 il -uffit .e -ai-ir .e- cha4ne- .an- le champ .e -ai-ie et .e cli6uer -ur = en(oi >. Hi (ou- utili-eD le pro?ramme = miroir -/rie > 6ue 2e (ou- propo-e ci-.e--ou-1 (ou- (o3eD 6u8Ar.uino ren(oie la cha4ne 6ui -8affiche .an- le champ .e r/ception :

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 12 7 18

Hi un probl5me -ur(ient1 on obtient @remar6uer 6ue le pro?ramme ne -8interrompt pa-... et 6u8un nou(el appui e-t po--ible...B :

Au final1 un co.e l/?er 6ui offre une fonctionnalit/ a--eD pui--ante en prati6ue.

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 13 7 18

=.

.onctionnement
#ro?rammer la carte Ar.uino a(ec le co.e ci-.e--uLancer l8interface #3thon V %t et -e connecter 7 la carte Ar.uino en r/?lant le ./bit -ur ++S)** et caract5re .e fin .e li?ne .8en(oi -ur =-aut .e li?ne Tn > A pr/-ent1 -ai-i--eD une cha4ne .e la forme chaine(-./! .an- le champ .8en(oi pui- clic -ur en(oi : (ou- .e(eD (oir alor- (oir le me--a?e Ar.uino in.i6uant la (aleur num/ri6ue ./co./e

.teliers Python + Qt et .rduino $ /e!evoir une !ha0ne ave! para,1tre nu,ri'ue en provenan!e du PC. Par 2. 34(.56T p. 18 7 18

Vous aimerez peut-être aussi