Documente Academic
Documente Profesional
Documente Cultură
Partea teoretică
În această lucrare se dorește implementarea funcțiilor de intrare și ieșire (GPIO - General Purpose Input
Output) pentru Raspberry Pi. Prin folosirea mediului Python, se vor realiza aplicații care rulează repetitiv, de
un număr finit de ori sau în buclă infinită.
Sistemul Raspberry Pi conține un conector cu 40 de pini (din care 26 de pini GPIO), numit P1 (Fig. 1), a cărui
structură este prezentată în Tabel 1. Așa cum se va vedea în această lucrare dar și în cele următoare,
semnificația pinilor depinde de numerotarea folosită pentru pini.
1
1.Python-probleme generale
Python este un limbaj de programare de tip scriptic sau interpretor, prin aceea că nu necesită compilare
înaintea execuției. În acest scop există un interpretor, care citește și execută fiecare linie din fișierul program.
Limbajul Python are multe elemente similare cu limbajul C:
-instrucțiunile de control for, while, if, else
-posibilitatea de afișare folosind funcția printf
Câteva diferențe în raport cu limbajul C
-corpul unei funcții sau al unei instrucțiuni ca de exemplu while este reprezentat de liniile care au aceeași
indentare (același număr de spații) față de coloana în care este definită instrucțiunea, adică nu se folosesc
simbolurile {};
-variabilele nu trebuie declarate la începutul programului, pot fi definite oriunde în program;
-nu este necesară definirea funcției main(), aceasta începe după liniile din cadrul fișierului program în care
se importă anumite module (a se vedea exemplele de mai jos) sau unde se declară funcții (programele
prezentate nu conțin funcții).
Toate aceste operații pot fi identificate în cele două programe prezentate în continuare.
P1. În presupunerea că la pinii GPIO24 și GPIO25 sunt conectate două led-uri, programul prezentat realizează
comanda alternativă a acestor pini cu nivelurile 1 și 0, respectiv 0 și 1, fiecare comandă fiind urmată de o
pauză, care permite ca ochiul uman să sesizeze cele două stări (stins, aprins) ale led-urilor. Programul rulează
în buclă infinită. Apăsarea tastelor Ctrl-C permite oprirea rulării programului.
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) #se selecteaza numerotarea BCM
GPIO.setup(24,GPIO.OUT) #pinul 24 este iesire
GPIO.setup(25,GPIO.OUT) #pinul 25 este iesire
2
try:
while True: #bucla infinita
GPIO.output(24,1) #pinul 24 este pe 1 logic; se poat folosi si True
GPIO.output(25,0) #pinul 25 este pe 0 logic; se poate folosi si False
time.sleep(0.15)
GPIO.output(24,0)
GPIO.output(25,1)
time.sleep(0.85)
Instrucțiunea try este în strânsă legătură cu instrucțiunea except (excepție sau eveniment care va întrerupe
cursul normal al programului). Dacă nu se apasa combinația de taste Ctrl-C, se execută instrucțiunile dintre
try și except. Dacă se apasă combinația de taste Ctrl-C, se execută acțiunea corespunzătoare lui except
(adică, GPIO.cleanup()), după care programul se oprește din execuție.
Pentru editarea programului se poate folosi comanda (fișierul respectiv va fi salvat în directorul curent)
Rularea în Python se poate face cu comanda (în presupunerea că fișierul nume_program se află în directorul
curent)
P2. În continuare, se dorește introducerea unei facilități suplimentare în programul anterior: utilizarea funcției
de intrare pentru citirea nivelului logic aplicat pinului 23, și afișarea unui mesaj corespunzător pe monitor. În
acest scop, la pinul 23 se conectează un buton cu revenire care poate aplica nivelul 1 sau 0 (a se vedea lucrarea
precedentă). Programul este prezentat în continuare.
while True:
După rularea unui program pe ecran este afișat conectorul simulat din Fig. 3 (corespunzător conectorului real
de pe placă, din Fig.1), dacă programul respectiv conține următoarea linie: import RPi.GPIO as GPIO
. Pe acest conector simulat se poate observa starea fiecărui pin folosit în program prin colorarea diferită a
acestora în funcție de nivelul logic primit prin program.
Desfășurarea lucrării
1. Se studiază programul P1.
2. Se consideră că LED-urile sunt conectate la pinii GPIO24 și GPIO25, conform numerotării BCM (vezi
Tabel 1). Care sunt pinii din conectorul GPIO al plăcii Raspberry Pi utilizați în program, conform numerotării
fizice?
3. Se studiază subcapitolul despre simulatorul python pentru Raspberry Pi.
4. Folosind simulatorul python pentru Raspberry Pi se scrie și se rulează programul P1.
5. Se fac următoarele modificări în program:
a) ambele LED-uri să fie aprinse, respectiv stinse, această succesiune repetându-se periodic;
b) se modifică timpii cât cele două LED-uri sunt aprinse, respectiv stinse; în acest fel se poate modifica atât
perioada (frecvența) aprinderii cât și raportul dintre intervalul în care LED-urile sunt aprinse în raport cu
perioada;
6. Se dorește ca programul să fie executat de un număr finit de ori. Pentru aceasta:
a) linia while True: se înlocuiește cu for i in range(1,10):
b) liniile Try: și except KeyboardInterrupt: se șterg; ca o consecință, linia for i in
range(1,10): trebuie aliniată la stânga cu primele linii de program;
c) linia GPIO.cleanup()trebuie aliniată și ea la stânga cu liniile de program precedente;
d) de câte ori se execută programul?
7. Se studiază programul P2.
4
8. Se consideră un LED conectat la pinul GPIO24 și un buton conectat la pinul GPIO23, conform numerotării
BCM (vezi Tabel 1). Care sunt pinii din conectorul GPIO al plăcii Raspberry Pi utilizați în program, conform
numerotării fizice?
9. Se rulează programul P2. Pentru a simula apăsarea butonului se bifează cu mouse-ul pinul corespunzător
acestuia. Ce se observă?
Observație: - la fișierele încărcate pe Campus Virtual pentru cerințele 4, 5, 9 se inserează câte un printscreen
al conectorului P1 simulat din timpul rulării programului respectiv, din care să se vadă starea pinilor; pentru ca
imaginea să fie cât mai mică se decupează din printscreen doar conectorul (se poate face în Paint) și imaginea
se salvează în format jpg;
5