Un Raspberry Pi este un computer de dimensiunea unui card proiectat in scop educational. Scopul celui ce a cr eat acest dispozitiv, Eben Upton, a f… [627102]

2. Hardware

2.1 Raspberry Pi 3 Model B+

Fig.1 Raspberry Pi 3 Model B+

Un Raspberry Pi este un computer de dimensiunea unui card proiectat in scop
educational. Scopul celui ce a cr eat acest dispozitiv, Eben Upton, a f ost de a crea un device low –
cost care sa ajute la imbunatatirea cunostintelor de programare si hardware la nivel
preuniversitar. Dar datorita dimensiunilor reduse si pretului accesibil acesta a fost folosit de
electr onisti pentru a dezvolta proiecte mai complexe ce nu pot fi realizate pe un microcontroller
de baza ( ca de exemplu Arduino ).
Raspberry Pi este mai incet ca un computer sau laptop modern dar este un dispozitiv ce
ruleaza in totalitate pe Linux si are toate aplicatiile ce le are un calculator dar la putere mai mica.
Modelul de Raspberry Pi folosit in cadrul acestei licente este Raspberry Pi 3 Model B+
iar el cuprinde urmatoarele specificatii:
 Broadcom BCM2837B0, Cortex -A53 (ARMv8) 64 -bit SoC @ 1.4GHz
 1GB LPDDR2 SDRAM
 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
 Gigabit Ethernet over USB 2.0
 40 de pini GPIO
 Intrare HDMI
 4 porturi USB 2.0
 Port CSI camera pentru conectare unei camere Raspber ry Pi

 Port display DSI pentru conectare Raspberry Pi la un display touchscreen
 Output stereo cu 4 poluri si port video
 Port Micro SD pentru incarcarea sistemului de operare si stocarea datelor
 5V/2.5A DC power input
 Suport Power -over-Ethernet (PoE)
Cu releas e-ul modelului Raspberry Pi 3 , compania a facut un pas important in fata, noua
arhitectura hardware este bazata pe un proces or de 1.4 GHz 64 -bit ARMv8, to ti predecesorii
sai avand procesoare bazate pe o arhitectura de 32 bit. Insa chiar daca noile procesoare sunt
pe 64 bit, sistemele de operare ( aici ma refer in princ ipal la Raspbian ) opereaza pe o
arhitectura de 32 biti.
Pentru a configura Raspberry Pi -ul si pentru a instala sistemul de operare este nevoie de
urmatoarele componente:
 Tastatura si mouse
 Display
 Alimentator de 2.5 A, 5.1V
 Card MicroSD
Pentru a instala sistemul de operare cea mai usoara metoda este de a descarca un installer
de pe site -ul oficial al Raspberry Pi numit NOOBS. Fisierul d escarcat este dezarhivat si
este pus pe cardul MicroSD care urmeaza a fi introdus in Raspberry Pi. La pornire vi se
vor afisa sistemele de operare ce pot fi instalate si va fi selectat cel dorit.

Fig.2 Selectare OS pentru a instala

In cazul proiectului meu am folosit sistemul de operare Raspbian, care este un OS gratis bazat in
intregime pe Debian. Dupa ce optiunea de a instala Raspbian a fost bifat a se selecteaza butonul de
Install iar OS -ul va fi instalat pe cardul MicroSD , la urmatoare bootare noul sistem de operare va fi
pornit.
Raspberry Pi -ul are multe metode de a conecta lucruri la el, ca de exemplu porturile USB, portul
HDMI, portul de conexiune pentru camera si conexiunea la diferite interfete prin intermediul
conectorilor GPIO ( General Purpose Input/Output ).
Conectorii GPIO sunt un grup de pini aflati la mar ginea placii Raspberry Pi. In primele modele,
placile aveau 26 de pini GPIO, dar de la modelul B+ incolo toate placile au 40 de pini. Conectorii GPIO
ofera acces la urmatoarele:
 Alimentare
 Pini digitali de intrare/iesire
 Bus I2C
 Bus SPI
 Bus serial UART

Fig.3 Maparea pinilor GPIO 1

Avem 8 pini digitali de intrare/iesire disponibili, acestia pot fi folositi pe ntru a aprinde sau opri
dispoziti ve sau pentru a detecta starea dispozitivelor. F iecare pin poate fi configurat in mod
independent in functie de operatiile de intrare sau iesire, in figura de mai sus acesti pini au fost numiti in
ordine de la D0 la D7.
Bus-ul I2C ( Inter -Integrated Circuit ) este o interfata de viteza redusa care poate conecta mai
multe dispozitive sau senzori simplii prin interfata 2 -wire fara a avea nevoie de o frecventa de clock
separata. De obicei acest bus opereaza la viteze de 100kbit/s.
SPI-ul (Serial Peripheral Interface ) este conexiune seriala sincrona care co munica in ambele
sensuri intre un dispozitivul master si slave. Poate fi folosit pentru a accesa senzori mai complexi sau
drivere de display. Dispozitivul master (Raspber ry Pi-ul in acest caz ) asigura sincronizarea prin semnalul
de clock SCLK aflat la pinu l 23 (GPIO11 ). Informatia este transmisa prin MOSI (master -out-slave -in), pinul
19, si prin MISO (master -in-slave -out), pinul 21.
Bus-ul UART ( Universal Asynchrounus Receiver and Transmitter ) este o modalitate de a
comunica cu dispozitive externe printr -o conexiune seriala, si se foloseste des pentru a accesa
informatiile din modulele de GPS.

2.2 Ecran LCD pentru Raspberry Pi de 3.5'' cu Touchscree n

Fig.4 Ecranul LCD utilizat 1

Modelul de diplay folos it in aceasta lucrare este SainSmart 3.5 inch TFT LCD. Acesta
este un display touchscreen cu rezolutie de 320×480 pixeli, culoare pixelilor avand 16 biti . El
este destinat special pentru a fi utilizat impreuna cu Raspberry Pi -ul.
Pentru a folosi acest display trebuie realizata o configurare a Ras pberry -ului, in acest
scop trebuie rulat e urmatoarele comenzi in consola micro controllerului:
sudo rm -rf LCD -show
git clone https://github.com/goodtft/LCD -show.git
chmod -R 755 LCD -show
cd LCD -show/
sudo ./LCD35 -show

Pentru a putea rula aceste comenzi trebuie sa aveti o conexiune la internet pentru a putea
accesa respository -ul de git unde se gaseste driver -ul pentru acest display. La restartarea
Raspberry -ului afisarea nu se va mai realiza prin conexiunea HDMI ci prin cei 26 de pini prin
care display -ul LCD este conectat la Raspberry P i.
Daca se doreste revenirea la afisarea prin intermediul portului HDMI se va executa :

cd LCD -show/
sudo ./LCD -hdmi

2.3 Senzor de miscare PIR ( Passive Infra -Red)
Fundamental toti senzorii de acest tip functioneaza dupa acelasi principiu, detecteaza
prezenta unui corp ce emite caldur a pana la o anumita distanta, asadar ele sunt folosite in general
pentru a declansa alarme.

Fig.5 Senzor de miscare PIR 1

Toate obiectele radiaza caldura insa nu putem vedea acest lucru deoarece acestea deorece
aceste unde se afla in spectrul infrarosu, care este invizibil ochiului uman. Aceste unde pot fi
detectate insa cu ajutorul unor dispozitive electronice create in acest scop , ca de exemplu
receiver -ul televizorului care detecteaza energ ia emisa de telecomanda cand un buton este apasat.
Senzorii de miscare PIR folositi in alarme de securitate si iluminat automat sunt concepute
pentru a detecta caldura emisa de oameni sau animale. Termenul de pasiv este folosit deoarece
senzorii nu radiaza deloc energie pentru a detecta obiectele, ele doar detecteaza radiati a infrarosu
emisa de alte obiecte. Aceasta este o diferenta majora f ata de senzorii ultrasonici si radar, care se
bazeaza pe detectarea reflexiei de la obiectele pe care undele emise de senzori le ating.
Senzorii de miscare PIR trebuie sa fie facuti in as a fel incat sa nu prezinte erori la
variatiile de temperatura din camera. Acestia se ajusteaza la temperatura obiectului spre care se
orienteaza, fie el un perete sau podea, in functie de unde est e pozitionat. Cand un obiect care are
o temperatura mult mai mare decat temperatura de referinta trece prin fata senzorului, senzorul
se declanseaza.
Senzorul utilizat de mine este HC-SR501 , el prezinta 3 fire, una de masa, una de
alimentare si unul de output care este conectat la pinii GPIO a Raspberry Pi-ului. Acesta senzor
are urmatoarele specificatii:
 Tensiune de intrare : 4.5V – 20V
 Curent absorbit : <50µA
 Output Digital : 3.3V ( in stare High)
 Output Digital : 0V ( in stare Low)
 Temperatura de functionare : -15°C to 70°C
 Delay : 0.5 – 200 Seconds
 Unghi de detectie : 100° Con
 Distanta de detectie: 5m – 7m

3. Tehnologii utilizate
3.1. Limbajul JAVA
Java este un limbaj de programare creat de James Gosling de la Sun Microsystems in
1991. Obiectivul acestui limbaj este de a scr ie un program o data si de a -l putea rula pe mai
multe si steme de operare. Pri mul r elease al versiunii Java 1.0 a fost in 1995. In momentul de fata
Java este detinut de compania Oracle. De alungul timpului au existat mai multe versiuni de Java
in momentul de fata ultima versiune este Java 1.8 cunoscut si ca Java 8.

Java consta dintr -un limbaj de programare, un compilator, librariile core si un mediu de
rulare ( Java Virtual Machine ). Mediul de rulare Java permite dezvoltatorilor software sa scrie
programele si in alte limbaje de programare in afara de Java iar ele vor rula de asemenea in Java
Virual Machine.

Limbajul Java a fost proiectat cu urmatoarele proprietati:
 Independent de platforma : programele Java utilizeaza Java Virtual Machine ca si
o abstractiz are si nu acceseaza sistemul de operare in mod direct. Acest lucru face
ca Java sa fie usor portabil. Un program Java poate rula fara a necesita modificari
pe mai multe platforme.
 Limbaj de programare orientat pe obiecte: C u exceptia tipurilor de date primitive
(int, long, short, etc. ) , toate elementele din Java sunt obiecte.
 Limbaj de programare puternic restrictiv: Java este un limbaj restrictiv, ca de
exemplu toate variabilele trebuie sa fie predefinite si conversia obi ectelor este
relativ stricta, acestea trebuie realizate in cele mai multe cazuri de programator.
 Limbaj interpretat si compilat: codul sursa Java este transferat intr -un format de
bytes care nu este dependent de platforma pe care acesta ruleaza. Aceste
instructiuni de bytes vor fi interpretate de Java Virtual Machine (JVM ). JVM -ul
contine un compilator -hotspot care traduce intructiunile din bytes in instructiuni
de cod nativ .
 Management automat al memoriei: Java controleaza alocarea si dealocarea
memoriei pentru obiectele ce sunt create. Programul nu are acces direct la
memorie. Acesta are un garbage -collector ce sterge obiectele in mod automat .

In aceasta lucrare am folosit limbajul Java atat pentru a programa Raspberry Pi -ul cat si
pentru a programa aplicatia pentru telefonul ce ruleaza pe Android. Pentru a programa Raspberry
Pi-ul am utilizat ca si mediu de dezvoltare ( IDE) Eclipse -ul pe care am instalat lib raria Pi4J
pentru a putea realiza comunicarea cu pinii GPIO de pe placa. Pentru a programa pe Android am
utilizat Android Studio care utilizeaza de asemenea ca limbaj de programare Java .
Libraria Pi4J a fost creata de Robert Savage si este utilizata pentru a interactiona cu pinii
GPIO de pe pl aca Raspberry Pi. Comunicarea cu pinii GPIO nu este realizata pur Java ci
utlizeaza o librarie nativa dezvoltata de Gordon Henderson. Aceasta librarie este incapsulata in
libraria Pi4J si este utilizata automat.

3.2 Baza de date MariaDB
MariaDB este o baza de data cu sistem de management ralational ( DBMS – relational
database management ) care este direct compatibila cu tehnologia bazelor de date MySQL . A fost
creat de dezvoltatori i ce lucrau la MySQL ca un raspuns la cumpararea MySQL -ului de catre
Oracle.
MariaDB este baza pe SQL si suporta procesarea de date ACID -style care garanteaza
consistenta, izolarea si durabilitatea tranzactilor. Principalul obiectiv al acestei baze de date
open -source a fost sa fie un inlocuitor perfect pentru MySQL, ca rezultat utilizatorii pot schimba
intre cele 2 baze de date fara a observa diferente.
Desigur ca exista si niste probleme de compatibilitate intre cele 2 v ersiuni de baza de
date, ca de exemplu in versiunile MariaDB peste 10.1, baza de date stocheaza informatiile JSON
intr-un format diferit fata de MySQL 5.7.
Pe Raspberry Pi am folosit ca baza de date MariaDB in loc de MySQL in prin cipal
datorita problemelor de performanta pe care MySQL -ul le are, MariaDB este o baza de date mult
mai eficienta, mai jos e o figura cu un benchmark care compara perf ormantele intre cele 2 baze
de date.

Fig.6 Benchmark de performanta MariaDB – verde , MySQL – rosu

Pentru a instal MariaDB pe Raspberry Pi trebuie rulat:
sudo apt -get install mariadb -server
In timpul instalarii MariaDB se va configura in mod automat si va cere doar sa introdu ceti user –
ul si parola pentru contul de administrator. Dupa ce instalarea s -a finalizat co nectarea se face
identic ca la MySQL cu comanda:
mysql -u user -p

3.3 Hibernate
Hibernate es te un proiect destinat pentru a oferi o solutie pentru ,amagementul datelor
persistente in Java. Aceasta media za interactiunea dintre aplicatie baza de date relati onala . Nu
este necesar sa respescti multe reguli specifice Hibernate atunci cand concepi proiectul si clasele
persistente, asadar Hibernate se integreaza usor in noile aplicatiile fara nevoia de schimbari
majore in restul aplicatiei.
Aproape toate aplicatiile necesita date persistente, persistenta este unul dintre conceptele
fundamentale in crearea unei aplicatii. Daca un si stem informational nu ar salva datele atunci
cand acesta este stins atunci nu ne -ar fi de mare ajutor. Atunci cand vorbim de persistenta in
Java, ne referim la stocarea datelor in baza de date relationala folosind SQL.

Sistemul de management al baze lor de date relationale nu este specific Java, sau nu este
specifi unei aplicatii. Acest principiu important este cunoscut ca independenta datelor, cu alte
cuvinte , infor matia traieste mai mult decat traieste aplicatia. Tehnologia relationala asigura o
metoda de a impartasi informatia intre mai multe aplicatii sau intre mai multe tehnologii ce
formeaza o aplicatie.
In aplicatiile orientate pe obiecte, persistenta permite obiectelor sa t raiasca mai mult
decat aplicatia ce a creat -o. Starea obiectului poate fi salvata pe disk si un obiect identic va putea
fi recreat atunci in viitor. Aceasta nu e este limitata la un singur obiect, intregi retele de obiecte
interconectate pot fi facute per sistent si recreate mai tarziu intr -un nou proces. Cele mai multe
obiecte nu sunt persistente, acestea sunt obiecte tranzitorii care au durata de viata cat a procesului
care le -a creat. Aproape toate aplicatiile Java contin o combinatie de obiecte tranzito rii si
persistente, asadar avem nevoie de un subsistem care sa gest ioneze informatiile persistente, acest
subsistem este numit ORM ( Object relational mapping ).

Fig.7 Schema functionare Hibernate
ORM reprezinta persistenta automata a obiectelor in aplicatiile Java in tabelele din bazele
de date relationale, utilizand metadata care descrie relatiile dintre obiecte si baza de date. ORM
reprezinta in esenta transformarea datelor dintr -o reprezentare in alta. Aceasta implica niste
probleme de performanta.
Pentru a putea rula Hibernate in cadrul proiectului prima oara trebuie incluse in proiect
librariile Hibernate care se gasesc pe pagina oficiala. De asemenea trebuie inclus in proiect si
driver -ul specific bazei d e date pe care se va lucra, in cazul acestei lucrari MariaDB. Dupa ce
acestea au fost incluse in proiect trebuie creat un fisier numit hibernate.cfg.xml care contine
informatiile de conexiune la baza de date si maparea claselor persistente.

Fig.8 Fisierul hibernate.cfg.xml folosit in aplicatie

In tagul “connection.url ” trebuie scris care driver pentru co nexiunea la baza de date in
cazul acestei lucrari mariadb. Dupa aceea trebuie specificat IP -ul impreuna cu portul la care se
afla baza de date . Dupa aceea trebuie mentionat user -ul si parola care se utilizeaza pentru
autentificarea la MariaDB. Dialectul selectat este specific MariaDB de asemenea poate fi utiliziat
si MySQL Dialect insa pot exista anumite erori datorita diferentelor mici intre MySQL si
MariaDB. “hibernate.hbm2ddl.auto ” reprezinta modul cu care se va lucra cu baza de date, in
modul update datele vor fi actualizate iar in modul create tabelele vor fi recreate la fiecare rulare
a aplicatiei. In final se afla maparea claselor obiectelor care vor fi persistate.
Pentru a crea un obiect persistent trebuie creata o clasa care sa aiba ca adnota re @En tity.
Prin aceasta adnotare Hibernate ca aceasta clasa apartine unui obiect care va fi persistat. Trebuie
respectate anumite restrictii impuse:
 obiectul trebuie sa contina o variabila de tip long numita id care trebuie sa aiba o valoare
unica pentru fiecare instanta a obiectului , acesta este marcat cu adnotarea @Id . Pentru a
asigura unicitatea obiectului de obicei se adauga adnotarea @GeneratedValue( strategy =
GenerationType.auto ), asigurand in acest mod ca obiectele nu au acelasi ID .
 pentru fiecare v ariabila declarata trebuie sa avem un getter si un setter, daca nu avem
acea variabila nu va fi persistata in cadrul obiectului.
 trebuie sa avem un constructor gol pentru initializarea obiectului. Hibernate cand obtine
obiectul din baza de date il creaza cu acest contructor gol iar apoi prin inter mediul setter –
lor ii va seta toate proprietatile.
 de asemenea trebuie tinut cont de anumite cuvinte cheie care depind de baza de date, ca
de exemplu MariaDB are cuvintele user, pass word rezervate iar daca se declara o entitate
cu variabila user acesta va genera o eroare la rulare
Atunci cand un obiect de tip persistent este salvat daca tabelul cu numele obiectului nu
exista atunci acel tabel va fi creat. Variabilele din cadr ul obiectului vor fi regasite in

coloanele din tabelul creat. Numele coloanei este la fel cu numele variabile din obiect daca se
doreste schimbarea numelui coloanei fara a schimba numele variabilei se poate utiliza
adnotarea @Column( name = “numeleDorit ”).
Pentru a putea gestiona obiectele persistente trebuie obtinut un SessionFactory , acesta
este un obiect care folosind configurarile Hibernate -ului permite crearea unui Session.
Session -ul este un obiect care crea za legatura propriu -zisa cu baza de date. Acest obiect este
instantiat de fiecare data cand avem nevoie sa realizam o operatie. Acest obiect aceasta
sesiune trebuie inchisa dupa fiecare data si in caz de este nevoie de o noua operare aceasta se
va obtine d in SessionFactory ( acesta il instantiam doar o data la inceput si-l folosim pana
aplicatia este inchis a).
Daca dorim sa persistam un obiect in baza de date trebuie sa deschidem in cadrul sesiunii
si o tranzacti e (aceasta este similara mediului SQL ). Toate operatiile ce se efectueaza dupa ce
tranzactia a fost inceputa vor fi executate in momentul in care se apeleaza functia commit().
In acest mod se asigura cu toate operatiile sunt efectuate si nu raman operatii nefectuate ( ori
se efectueaza toate ori niciuna, acesta este principiul tranzactiei ).

3.4 Android
Android -ul este un stack software pentru dispozitivele mobile ce include un sistem de
operare, middleware si aplicatii cheie. Dezvoltatorii au acces la toate API -urile de baza alea
frameworkului. Arhitectura aplicatiei este de asa natura incat ca sa se po ata reutiliza
componentele intr -un mod facil.

Similar Posts