From version < 16.2 >
edited by Jean-Yves Dupertuis
on 25-07-2014, 11:10
To version < 11.6 >
edited by Jean-Yves Dupertuis
on 18-07-2014, 13:39
< >
Change comment: programme python

Summary

Details

Page properties
Content
... ... @@ -1,8 +6,3 @@
1 -{{box cssClass="floatinginfobox" title="**Contents**"}}
2 -{{toc /}}
3 -{{/box}}
4 -
5 -
6 6  = Commutation d'antenne via raspberry - py =
7 7  
8 8  Ce commutateur va permettre via internet de modifier l' antenne reliée au TX de la station EM.
... ... @@ -23,26 +23,10 @@
23 23  
24 24  
25 25  
26 -(% height="656" width="809" %)
27 -|=|=
28 -|Le premier programme que j’ai écrit, commu01.py, est un programme
29 -qui m’a aidé à réaliser des zones dans la fenêtre. Ce programme
30 -dispose de 3 zones. Une zone pour le titre, une pour l’image et la
31 -dernière n’est pas utilisée. J’utilise aussi la zone de l’image pour
32 -dessiner. Actuellement, l’image représente le boîtier du commutateur
33 -avec le fonctionnement interne dessiner dessus. Sur cette image,
34 -j’ai décidé d’afficher la position du commutateur en dessinant une ligne
35 -du point commun au canal actif. Pour quitter le programme, l’utilisateur
36 -utilisera la touche q du clavier.Le code du programme est annexé
37 -à la fin du document.\\|[[image:http://212.74.133.122:81/xwiki/bin/download/Hardware/SwitchAntenna/com_1.jpg?width=1580||alt="com_1.jpg"]]
38 -|La première modification que j’ai faite dans mon programme est la modification du canal sélectionner sur l’image. J’ai donc choisi, qu’à l’aide du clavier, l’utilisateur pourra faire bouger la sortie. Pour le faire,
39 -il pourra utiliser les touches a, b, c et d du clavier. La fenêtre en elle-même n’a pas changé. Pour faire bouger le commutateur, j’utilise Pygame pour dessiner des lignes. Il demande un point de départ, un point d’arrivée et une épaisseur. J’ai donc noté les coordonnées des points A, B, C et D lors de la création de l’image et j’ai finalement utilisé ces coordonnées dans le programme. Une fois une touche pressée, je
40 -supprime l’ancienne ligne en affichant l’image pardessus et je redessine la nouvelle ligne aux nouvelles coordonnées. Le code du programme (commu02.py) est annexé à la fin du document.| [[image:com_2.jpg]]
41 -| |
21 +[[image:PremFenetre.jpg]]
42 42  
43 43  
44 44  
45 -
46 46  [[image:ZoneAide.jpg]]
47 47  
48 48  
... ... @@ -69,7 +69,7 @@
69 69  
70 70  == Câblage du module ==
71 71  
72 -Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transite via des opto - coupleurs.
51 +Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transit via des opto - coupleurs.
73 73  
74 74  Une carte dédiée à cette protection a été développée.
75 75  
... ... @@ -95,31 +95,24 @@
95 95  
96 96  **Ne pas oublier de les relier au 12Vdc !**
97 97  
77 +
98 98  == Câble ==
99 99  
100 100  
101 101  [[image:cableCommAnt.jpg]]
102 102  
83 +
84 +
103 103  = Programmation Python =
104 104  
105 105  Voici le code source, vous pouvez le copier directement dans un IDLE Python 2.7.
106 106  
107 -Si vous ne l'avez pas, vous pouvez le télécharger sur le site Python [[https:~~/~~/www.python.org/downloads/>>url:https://www.python.org/downloads/]].
89 +Si vous ne l'avez pas, voici un installeur pour Windows. Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent
108 108  
109 -Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent
110 -
111 111  sur votre carte raspberry - py.
112 112  
113 -**Important !! **je suis parti du principe que le port **//I2C//** est fonctionnel sur votre raspberry - py.
114 114  
115 -**Si ce n'est pas le cas, seul la distribution sans le LCD fonctionnera !**
116 -
117 -
118 -
119 -== Source : ==
120 -
121 -{{box}}
122 -##{{{# auteur : Gilliand Loris
94 +# auteur : Gilliand Loris
123 123  # date : 02.06.14
124 124  # version 0.8
125 125  #
... ... @@ -161,7 +161,7 @@
161 161  
162 162  # classe de creation de cases
163 163  class Cases:
164 - def init(self,image,pos,port,init):
136 + def __init__(self,image,pos,port,init):
165 165   self.image = pygame.image.load(image).convert()
166 166   self.pos = pos
167 167   self.port = port
... ... @@ -359,7 +359,7 @@
359 359   endline = (293,225)
360 360  
361 361   souris = pygame.mouse.get_pos()
362 - souris_rect = souris[0],souris[1,[5,5]]
334 + souris_rect = [[souris[0],souris[1]],[5,5]]
363 363   souris_rect = pygame.Rect(souris_rect)
364 364  
365 365   for i in grp_cases:
... ... @@ -396,15 +396,4 @@
396 396   pygame.draw.line(zone2,noir,startline,endline,2)
397 397   screen.blit(zone2,(0,150))
398 398   pygame.display.update()
399 -}}}##
400 -{{/box}}
401 401  
402 -[[Fichier Py>>attach:commu08.py]]
403 -
404 -
405 -=== Distributions 'source' sans et avec LCD ===
406 -
407 -[[Distribution_sans_LCD.rar>>attach:Distribution.rar]]
408 -
409 -
410 -[[Distribution_lcd.rar>>attach:Distribution_lcd.rar]]
Distribution.rar
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -707.0 KB
Content
Distribution_lcd.rar
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -10.8 KB
Content
com_1.jpg
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -8.9 KB
Content
com_2.jpg
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -7.7 KB
Content
commu08.py
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.Dupertuis
Size
... ... @@ -1,1 +1,0 @@
1 -8.3 KB
Content
... ... @@ -1,278 +1,0 @@
1 -# auteur : Gilliand Loris
2 -# date : 02.06.14
3 -# version 0.8
4 -#
5 -# amelioration depuis 0.7 : integre un lcd qui peut commander les changements
6 -
7 -# importation bibilotheques
8 -import pygame, sys, time
9 -from pygame.locals import *
10 -import RPi.GPIO as GPIO
11 -from Adafruit_CharLCDPlate import *
12 -
13 -# initialisation fenetre et gpio
14 -pygame.init()
15 -GPIO.setmode(GPIO.BCM)
16 -
17 -# fonction qui change LA sortie active
18 -def change_sortie(ligne):
19 - BP1.etat = 0
20 - BP2.etat = 0
21 - BP3.etat = 0
22 - BP4.etat = 0
23 - BP1.affiche_etat(inactif)
24 - BP2.affiche_etat(inactif)
25 - BP3.affiche_etat(inactif)
26 - BP4.affiche_etat(inactif)
27 - time.sleep(0.25)
28 - if ligne == 'a':
29 - BP1.etat = 1
30 - BP1.affiche_etat(actif)
31 - elif ligne == 'b':
32 - BP2.etat = 1
33 - BP2.affiche_etat(actif)
34 - elif ligne == 'c':
35 - BP3.etat = 1
36 - BP3.affiche_etat(actif)
37 - elif ligne == 'd':
38 - BP4.etat = 1
39 - BP4.affiche_etat(actif)
40 -
41 -# classe de creation de cases
42 -class Cases:
43 - def __init__(self,image,pos,port,init):
44 - self.image = pygame.image.load(image).convert()
45 - self.pos = pos
46 - self.port = port
47 - self.etat = init
48 - self.rect = self.image.get_rect().move(self.pos)
49 - GPIO.setup(self.port,GPIO.OUT)
50 - GPIO.output(self.port,GPIO.LOW)
51 -
52 - def affiche_etat(self,indicateur):
53 - indicateur = pygame.image.load(indicateur).convert()
54 - indi_rect = indicateur.get_rect()
55 - indi_rect.centerx = self.rect.centerx - self.pos[0]
56 - indi_rect.centery = self.rect.centery - self.pos[1]
57 - if self.etat == 0:
58 - GPIO.output(self.port,GPIO.LOW)
59 - elif self.etat == 1:
60 - GPIO.output(self.port,GPIO.HIGH)
61 - self.image.blit(indicateur,indi_rect)
62 -
63 -# initialisation de la fenetre
64 -screen = pygame.display.set_mode((600,600))
65 -clock = pygame.time.Clock()
66 -# initialisation des couleurs
67 -rouge = (255,0,0)
68 -noir = (0,0,0)
69 -blanc = (255,255,255)
70 -vert = (0,255,0)
71 -bleu = (0,0,255)
72 -
73 -# initialisation des variables
74 -startline = (183,149)
75 -endline = (293,75)
76 -
77 -flag_canal = 0
78 -
79 -canal = [4,17,18,22,23,24,25,27]
80 -
81 -# definitions des zones
82 -zone1 = pygame.Surface((600,150))
83 -zone1.fill(bleu)
84 -
85 -zone2 = pygame.Surface((400,300))
86 -zone2.fill(bleu)
87 -
88 -zone3 = pygame.Surface((600,150))
89 -zone3.fill(bleu)
90 -
91 -zone4 = pygame.Surface((200,300))
92 -zone4.fill(bleu)
93 -
94 -# definitions des objets a afficher dans les zones
95 -# zone 1
96 -font = pygame.font.Font(None,60)
97 -titre1 = font.render("HB9EM",1,noir)
98 -titre2 = font.render("Commutateur d'antennes",1,noir)
99 -zone1.blit(titre1,(230,30))
100 -zone1.blit(titre2,(50,70))
101 -
102 -# zone 2
103 -commu = pygame.image.load("commu_antenne.bmp").convert()
104 -zone2.blit(commu,(50,50))
105 -
106 -# zone 3
107 -actif = "actif_commu.bmp"
108 -inactif = "inactif_commu.bmp"
109 -
110 -BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1)
111 -BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0)
112 -BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0)
113 -BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0)
114 -grp_cases = [BP1,BP2,BP3,BP4]
115 -BP1.affiche_etat(actif)
116 -BP2.affiche_etat(inactif)
117 -BP3.affiche_etat(inactif)
118 -BP4.affiche_etat(inactif)
119 -
120 -zone3.blit(BP1.image,BP1.rect)
121 -zone3.blit(BP2.image,BP2.rect)
122 -zone3.blit(BP3.image,BP3.rect)
123 -zone3.blit(BP4.image,BP4.rect)
124 -
125 -font = pygame.font.Font(None,20)
126 -canal_a = font.render("canal A",1,noir)
127 -canal_b = font.render("canal B",1,noir)
128 -canal_c = font.render("canal C",1,noir)
129 -canal_d = font.render("canal D",1,noir)
130 -zone3.blit(canal_a,(125,35))
131 -zone3.blit(canal_b,(225,35))
132 -zone3.blit(canal_c,(325,35))
133 -zone3.blit(canal_d,(425,35))
134 -
135 -# zone 4
136 -commande = font.render("Commandes :",1,noir)
137 -touche_a = font.render("Selection canal A : touche a",1,noir)
138 -touche_b = font.render("Selection canal B : touche b",1,noir)
139 -touche_c = font.render("Selection canal C : touche c",1,noir)
140 -touche_d = font.render("Selection canal D : touche d",1,noir)
141 -quitter = font.render("Quitter : touche q",1,noir)
142 -zone4.blit(commande,(10,20))
143 -zone4.blit(touche_a,(10,60))
144 -zone4.blit(touche_b,(10,80))
145 -zone4.blit(touche_c,(10,100))
146 -zone4.blit(touche_d,(10,120))
147 -zone4.blit(quitter,(10,200))
148 -
149 -# affichage des zones
150 -screen.blit(zone1,(0,0))
151 -screen.blit(zone2,(0,150))
152 -screen.blit(zone3,(0,450))
153 -screen.blit(zone4,(400,150))
154 -
155 -lcd = Adafruit_CharLCDPlate()
156 -lcd.begin(16,2)
157 -btn = ((lcd.SELECT, '', lcd.ON),
158 - (lcd.LEFT , 'Antenne 1' , lcd.ON),
159 - (lcd.UP , 'Antenne 2' , lcd.ON),
160 - (lcd.DOWN , 'Antenne 4' , lcd.ON),
161 - (lcd.RIGHT , 'Antenne 3' , lcd.ON))
162 -prev = -1
163 -temp = ''
164 -active = 'Antenne 1'
165 -act = ' active'
166 -lcd.message((active + act))
167 -while 1:
168 - clock.tick(30)
169 - for b in btn:
170 - if lcd.buttonPressed(lcd.SELECT):
171 - lcd.clear()
172 - lcd.message((active + act))
173 - time.sleep(0.25)
174 - if temp != '':
175 - active = temp
176 - temp = ''
177 - if active == 'Antenne 1':
178 - change_sortie('a')
179 - endline = (293,75)
180 - if active == 'Antenne 2':
181 - change_sortie('b')
182 - endline = (293,125)
183 - if active == 'Antenne 3':
184 - change_sortie('c')
185 - endline = (293,175)
186 - if active == 'Antenne 4':
187 - change_sortie('d')
188 - endline = (293,225)
189 - lcd.setCursor(0,0)
190 - lcd.message((active + act))
191 - lcd.setCursor(0,1)
192 - lcd.message(' ')
193 - if lcd.buttonPressed(lcd.RIGHT):
194 - temp = 'Antenne 3'
195 - lcd.setCursor(0,1)
196 - lcd.message(temp)
197 - if lcd.buttonPressed(lcd.DOWN):
198 - temp = 'Antenne 4'
199 - lcd.setCursor(0,1)
200 - lcd.message(temp)
201 - if lcd.buttonPressed(lcd.UP):
202 - temp = 'Antenne 2'
203 - lcd.setCursor(0,1)
204 - lcd.message(temp)
205 - if lcd.buttonPressed(lcd.LEFT):
206 - temp = 'Antenne 1'
207 - lcd.setCursor(0,1)
208 - lcd.message(temp)
209 -
210 - for event in pygame.event.get():
211 - lcd.setCursor(0,0)
212 - if event.type == pygame.QUIT:
213 - GPIO.cleanup()
214 - sys.exit()
215 - if event.type == pygame.KEYDOWN:
216 - if event.key == pygame.K_q:
217 - GPIO.cleanup()
218 - sys.exit()
219 - if event.key == pygame.K_a:
220 - active = 'Antenne 1'
221 - lcd.message((active + act))
222 - change_sortie('a')
223 - endline = (293,75)
224 - if event.key == pygame.K_b:
225 - active = 'Antenne 2'
226 - lcd.message((active + act))
227 - change_sortie('b')
228 - endline = (293,125)
229 - if event.key == pygame.K_c:
230 - active = 'Antenne 3'
231 - lcd.message((active + act))
232 - change_sortie('c')
233 - endline = (293,175)
234 - if event.key == pygame.K_d:
235 - active = 'Antenne 4'
236 - lcd.message((active + act))
237 - change_sortie('d')
238 - endline = (293,225)
239 -
240 - souris = pygame.mouse.get_pos()
241 - souris_rect = [[souris[0],souris[1]],[5,5]]
242 - souris_rect = pygame.Rect(souris_rect)
243 -
244 - for i in grp_cases:
245 - lcd.setCursor(0,0)
246 - if souris_rect.colliderect(i.rect.move((0,450))):
247 - if pygame.mouse.get_pressed() == (1,0,0):
248 - if i.port == canal[1]:
249 - active = 'Antenne 1'
250 - lcd.message((active + act))
251 - change_sortie('a')
252 - endline = (293,75)
253 - if i.port == canal[2]:
254 - active = 'Antenne 2'
255 - lcd.message((active + act))
256 - change_sortie('b')
257 - endline = (293,125)
258 - if i.port == canal[3]:
259 - active = 'Antenne 3'
260 - lcd.message((active + act))
261 - change_sortie('c')
262 - endline = (293,175)
263 - if i.port == canal[4]:
264 - active = 'Antenne 4'
265 - lcd.message((active + act))
266 - change_sortie('d')
267 - endline = (293,225)
268 -
269 - zone3.blit(BP1.image,BP1.rect)
270 - zone3.blit(BP2.image,BP2.rect)
271 - zone3.blit(BP3.image,BP3.rect)
272 - zone3.blit(BP4.image,BP4.rect)
273 - screen.blit(zone3,(0,450))
274 - zone2.blit(commu,(50,50))
275 - pygame.draw.line(zone2,noir,startline,endline,2)
276 - screen.blit(zone2,(0,150))
277 - pygame.display.update()
278 -