Coffee on time – Aplicaț ie mobilă & IOT COORDONATOR ȘTIINȚ IFIC STUDENT Andrei Pă un Radu Ionuț Alexandru Bucuresti 2017 2 Cuprins 1. Introducere… [619269]
1
Universitatea din București
Facultatea de Matematică și Informatică
LUCRARE DE LICENȚĂ
Coffee on time – Aplicaț ie mobilă & IOT
COORDONATOR ȘTIINȚ IFIC STUDENT: [anonimizat] 2017
2
Cuprins
1. Introducere ………………………….. ………………………….. ………………………….. ………. 4
1.1 Scurtă prezentare ………………………….. ………………………….. ……………………….. 4
1.2 Justificare si motivare ………………………….. ………………………….. ………………….. 5
2. Hardware folosit ………………………….. ………………………….. ………………………….. …..6
2.1 Raspberry Pi ………………………….. ………………………….. ………………………….. …..6
2.1.1 Procesor ………………………….. ………………………….. ………………………….. …..6
2.1.2 Wireless ………………………….. ………………………….. ………………………….. …..7
2.1.3 Bluetooth ………………………….. ………………………….. ………………………….. ….7
2.1.4 Antena ………………………….. ………………………….. ………………………….. …….. 8
2.1.5 GPIO ………………………….. ………………………….. ………………………….. ………. 9
2.2 Periferice ………………………….. ………………………….. ………………………….. …….. 10
2.2.1 LED ………………………….. ………………………….. ………………………….. ………. 10
2.2.2 Rezistențe ………………………….. ………………………….. ………………………….. 11
2.2.3 Releul ………………………….. ………………………….. ………………………….. …….12
2.2.4 T -Cobble Plus ………………………….. ………………………….. ……………………… 12
2.2.5 USB ………………………….. ………………………….. ………………………….. ………. 13
2.2.6 Microfon USB ………………………….. ………………………….. ……………………… 13
2.2.7 Fierbător ………………………….. ………………………….. ………………………….. …14
3. Tehnologi fo losite ………………………….. ………………………….. ………………………….. .15
3.1 Raspbian ………………………….. ………………………….. ………………………….. …….. 15
3.2 Java ………………………….. ………………………….. ………………………….. ……………. 15
3.2.1 Obiecte ………………………….. ………………………….. ………………………….. …..17
3.2.2 Adnotări ………………………….. ………………………….. ………………………….. ….20
3.2.3 Thread -uri ………………………….. ………………………….. ………………………….. .21
3.2.4 Gradle ………………………….. ………………………….. ………………………….. ……22
3.3 Androi d ………………………….. ………………………….. ………………………….. ……….. 22
3.3.1 Prezentare Generală ………………………….. ………………………….. ……………. 22
3.3.2 Funcționalități Android ………………………….. ………………………….. ………….. 23
3.3.3 Activități ………………………….. ………………………….. ………………………….. ….24
3.3.4 Servicii ………………………….. ………………………….. ………………………….. ……25
3.3.5 Permisiuni ………………………….. ………………………….. ………………………….. .26
3
3.3.6 Manifest ………………………….. ………………………….. ………………………….. ….27
3.3.7 Layout ………………………….. ………………………….. ………………………….. ……27
3.3.8 Evenimente ………………………….. ………………………….. ………………………… 28
3.3.9 Dialog ………………………….. ………………………….. ………………………….. …….29
3.3.10 Notificări ………………………….. ………………………….. ………………………….. .29
3.3.11 Toast ………………………….. ………………………….. ………………………….. ……30
3.3.12 Media Player ………………………….. ………………………….. …………………….. 30
3.4 Python ………………………….. ………………………….. ………………………….. ………… 32
3.5 Apache Server ………………………….. ………………………….. ………………………….. 34
3.6 PHP ………………………….. ………………………….. ………………………….. ……………. 35
3.7 Bash scripting ………………………….. ………………………….. ………………………….. .36
3.8 CMU Sphinx ………………………….. ………………………….. ………………………….. …37
3.9 Cron job scheduler ………………………….. ………………………….. …………………….. 38
3.10 Bing Speech API ………………………….. ………………………….. ……………………… 39
4. Structuri de date ………………………….. ………………………….. ………………………….. …40
4.1 Vectori ………………………….. ………………………….. ………………………….. ………… 40
4.2 Liste înlănțuite ………………………….. ………………………….. ………………………….. .41
4.3 Expresii regulate ………………………….. ………………………….. ……………………….. 42
4.4 MultiThreading ………………………….. ………………………….. ………………………….. 43
5. Aplicatia A ndroid ………………………….. ………………………….. ………………………….. ..44
5.1 Context ………………………….. ………………………….. ………………………….. ……….. 44
5.2 Caracteristici ………………………….. ………………………….. ………………………….. …45
5.3 Functionalite ………………………….. ………………………….. ………………………….. …45
5.4 Evoluție ………………………….. ………………………….. ………………………….. ……….. 51
6. Aplicatia Rasbperry Pi ………………………….. ………………………….. …………………….. 51
6.1 Pair device bluetooth ………………………….. ………………………….. …………………. 52
6.2 Speech recognition ………………………….. ………………………….. ……………………. 52
6.3 Server HTTP ………………………….. ………………………….. ………………………….. …54
BIBLI OGRAFIE ………………………….. ………………………….. ………………………….. …….. 55
ANEXE ………………………….. ………………………….. ………………………….. ………………… 56
4
1. Introducere
1.1 Scurtă prezentare
Această lucrare este scrisă cu scopul de a prezenta “Coffee on Time”, o
cafetieră inteligentă ce iți prepară cafeaua î nainte de a ajunge la micul dejun si o
serveste numai buna de savurat.
Conceptul de a înlocui munca fizică cu cea auto matizată a apă rut cu mult
timp în urmă, î ncă de la primul telefon fix construit la începutul anului 1892, de atunci
evoluând în mod constant și după părerea mea va exista o creștere continuă î n
urmatorii ani.
Recent, au apă rut noi do menii științ ifice de c erceta re precum biotehnologia.
Cercetările continuă î n domenii precum calculatoarele cuantice, nanotehnologia,
bioingineria, fuziunea nucleară și superconductivitatea. Înț elegerea fizicii pa rticulelor
ar putea fi realizată cu ajutorul acceleratorului de p articule “Large Hadron Collider ”,
cel mai mare experiment stiinț ific din lume.
John von Neumann vorbea într -un interviu, în anul 1958, despre faptul că
progresul tehnico -științific accelerat lasă să se întrevadă un fel de singul aritate,
dincolo de care via ța și lumea așa cum le ș tim noi nu mai pot exista.
In 1965, I. J. Good introdu ce ideea de explozie inteligentă care este inclusă
acum în conceptul singularităț ii tehnologice.
Legea lui Moore spune că î n aproximativ 20 -30 de ani computerele vor
depaș i pute rea de calcul a creierului uman, ca re este de ordinul a 1014 operații pe
secundă . Creierul uman dispune de 100 de miliarde de neuroni cu câte 1000 de
conexiuni pe neuron și cu 200 de operații pe secundă pentru fiecare conexiune.
În lucrarea mea prezint har dware -ul, componentele acesteia, funcționalităț ile
și modul în care acționează toate împreună . Părțile constituente ale acestuia sunt, in
mare parte, Raspberry Pi 3 , cel care controlează acțiunile și perifericele, acelea care
au rolul de a face legatura în tre telefon, aplicația în sine ș i cafetieră .
În urmă torul capitol prezint tehnologiile folosite, cele ca re stau in spatele
functionalității întregii aplicaț ii. Principalele sunt cele de programare, J ava, PHP și
Phyton. Pe lâ ngă acestea, mai intră Raspbian și Android -ul, reprezentantul aplicației
server și al telefonului .
Mai departe sunt prezentate ș i structurile de date: vectori, liste înlănț uite,
multi thread -uri și expresii regulate.
5
Ultimele două capitole prezintă întreaga funcționalitate a aplicației, începâ nd
cu Andro id-ul și continuâ nd cu Raspbery Pi. Este descrisă și funcția de recunoaștere
vocală, care preia comanda ș i o transmite mai departe, pentru inceput aceste
comenzi fi ind doar on/off ș i stop.
1.2 Justificare si motivare
Motivul care a stat la baza dezvoltării acestei aplicații reprezintă curiozitatea și
dorința mea de a eficentiza timpul î nlocuind munca practică a omului cu cea a
microprocesoare lor ce pot efectua sarcini programabile, dar și intenția de a aplica
cunoștințele dobândite pe parcu rsul celor trei ani de studii informatice la Facultatea
de Matematică și Informatică din cadr ul Universității din București.
Am ales să dezvolt “Coffee on Time” , deoarece consider că este o aplicație
care poate fi foarte folosito are oamenilor și cu un potențial care, pe viitor, poate fi
materializat.
Încă de la inc eputul timpurilor, omul s -a străduit sa iși facă viața mai ușoara,
astfel a inventat o mulțime de gadgeturi ș i de di spozitive care ii permit să aibă mai
mult timp liber pentru el decât pentru acti vități necesare executate manual. Cele ma i
bune exemple sunt electrocasnicele, dispozitivele wireless și multe alte invenț ii care,
mai nou, fac treaba singure.
Vine un moment in viața fiecăruia dintre noi când ceasurile cu alarmă pur ș i
simpl u nu sunt efi ciente, nu contează câ t de tare le -am set a să sune, de cate ori
apăsă m butonul de "snooze" sau pe ce fel de vibraț ie su nt setate telefoanele
noastre, ș ansele de a ne continua somnul sunt mari. Este evident că oamenii nu au
găsit î ncă un mod pe deplin efic ient care să ne trezeasca fără să ne gand im cât de
bine era să mai dormim.
De aici mi -a venit ș i ideea de a face aceasta cafetieră automatizată, conectată
direct la alarma telefonul mobil, care prepar ă cafeaua înainte de a te trezi. Odată ce
sună ceasul, alarma se oprește doar după ce ai ajuns la cafetieră și o oprești printr -o
simplă comandă vocală : “STOP” . Scopul este să te ridici din pat și să faci mișcarea
de dimineața până la cafetieră, astfel vei reuși să te trezesti la ora la care ți -ai
propus cu o seară inainte ș i să iți incepi ziua cu ca feaua gata facută .
Din alarma telefonului se poate seta tipul de cafea pe care îl dorești, varianta
de față având la dispoziție doar cafea scurtă sau lungă , dar pe viitor doresc sa
implementez toate tipurile de cafe a dorite sau chiar propria rețetă de cafea.
Aplicaț ia este simplă de folosit , “pair device” se efectuează prin Bluetooth,
comunicarea între aplicația mobile ș i Raspberry Pi făcându-se prin conexiune TCP,
iar conectarea profilul ui se face direct prin Fac ebook, contul rămânând conectat
6
acumulâ nd de -a lungul timpului date ce î i oferă utilizatorului informaț ii despre
activatea sa.
Dimineața, in timp ce iți savurezi cafeaua proaspăt făcută, poț i intreba cum va
fi vremea in ziua respectivă sau știri din ziua res pectivă, răspunsurile fiind date
apelâ nd Bing Speech API .
2. Hardware folosit
2.1 Raspberry Pi
Raspberry Pi este o serie de microprocesoare de zvoltate in Marea Britanie de
către Raspberry Pi Foundation pentru a promova învățarea mai ușoară a informati cii.
Primul model a devenit popular mai devreme decăt se anticipase, avănd vânzări de
peste 30% față de restul concurenț ilor.
Raspberrry PI 3 , versiunea pe care o utilizez, are posiblitatea de conectare a
periferice lor ce pot fi accesate prin diverse port uri, precum: tastaturi, microfon, boxe
(intrare de tip jack) și diverse alte componente .
Combinând o creștere de 33% a frecvenței la care lucrează împreună cu
diverse îmbunătățiri la ni vel de arhitectură, Raspberry Pi 3 are o performanță cu 50-
60% mai mare în modul 32 -bit față de Raspberry Pi 2 și de aproximativ 10 ori față de
modelul inițial de Raspberry Pi .
Față de versiunile anterioare, Raspberry Pi 3 dispune de conectivitate WiFi și
Bluetooth integrată asig urată de cipul BCM43438.
2.1.1 Procesor
Placa de dezvoltare Raspberry Pi 3 este bazată pe noul SoC BCM2837, care
dispunde de un procesor Quad Core pe 64 de biți ARM Cortex -A53, capabil să
ruleze la 1.2 GHz.
7
2.1.2 Wireless
Wi-Fi sau WiFi este o tehnologie pentru rețelele locale fără fir cu disp ozitive
bazate pe standardele IEEE 802.11. Wi -Fi este o marcă comercială a Wi -Fi Alliance,
care restricționează utilizarea termenului Wi -Fi Certified la produsele care au
finalizat cu succes testarea de certif icare a interoperabilității.
Dispozitivele ce folosesc tehnologia Wi -Fi sunt diverse, precum: computerele
personale, consolele pentru jocuri video, telefoanele și tabletele, camerele digitale,
televizoarele intelige nte, playerele audio digitale sau imprimantele moderne.
Dispozitivele compatibile Wi -Fi se pot conecta la Internet printr -o rețea WLAN
și un punct de acces fără fir (hotspot), care acționează pe o rază de aproximativ 20
de metri în interior și o gamă mai mare în aer liber.
Wi-Fi utilizează de obicei benzile de radiofrecvență ISM de 2,4 gi gahertz UHF
și 5 gigahertz SHF. Neavând conexiuni fizice, este mai vulnerabil la atacuri decât
conexiuni le realizate prin cablu, cum ar fi Ethernet.
Un punct de acces, cunoscut și ca WAP, conectează un grup de dispozitive
wireless la o rețea LAN învecinată . WAP se aseamănă cu un hub de rețea, care
transmite date între dispozitivele wireless conectate, în plus față de un dispozitiv tip
cablu conectat simpl u, cel mai adesea un hub sau switch Ethernet, permițând
dispozitivelor wireless să comunice cu alte disp ozitive cu fir.
Adaptorii wireless permit dispozitivelor să se conecteze la o rețea fără fir.
Aceste adaptoare se conectează la dispozitive care utilizează interconectări externe
sau interne cum ar fi PCI, miniPCI, USB, ExpressCard, Cardbus și PC Card.
Începând cu anul 2010, majoritatea laptopurilor mai noi sunt echipate cu
adaptoare interne.
2.1.3 Bluetooth
Bluetooth este un standard pentru tehnologia fără fir pentru schimbul de date
pe distanțe scurte intre dispozitivele fixe și mobile , folosind un dele radio UHF cu
lungime de undă scurtă în banda ISM de la 2,4 la 2,485 GHz .
Inventat de vânzătorul de telecomunicații Ericsson în 1994, a fost inițial
conceput ca o alternativă wireless la cablurile de date RS -232.
Bluetoothul este gestionat de Grupul de Interese Speciale Bluetooth (SIG),
care deține peste 30.000 de companii membre în domeniul telecomunicațiilor,
calculului, rețelelor și electronicii de larg consum. Bluetooth IEEE este standardizat
8
ca IEEE 802.15.1, dar nu mai păstrează standardul. Blue tooth SIG supraveghează
dezvoltarea specificațiilor, gestionează programul de calificare și protejează mărcile
comerciale. Un producător trebuie să respecte standardele Bluetooth SIG pentru a -l
comercializa ca dispozitiv Bluetooth. O rețea de brevete se ap lică tehnologiei, care
este autorizată pentru dispozitive individuale de calificare.
Bluetooth se bazează pe microcipuri transceiver cu costuri reduse în fiecare
dispozitiv, fiind un protocol standard de comunicații destinat con sumului redus, cu o
gamă scu rtă. Deoarece dispozitivele utilizează un sistem de comunicații radio
(difuzat), acestea nu trebuie să fie vizibile între ele, totuși, o cale fără fir trebuie să fie
viabilă. Intervalul este dependent de clasa de putere, dar intervalele eficiente variază
în practică.
Un dispozitiv BR / EDR master poate comunica cu maxim șap te dispozitive
într-un picone, deși nu toate dispozitivele ating acest maxim. Piconetul reprezintă o
rețea de calculatoare ad -hoc care u tilizează tehnologia Bluetooth formată la rândul
ei dintr -un master ș i un slave .
Dispozitive le pot schimba rolurile, de comun acord, ia r slave poate deveni
master, de exemplu, un set cu cască care inițiază o conexiune la un telefon începe
în mod nece sar ca inițiator al conexiunii, dar po ate funcționa ult erior ca slave .
Specificația principală Bluetooth prevede conectarea a două sau mai multe
picone te pentru a forma un scatternet, în care anumite dispozitive joacă simultan
rolul principal într -un piconet și rolul de slave în altul.
În orice moment, datele pot fi transferate între master și un alt dispozitiv (cu
excepția mod ului de difuzare puțin utilizat ). Master alege că rui dispozitiv slave să se
adreseze ș i de obicei comută rapid de l a un dispozitiv la altul folosind algoritmul
“Round -Robin”.
2.1.4 A ntena
În radio, o antenă este interfața dintre undele radio propagatoare prin spațiu
și curenții electrici care se deplasează în conductorii metalici, utilizați cu un
transmițător sau receptor.
În transmisie, un emițător radio furnizează un curent electr ic la bornele
antenei, iar antena emite energia din curent ca unde electromagnetice. La recepție,
o antenă interceptează o parte din puterea unui val electromagnetic pentru a
produce un curent electric la terminalele sale, care se aplică unui receptor care
trebuie amplificat.
9
Antenele sunt principalele componente ale echipamentelor radio și sunt
utilizate în radiodifuziune, televiziune difuzată, radio bidirecțional, receptoare de
comunicații, radare, telefoane mobile, comunicații prin satelit și alte dispoz itive.
Antena este formată dintr -o serie de conductori conectați electric la receptor
sau transmițător, iar u n curent oscilant este cel care va crea un câmp
electromagnetic oscilant în jurul elementelor antenei. Aceste câmpuri care variază în
timp radiază energia departe de antena în spațiu ca undă electromagnetică
transversală în mișcare.
Dimpotrivă, în timpul recepției, câmpurile electrice și magnetice oscilante ale
unei unde radio radio primesc forță asupra electronilor din elementele antenei,
determinâ ndu-le să se miște înainte și înapoi, generând curenți oscilanți în antenă.
Raspberry Pi 3 nu necesită conexiune directă la atenă . Radiourile sale sunt
conectate la această antenă incorporată direct pe placă, pentru a menține
dimensiunea dispozitivului la un nivel minim. În ciuda dimensiunii sale reduse,
această antenă ar trebui să fie mai mult decât capabilă să preia semnal ele LAN
Wireless și Bluetooth, chiar și prin pereți.
2.1.5 GPIO
GPIO reprezintă i ntrări le sau ieșirile cu destinație generală, fiind un pin
generic aflat pe un circuit integrat sau pe o placă de calcul a cărui comportare,
inclusiv dacă este un pin de intrare sau ieșire, este controlată de utilizator la timpul
de execuție.
Piesele GPIO nu au un scop predefinit și nu se utilizează în mod implicit.
Principul de bază este că uneori un integrator de sistem care construiește un
sistem complet ar putea avea nevoie de o serie de linii digitale suplimentare de
contr ol, dacă acestea sunt disponibile d e la un cip și se evită astfel necesitatea de a
organiza circuite suplimentare pentru a le furniza.
De exemplu, chip -urile Realtek ALC260 (codec audio) au 8 pini GPIO, care
nu se folosesc în mod implic it. Unii integratori de sistem, cum ar fi laptopurile care
apartin companiei Acer Inc. utilizează p rimul GPIO (GPIO – 0) de pe ALC260 pentru
a porni amplificatorul pentru difuzoarele interne ale laptopulu i și mufa externă pentru
căști.
10
Caracteristicile GPIO pot include:
• PIN-urile GPIO pot fi configurate pentru a fi de intrare;
• PIN-urile GPIO pot fi configurate pentru a fi de ieșire;
• PIN-urile GPIO pot fi activate;
• PIN-urile GPIO pot fi dezactivate;
• Valorile de intrare pot fi citite, de obicei ridicate sau scăzute;
• Valorile de ieșire sunt reprezentate de scriere sau citire ;
• Valorile de intr are pot fi adesea folosite ca IRQ -uri, de obicei pentru
evenimentele de trezire;
În unele cazuri p erifericele GPIO variază foarte mult , ele putând fi simple, un
grup de pini care pot comut a ca grup la intrare sau ieșire sau în altele fiecare pin
poate fi c onfigurat să accepte sau să furnizeze diferite tensiuni logice, cu puteri
configurabile ale unităț ilor de antrenare . De obicei, dar nu intotdeauna, tensiunile de
intrare sau ieșire sun t limitate la tensiunea de alimentare a dispozitivului cu GPIO –
urile și tensiunile mai mari le pot deteriora .
Starea pinului GPIO poate fi expusă dezvoltatorului de software printr -un
număr de interfețe diferite, cum ar fi o memorie mapată periferic sau prin instrucțiuni
dedicate portului IO. Unele G PIO au intrări tolerante de 5 V, chiar dacă dispozitivul
are o tensiune mică de alimentare (cum ar fi 3 V), dispozitivul poate accepta 5 V fără
deteriorare.
Raspberry Pi 3 deține același tip de antet de intrare -ieșire generală (GPIO) cu
40 de pini, pe măsură ce toate modelele PI se întorc la modelul B + și modelul A +.
Orice hardware GPIO existent va funcționa fără modificări, singura schimbare este o
comutare la care UART este expus pe pinii GPIO -ului, dar care este manipulat intern
de sistemul de operare.
2.2 Periferice
2.2.1 LED
LED este o diodă emițătoare de lumină, mai exact o sursă de lumină cu
semiconductor ce are două surse. Emiterea luminii se face printr -o joncțiune de tip
p-n atunci când aceasta este activată. Joncțiunea p -n reprezintă regiunea sau
interfața dintre două tipuri de material semiconductor unul de tip p și altul de tip n în
interiorul aceluiași cristal semiconductor.
11
Atunci când o tensiune adecvată este aplicată pe conductori, electronii sunt
capabili să se recombine cu găuri de electroni în interiorul dispoz itivului, eliberând
energia sub formă de fotoni. Acest efect se numește electroluminescență, iar
culoarea luminii (care corespunde energiei fotonului) este determinată de distanța
dintre banda de energie a semiconductorului. LED -urile sunt de obicei mici , iar
componentele optice integrate pot fi utilizate pentru a modela modelul de radiație.
Apărând pentru prima oară în anul 1962 ca părți componente ale
electronicelor , cele mai vechi LED -uri au emis lumină infraroșie cu intensitate
scăzută. LED -urile infra roșii sunt încă utilizate frecvent ca elemente de transmisie în
circuitele de control la distanță, cum ar fi cele din telecomenzi pentru o gamă largă
de electronice de consum.
Primele LED -uri cu lumină vizibilă au fost, de asemenea, de mică intensitate
și limitate la roșu. LED -urile moderne sunt disponibile pe lungimile vizibile,
ultraviolete și infraroșii, cu o luminozitate foarte ridicată.
LED-urile timpurii au fost adesea folosite ca lămpi indicatoare pentru
dispozitivele electronice, înlocuind becurile cu incandescență mici. Ele au evoluat
sub formă de afișaje pe șapte segmente și au fost frecvent observate în ceasuri le
digitale.
LED-uri au avansat în continuare, recent apărând cele utilizate la iluminatul
ambienta l. LED -urile au condus la noi afișaje și senzori, în timp ce ratele lor ridicate
de comutare sunt utile în tehnologia avansată de comunicații.
2.2.2 Rezistenț e
Un rezistor este o componentă electrică pasivă cu două terminale care
implementează rezistența electrică ca element de circuit.
În circuitele electronice, rezistoare sunt utilizate pentru a reduce debitul
curent, a ajusta nivelele de semn al, pentru a împărți tensiunile și pentru a termina
liniile de tran smisie, printre alte utilizări.
Rezistoarele de înaltă rezist ență care pot di spersa mai mulț i watt de energie
electrică sub formă de căldură pot fi utilizate ca parte a comenzilor motorului, în
sistemele de distribuție a energiei electrice sau ca sarcini pentru generatoare.
Rezistențele fixe au rezistențe care se schimbă ușor doar cu temperatură, timp sau
tensiune de operare.
Rezistențele variabile pot fi utilizate pentru r eglarea elementelor de circuit,
cum ar fi un contr oler al volumului, o lampă sau ca dispozitive de detectare pentru
căldură, lumină, umiditate, forță sau activita te chimică.
12
Rezistoarele sunt componente întâlnite atât la nivelul rețelelor electrice cât și
la nivelul circuitelor electronice și sunt omniprezente în echipamentele elec tronice.
Rezistoarele sunt de asemenea impl ementate în circuite integrate.
Formula m atema tică a legii lui Ohm este:
I = U / R
2.2.3 Releu l
Un releu reprezintă un comutator acționat electric.
Multe relee utilizează un electromagnet pentru a acționa mecanic un
întrerupător, dar sunt utilizate și alte principii de funcționare, cum ar fi releele de
stare solidă.
Releele sunt utilizate acolo unde este necesar să se controleze un circuit
printr -un semnal separat de putere redusă sau în cazul în care mai multe circuite
trebuie să fie controlate de un singur semnal.
Primele relee au fost fo losite ca circuite telegrafice de l ungă distanță , ca
amplificatoare, ce aveau rolul de a repeta semnalul care sosește de la un circuit și îl
transmiteau din nou pe un alt circuit. Releele au fost utilizate pe scară largă în
centrale telefonice și la primel e modele de computere pentru a efectua operații
logice.
Un contactor este o varietate de releu capabil să manevreze puterea mare
necesară pentru a controla în mod direct un motor electric sau alte sarcini. Releele
cu caracteristici de funcționare calibrate și uneori bobine le cu multiple funcționalități
sunt utilizate pentru a proteja circuitele electrice d e supraîncărcare sau defecțiuni în
sistemele moderne de energie electrică, aceste funcții fiind realizate de instrumente
digitale numite “relee de protecț ie”.
2.2.4 T-Cobble Plus
T-Cobbler Plus este un add -on pe placa de prototipuri de la Adafruit special
conceput pentru con ectorul 2×20 de tip Raspberry Pi . Fiecare comandă este livrată
13
cu un cablu de panglică cu 40 pini și cu T -Cobbler Plus asamblat. Se poate conecta
cablul GPIO cu 40 de pini între calculatorul PI și T-Cobbler.
T-Cobbler poate fi conectat la orice panou de lipit fără sudură. PCB -ul T-
Cobbler are toate pin-urile etichetat e frumos, astfel încât se pot construi circuite fără
a păstra o impr imare a schemei .
2.2.5 USB
USB, prescurtarea pentru Universal Serial Bus, este un standard industrial
care conține cabluri le, conector ii și protocoale le de comunicații pentru conectare,
comunicație și alimentare între calculatoare și dispozitive.
USB a fost conceput pentru a standardiza conectarea perifericelor
computerelor inclusiv tastaturi, dispozitive de indicare, camere digitale, imprimante,
playere media portabile, unităț i de disc și adaptoare de rețea, la computerele
personale, atât pentru a com unica, cât și pentru a furniza energie electrică.
În mare parte, a înlocuit o varietate de interfețe anterioare, cum ar fi porturile
seriale și porturile paralele, precum și încărcătoare le separate pentru dispozitive
portabile și a devenit un lucru comun pentru o gamă largă de dispozitive.
Raspberry Pi 3 împarte același chip SMSC LAN9514 ca predecesorul său,
Raspberry Pi 2, adăugând conectivitate Ethernet 10/100 și patru canale USB pe
placă. Ca și înainte, cipul SMSC se conectează la SoC printr -un singur c anal USB,
acționând ca un adaptor USB -to-Ethernet și hub USB.
2.2.6 Microfon USB
Microfoanele sunt utilizate în numeroase aplicații, cum ar fi telefoane, aparate
auditive, sisteme de adresă publică pentru săli de concerte și evenimente publice,
producție de filme, inginerie audio, înregistrări sonore, radio, computere pentru
înregistrarea vocii, recunoașterea vocală, VoIP și în scopuri non -acustice, cum ar fi
senzorii cu ultrasunete sau senzorii de batere.
Inventatorul german, Johann Philipp Reis, a pro iectat un emițător de sunet
timpuriu care folosea o bandă metalică atașată la o membrană vibrator care ar
produce curent intermitent. Datorită designul ui "transmițătorului de lichid" au fost
obținute r ezultate mai eficiente , astfel că în telefonul scoțian -american al lui
14
Alexander Graham Bell din 1876 diafragma a fost atașată la o tijă conductivă într -o
soluție acidă .
Există câteva tipuri diferite de microfoane care utilizează metode diferite
pentru a converti variațiile presiunii aerului de la un semnal s onor la un semnal
electric.
Cele mai frecvente sunt :
• microfonul dinamic, care utilizează o bobină de sârmă s uspendată într -un
câmp magnetic;
• microfonul condensatorului, care folosește diafragma vibr ator ca placă de
condensator;
• microfonul piezoelectric, care utilizează un cr istal de material
piezoelectric;
Microfoanele trebuie de obicei conectate la un preamplificator înainte ca
semnalul să poată fi înregistrat sau reprodus.
Microfoanele au o caracteristică electrică denumită impedanță, măsurată în ohmi
(Ω), care depinde de design.
În microfoane pasive, această valoare descrie rezistența electrică a bobinei
magnetului sau a unui mecanism similar .
În microfoanele active, această valoare descrie rezistența la ieșire a circuitelor
amplificatoare.
În mod tipic, se sp ecifică impedanța nominală. Impedanța scăzută este
considerată sub 600 Ω. Impedanța medie este considerată între 600 Ω și 10 kΩ.
Impedanța ridicată este mai mare de 10 kΩ. Datorită amplificatorului încorporat,
microfoanele condensatoare au în m od obișnuit o impedanță d e ieșire între 50 și 200 Ω.
2.2.7 Fierbător
Fierbă toarele electrice au fost introduse ca un mijloc de fierb ere a apei fără a
fi necesar aragaz ul clasic . Sunt construite în mod normal din plastic rezistent sau
oțel și alimentate c u energie electrică, elementul de încălzire fiind complet închis, cu
o putere de 2 -3 kW la 220V.
În acest proiect cafetiera are rolul de a fierbe apa și de a o turna peste cafea ,
fiind controlată printr -un releu de catre Raspberry Pi.
15
3. Tehnologi folosi te
3.1 Raspbian
Raspbian este un sistem de operare pe ntru calculator baz at pe Debian pentru
Raspberry Pi . Din anul 2015 a fost oficial oferit de Fundați a Raspberry Pi ca sistem
principal de operare pentru familia de com putere single -board Raspberry Pi .
Raspbian a fost creat de Mike Thompson și Peter Green ca un proiect
independent. Construcția inițială a fost finalizată în iunie 2012. Sistemul de operare
este încă în dezvoltare activă. Raspbian este optimizat pentru procesoarele ARM cu
performanțe reduse ale liniei Raspberry Pi .
Raspbian foloseste PIXEL, Pi Improved Xwindows En vironment, Lightweight
ca mediu de luc ru principal al desktop -ului, fiind cea mai recenta actualizare. Acesta
este alcătuit dintr -un mediu desktop modificat LXDE și un manager de fe restre de
stivuire Openbox cu o temă nouă și câteva alte modificări.
Distribuția este livrată cu o copie a pr ogramului de calcul algebră Mat ematica
și o versiune a Minecraft numită Minecraft Pi, precum și o versiune ușoară a lui
Chromium, ca cea mai recen tă versiune.
3.2 Java
Evoluția societăț ii a implicat, de asemenea, evoluț ia limbajelor de
programare. Modul în care noi ar trebui să comunicăm cu o mașină rie a evoluat la a
o vedea mai puțin ca pe o mașinărie în sine și mai mult ca pe o componentă a mi nții
noastre, capabilă să exprime lucruri noi.
În aces t mod a luat naș tere POO sau programarea orientată pe obiecte.
Această par adigmă reprezintă conceptul de “obiecte ” care au caracteristici diferite
sau “atribute ” care descriu obiectul ș i sunt utilizate pentru a interacționa î ntre ele ș i a
descrie o aplicaț ie complexă .
În proiectul meu am utili zat tehnologiile Java. Cum toată lumea ș tie, in ultimii
ani, Java a evoluat și este acum peste tot, de la laptopuri și centre de date, la
console, calculatoare ști ințifice și telefoane mobile .
Java permite programatorilor să dezvolte ef icient, să implementeze și să
utilizeze a plicații și servicii , cu mai mult de 9 milioane de dezvoltatori din întreaga
16
lume. Astfel, Java este alegerea majorită ții programatorilor din lume ș i a fost testat,
rafinat, extins și i-a fost dovedită eficiența de că tre comunitatea de programatori din
lume.
Java permite, de a semenea, utilizarea aplicațiilor în diferite medii, ceea ce
reprezintă un foarte mare avantaj, deoarece, în acest fel , software -ul poate fi s cris
pe o singură platformă și poate rula practic pe orice altă platformă.
Java este utilizat și pentru a realiza aplicați i puternice ș i eficiente pe mobil,
pentru procesare de la distanț ă, pentru produse consumatoare ș i practic pe ntru orice
alt dispozitiv electronic.
Java este unul dintre cele mai popular e limbaje de programare, î ncepând din
anul 2016, în special pentru aplicațiile web client -server, fiind inițial dezvoltat de
James Gosling de la Sun Microsystems (care a fost achiz iționată de Oracle
Corporation) și lansată în 1995 ca o compon entă de bază a platformei Java Sun
Microsystems. Limba jul derivă mult din sintaxa sa din C și C ++, dar are mai puține
facilități de nivel scăzut decât oricare dintre ele.
Implementarea original ă și implementarea referințelor compilatoare Java,
mașini virtuale și biblioteci de clasă au fost inițial lansate de Sun în baza licențelor
de proprietate.
Începând cu luna mai 2007, în conformitate cu specificațiile Procesului comunitar
Java, Sun a reliza t majoritatea tehnologiilor sale Java în baza Licenței Publice
Generale GNU. A u dezvoltat, de asemenea , implementări alternative ale acestor
tehnologii Sun, cum ar fi Compilatorul GNU pentru Java (compilator bytecode), GNU
Classpath (biblioteci standard), și IcedTea -Web (plugin pentru browser pentru
applet -uri).
Exista c inci obiective prim are în crearea limbajului Java:
• Trebuie să fie "simplu, orientat pe obiecte și familiar";
• Trebuie să fie "robust și sigur ";
• Trebuie să fie "neutru din punct de vedere al arhitecturii și portabil ";
• Trebuie exe cutat cu "performanță ridicată";
• Trebuie să fie "interpretat și dinamic";
Scopul principal de proiectare al limbajului Java este portabilitatea, ceea ce
înseamnă că programele scrise pentru platforma Java trebuie să r uleze în mod
similar pe orice combinație de hardware și sistem de operare cu suport pentru
runtime adecvat.
Acest lucru se realizează prin compilarea codului de l imbaj Java la o
reprezentare intermediară denumită bytecode Java, în loc de codul mașinii spec ific
arhitecturii.
17
Instrucțiunile Java bytecode sunt similare cu codul mașinii, dar sunt
proiectate să fie executate de o mașină virtuală (VM) scrisă special pentru hardware –
ul gazdă. Utilizatorii finali utilizează în mod obișnuit un mediu Java Runtime
Environment (JRE) instalat pe propria mașină pentru aplicații Java separate sau într –
un browser web pentru aplicații Java.
Bibliotecile standard oferă o modalitate generică de a accesa funcțiile
specifice gazdei, cum ar fi grafica, periferice le și crearea de rețele.
Utilizarea bytecode -ului universal face ca portarea să fie simplă. Cu toate
acestea, cheltuielile aferente interpretării bytecode în instrucțiunile mașinilor
efectuate de programe interpretate aproape întotdeauna rulează mai încet decât
executabile le native.
Componentele Just -in-Time (JIT) care compilau codurile bytecodes în timpul
execuției au fost introduse într-o etapă timpurie. Java în sine este independent de
platfo rmă și este adaptat la una specială pe care rulează o mașină virtuală Java,
care traduce Java bytecode în limba jul mașinii platformei .
3.2.1 Obiecte
În domeniul informaticii, un obiect poate fi o variabilă, o structură de date, o
funcție sau o metodă și, ca atare, este o locație în memorie având o valoare și
referită de un identifi cator.
În paradigma de programare orienta tă pe obiecte bazată pe clasă, “obiect ” se
referă la o instanță specială a unei clase în care obiectul poate fi o comb inație de
variabile, funcții sau structuri de date.
În gestionarea bazelor de date relaționale, u n obiect poate fi un tabel sau o
coloană sau o asociere între date și o entitate a bazei de date .
Programarea orientată pe obiecte este o abordare a proiectării sistemelor
software modulare reutilizabile. Abordarea orientată pe obiecte este o evoluție a
practicilor de proiectare bune care se întorc la începutul programării pe calculator.
Orientarea obiectului este pur și simplu extensia logică a tehnicilor mai vechi, cum ar
fi programarea structurată și tipurile de date abstracte. Un obiect este un tip de date
abstract cu adăugarea de polimorfism și moștenire.
POO permite nivele inalte de abstractizare utilizate pentru rezolvarea
problemelor din viața reală. Elementele componente ale problemei sunt asa numitele
"obiecte", care pot fi citite pentru a exprima problema si a solutia. Obiectul trebuie sa
fie vazut ca o cutie care are mai multe caracteristici, iar în scopul de a defini aceste
particularitati a fost introdus cuvântul cheie "clasă". Fiecare obiect aparține unei
18
clase și fiecare clasa creata poate fi reutilizata, actiune care reprezinta una dintre
cele mai mari avantaje ale programarii orientate pe obiecte.
Exemplu de clas ă Java ce folos ește moștenire ș i modificatori de acces:
public class BluetoothConnection extends Thread {
private BluetoothSocket mmSocket ;
private final BluetoothDevice mmDevice ;
private BluetoothAdapter bluetoothAdapter ;
private BluetoothMessage bluetoothMessage ;
public BluetoothConnection(BluetoothDevice device, BluetoothAdapter
bluetoothAdapter) {
this.bluetoothAdapter = bluetoothAdapter;
mmDevice = device;
try {
mmSocket =
device.createRfcommSocketToServiceRecord(device.getUuids()[ 0].getUuid());
} catch (IOException e) {
Log.e("SSS", "Socket's cr eate() method failed" , e);
}
try {
mmSocket .connect();
bluetoothMessage = new BluetoothMessage( mmSocket );
} catch (IOException e) {
Log.e("SSS", e.getMessage());
Log.e("SSS", "Try aga in to create the connection." );
try {
mmSocket = (BluetoothSocket)
device.getClass().getMethod( "createRfcommSocket" , new
Class[]{ int.class}).invoke(device, 1);
mmSocket .connect();
bluetoothMessage = new BluetoothMessage( mmSocket );
} catch (Exception e2) {
Log.e("", "Couldn't establish Bluetooth connection!" );
}
}
bluetoothAdapter.cancelDiscovery();
}
private Object send(Object obj) {
return bluetoothMessage .send(obj.toString());
}
private void cancel() {
try {
mmSocket .close();
} catch (IOException e) {
Log.e("SSS", "Could not close the client socket" , e);
}
}
}
19
Modificatorii din Java sunt:
• “public” – o metodă poate fi apelată din cod în alte clase sau că o clasă
poate fi utilizată de clase în afara ierarhiei de clasă
• “private” – este utilizat pentru a face metodele, variabile sau clasele
vizibile numai pentru cla sa din care aparțin
• “protected” – face ceea ce se referă la vizibil valabil pentru pachet și
toate subclasele
• “default” – implicit e ste setat automat, care inseamnă tot ce se
intampl ă la vizibi l e valabil pentru întregul pachet din care face parte.
În Jav a, există de asemenea ș i non -modificatori de acces. Modificatorul
“static” este utilizat pentru a cre ea variabile care vor exi sta independent de clasă .
Doar o copie a variabilelor statice va exista indifere nt de numărul de cazuri de clasă .
Dacă o metodă statică este creată , va fi utilizată indep endent de orice instanță de
clasă cu ajutorul “ClassName.methodName(parametri / nr. parametri) ”, în timp ce o
metodă non-statică a re nevoie de instanțierea clasei respective :
“classInstance.methodN ame(parametri / fara parametri) ”.
Modificatorul "Final" este utilizat pentru variabile care pot fi i nițializate explicit
doar o dată . Pentru a face o constantă în “clasa de variabile” o folosim adesea
împreună cu modificatorul “static”. Metodele finale su nt cre eate astfel încât să nu
poată fi suprascrise de nicio subclasă .
O interfață în l imbajul de programare Java este un a abstractă, care este
utilizată pentru a specifica un comportament pe care clasele trebuie să il
implementeze. Acestea sunt si milare c u protocoalele. Interfeț ele sunt declarate cu
ajutorul interfeței de cuvânt cheie și poate conține numai metoda semnătur a și
declarațiile constantelor, variabile decl arate ambele ca static și final . Începând cu
Java 8, “default” și “static” pot fi puse în aplicare în definiția de interfață. Interfeț ele
nu pot fi instan țate, ci mai degrabă sunt implementate.
O clasă care implementează o interfaț a trebuie să implementeze toate
metodele descri se în interfața sau o clasă abstractă .
“Moștenirea” poate fi defi nită ca procesul de unde o clasă dobâ ndeș te
propr ietățile, metodele și câmpurile clasei p ărinte. Cu utilizarea moș tenirii informaț ia
este ușor d e gestionat în ordine ierarhică. Clasa care moștenește proprietățile alt eia
este cunoscută ca “subclasă ” si clasa a căror proprietăți sunt moștenite este
cunoscut ă ca “super class” (clasa de bază, clasa de părinte).
“Extends ” este cuvântul cheie folosit pentru a moșteni proprietățile unei clase.
Cuvâ ntul î n sine, “polimorfism” este derivat din două cuvinte: “poli” și
“morfism”. Astfel c ă polimorfismul se traduce ca avâ nd mai multe forme. Capacitatea
unui obiect de a l ua forme diferite este cunoscută sub numele de polimorfism .
20
Declararea ș i utilizarea funcț iilor virtuale este calea de utilizare a
polimor fismului. Pr in intermediul funcț iilor virtuale, un acelaș i pointer către un obiect
poate indica clase diferite pentr u apelarea ș i lansarea î n execuț ie a diverselor
operaț ii posibile .
Cele mai folosite că i de utilizare a le polimorfismului în POO apar atunci când o
referință din clasa părinte este utilizată pentru a se referi la un obiect din clasa copil.
Există două tipuri de polimorfism în java:
• Metoda de supraîncărcare – în Java este posibilă definirea de două sau
mai multe metode cu acela și nume in clasă , cu condiți a ca lista de
argumente sau de parametri sa fie diferite.
• Metoda de s uprascriere – clasa copil are aceeași metodă ca și clasă de
bază. În astfel de cazuri clasa copil suprascrie metoda clasei părinte chiar
fără a atinge codul sursă din clasa de bază.
In Ja va, serializarea obiectelor permite să luam un obiect, dacă aceasta pune
în aplicare interfața de serializare și s ă-l transformă m într -o secvență de octeți care
poate fi mai târziu restabilită complet pentru a regenera originalul obiect. În acest fel,
obiectele pot fi trimise prin reț ea, fără să ne facem griji că cel care o cite ște nu poate
citi o reprezentare de date corectă .
În Java, obiectele pot fi de asemenea nu mite "excepț ii", care reprezintă
erorile care apar atunci când ceva nu funcționează corect î n cadrul programului. De
la începutul limbajelor de programare, aceasta a fost una dintre cele mai d ificile
probleme, deoarece cu câ t este codul scris mai complex, cu atât crește posibilitatea
de a apă rea erori.
Dintre toate limbajele de programar e, Java are un mod unic de a acționa în
privința acestor excepții, deoarece obligă, într -o anumită mă sură, programatorul să o
utilizeze, iar în caz contrar, dacă are nevoie codul să manipuleze excepții și asta nu
se întamplă , apar erori de compilare.
3.2.2 Adnotă ri
În limba jul de programare Java, o adnotare este o formă de metadate
sintactice care poate fi a dăugată la codul sursă Java.
Clasele, metodele, variabilele, parametrii și pachetele pot fi adnotate. Ca tag –
uri Javadoc, adnotările Java pot fi citite din f ișierele sursă. Spre deosebire de
etichetele Javadoc, adnotările Java pot fi de asemenea integrate și citite din fișiere
21
de clasă generate de compilator. Acest lucru permite ca adnotările să fie păstrate de
Java VM în timp de execuți e și citite prin reflec ție.
Platforma Java are diferite mecanisme de adnotare ad -hoc – de exemplu,
modificatorul tranzitoriu sau tag -ul javadoc @deprecated. JSR -175 a introdus
facilitatea de adnotare generală (cunoscută și ca metadate) pentru procesul
comunitar Java în 2002; a o bținut ap robarea în septembrie 2004.
Adnotările au devenit disponibile în limba jul în sine, începând cu versiunea
1.5 a JDK. Instrumentul apt a furnizat o interfață provizorie pentru procesarea de
adnotări în timp de compilare în JDK versiunea 1.5, JSR-269 a formalizat acest lucru
și a devenit integrat în compilamentul javac în versiunea 1.6.
Adnotări aplicate codului Java:
• @ Override – verifică dacă metoda este o suprascriere. Cauzează o
eroare de compilare dacă metoda nu este găsită într -una dintre clase le
părinte sau interfețele implementate.
• @Deprecated – marchează metoda ca fiind depășită. Cauzează o
avertizare de compilare dacă se folosește metoda.
• @SuppressWarnings – instrucționează compilatorul să suprime
avertismentele de timp de compilare specific ate în parametrii de adnotare.
3.2.3 Thread -uri
Limbajul de programare Java și mașina virtuală Java (JVM) au fost
concepute pentru a sprijini programarea concurentă, iar toată execuția are loc în
contextul thread -urilor . Obiectele și resursele pot fi ac cesat e prin mai multe thread –
uri separate, fiecare thread având o cal e de execuție proprie, dar putând accesa
orice obiect din program.
Programatorul trebuie să se asigure că accesul la citire și scriere a obiectelor
este corect coordonat (sau "sincroniza t") între thread -uri. Sincronizarea thread -urilor
asigură că obiectele sunt modificate numai printr -un singur fir și că firele sunt
împiedicate să acceseze obiecte actualizate parțial în timpul modificării de către un
alt fir .
Thread -urile partajează resur sele procesului, inclusiv memoria și fișierele
deschise. Acest lucru face posibilă o comunicare eficientă, dar potențial
problematică.
Fiecare aplicație are cel puțin un thread numit thread principal. Thread -ul
principal are capacitatea de a crea thread -uri adiționale ca obiecte care pot fi
executate sau care pot fi chemabile.
22
Totuși, i nterfața Callable este similară cu Runnable, în care ambele sunt
proiectate pentru clase ale căror instanțe pot fi executate de un alt fir. Un Runnable,
totuși, nu întoarce un rezultat.
Fiecare thread poate fi programat pe un nucleu diferit al CPU -ului sau poate
să folosească procesarea timpului pe un singur procesor hardware, sau să creeze
timp pe multe procesoare hardware. Nu există o soluție generică pentru modul în
care firele Java sunt mapate la firele native ale sistemului de operare. Fiecare
implementare JVM o poate face într -un mod diferit.
Fiecare thread este asociat cu o instanță a clasei Thread. Thread -urile pot fi
gestionate fie direct folosind obiecte Thread, fie folosind mecanisme abstracte cum
ar fi Executors și java.util.concurrent collections.
3.2.4 Gradle
Gradle este un sistem de automatizare a surselor open source care se
bazează pe conceptele Apache Ant și Apache Maven și introduce un limbaj specific
domeniului Groovy (DSL) în locul formularului XML folosit de Apache Maven pentru
declararea configurației proiectului. Gradle utilizează un grafic aciclic direcționat
("DAG") pentru a determina ordinea în care pot fi executate sarcini.
Gradle a fost proiectat pentru construirea mai multor proiecte, c are poate
deveni destul de mare și sprijină construirea incrementală prin determinarea
inteligentă a părților din copacul construit până acum, astfel încât orice sarcină care
depinde de aceste părți nu va trebui să fie re -executată .
3.3 Android
3.3.1 Prezentare Generală
Android este un sistem de operare mobile care se bazează pe o versiune
modificată de Linux (pentru gestiunea componentelor hardware, a proceselor și a
memoriei) și biblioteci Java pentru telefonie (audio/ video), conectivitate, grafică sau
programar ea interfețelor cu utilizatorul .
23
Este un produs open -source, putând fi dezvoltat de producătorii de
dispozitive mobile cu extensii proprietare pent ru a-și particulariza platforma , fiind
dezvoltat în pre zent de compania Google, conceput pe ideea transformării
dispozitivelor mobile în adevărate mașini de calcul.
Google încearcă totuși să realizeze tranziția de la AOSP (Android Open
Source Project) către GMS (Google Mobile Services), peste care sunt const ruite
cele mai multe aplicații, în încercarea de a -și apăra acest proiect în fața concurenței.
În acest sens, a fost dezvoltat proiectul Google One , prin care este oferit un set de
specificații (ecran de 4.5 inchi – 845×480 pixeli, procesor quad -core, memo rie 1GB
RAM, spațiu de stocare 4GB, suport pentru dual sim) pe care producătorii de
dispozitive mai ieftine trebuie să le respecte astfel încât acestea să fie compatibile
cu un sistem Android, fără a întâmpina probleme de performanță.
În condițiile în ca re pe piața dispozitivelor mobile aplicațiile sunt cele care
aduc avantajul competițional, beneficiul Android este reprezentat de abordarea
unitară pentru dezvoltarea aplicațiilor.
Cu alte cuvinte, o aplicație dezvoltată conform API-ului Android va putea rula
pe mai multe dispozitive mobile pe care este instalat sistemul de operare respectiv.
3.3.2 Funcționalități Android
De vreme ce Android este un produs open -source, produc ătorii având
posibilitatea de a -l modifica în mod gratuit, nu există configurați i hardware sau
software standard.
Totuși, Android implementează următoarele funcționalități:
• stocare – folosește SQLite, o bază de date relațională ce utilizează
resurse puține ;
• conectivitate – suportă GSM/CDMA, GPRS, EDGE, 3G, IDEN,
EV-DO, UMTS, Bluetoot h (inclusiv A2DP si AVRCP), WiFi, LTE,
WiMAX ;
• WiFi Direct – tehnologie care permite aplicațiilor să se descopere
și să se interconecteze peste o conexiune punct -la-punct având
lățime de bandă mare ;
• mesagerie – atât SMS cât și MMS ;
• navigare pe Internet – bazat pe motorul open source pentru
navigare WebKit impreună cu motorul JavaScript de la Chrome V8
suportând HTML5 și CSS3 ;
• multimedia – suportă formatele H.263, H.264 (într -un container
3GP sau MP4), MPEG -4 SP, AMR, AMR -WB (într -un container
24
3GP), AAC, HE -AAC (într -un container MP4 sau 3GP), MP3, MIDI,
Ogg Vorbis, WAV, JPEG, PNG, GIF si BMP ;
• grafică – 2D optimizată, 3D (OpenGL ES) ;
• senzori – accelerometr u, cameră foto, busolă digitală
(magnetometru), senzor de proximitate, GPS / AGPS ;
• multi -touch – suportă e crane cu posibilitate de contact în mai
multe puncte concomitent ;
• multi -tasking – permite rularea de aplicații cu mai multe fire de
execuție ;
• GCM (Google Cloud Messaging) – serviciu ce permite
dezvoltatorilor să trimită date de dimensiuni mici către utiliz atori pe
dispozitive Android ;
• multi -Language – suport pentru text unidirecțional și bidirecțional ;
• suport pentru aplicații Flash (până în versiunea 4.3) ;
• legătură la Internet – suportă partajarea conexiunilor la Internet ca
punct de distribuție cu fir sau fără fir ;
Bibliotecile conțin codul care oferă principalele funcționalități a sistemului de
operare Android, făcând legătura între kernel și aplicații. Sunt incluse aici motorul
open -source pentru navigare WebKit, biblioteca FreeType pentru suportul setur ilor
de caractere, baza de date SQLite utilizată atât ca spațiu de stocare cât și pentru
partajarea datelor specifice aplicațiilor, biblioteca libc (Bionic), biblioteca de sistem C
bazată pe BSD și optimizată pentru dispozitive mobile bazate pe Linux, bibl ioteci
pentru redarea și înregistrarea de conținut audio/video (bazate pe OpenCORE de la
PacketVideo), biblioteci SSL pentru asigurarea securității pe Internet și Surface
Manager, bibliotecă pentru controlul accesului la sistemul de afișare care suportă 2D
și 3D.
Aceste biblioteci nu sunt expuse prin API, reprezentând detalii de
implementare Android.
3.3.3 Activităț i
O activitate reprezintă un singur ecran pe care utilizatorul îl vede pe dispozitiv
la un moment dat. În mod obișnuit, o aplicație are mai m ulte activități independente,
astfel încât utilizatorul poate naviga în oricare dintr e ele. Aceasta înseamnă că
activitățile sunt cea mai vizibilă parte a aplicației, î n general , o activitate din cadrul
unei aplicații este specificată ca fiind activitatea "principală", care este prezentată
utilizatorului, la începutul lansării aplicației .
25
Deoarece pornirea unei activități poate implica cre earea unui nou proces,
alocarea memoriei pentru toate obiec tele interfeței utilizator, iniț ializarea tuturor
obiectelor din layout -urile XML și setarea întregului ecran necesită multă procesare.
Managerul de activități este cel ce se ocupa de comutarea între ecrane.
De exemplu, atunci când un utilizator trece de la activitatea A la activitatea B,
activitatea A este stabili tă de managerul de activități, astfel încât atunci când
utilizatorul dorește să se întoarcă din activitatea A în activitatea B, se va distruge
doar a ctivitatea B, activitatea A urmând să se afiș eze din background.
În timp ce activitățile sunt adesea prezen tate utilizatorului ca ferestre cu ecran
complet, ele pot fi folosite și în alte moduri ca ferestre încorporate în interiorul unei
alte activități.
Există două metode care vor implementa aproape toate subclasele din
Activitate:
• onCreate(Bundle) est e locul unde activitatea se iniț ializează . De
obicei, aici se va apela setContentView (int) cu o resursă de aspect ,
definind int erfața și folosind findViewById (int) pentru a prelua
compontentele din interfața de utiliz ator cu care trebuie să
interacționeze aplicaț ia.
• onPause () se apelează atunci câ nd utilizatorul a părăsit activitatea.
Cel mai important, orice modificare efectuată de utilizator ar trebui
să fie angajată în acest moment, de obicei pentru ContentProvider
care deține datele.
3.3.4 Servicii
Serviciu l este o componentă ce face parte din aplicația care poate efectua
operații de lungă durată în fundal și nu oferă o interfață utilizator. O altă componentă
a aplicației poate să pornească un serviciu și continuă să ruleze în fundal chiar dacă
utilizatorul comută la o altă aplicație.
O componentă se poate lega de un serviciu pentru a interacționa cu acesta și
chiar poate realiza o comunicare intre doua procese .
De exemplu, un serviciu poate gestiona tranzacțiile din rețea, poate reda
muzică, poate efectua fișiere I/ O sau poate interacționa cu un furnizor de conținut,
toate din fundal.
26
Pentru a cre ea un serviciu, trebuie creeată o subcl asă de serviciu sau
utilizată una dintre subclasele sale existente. Acestea sunt cele mai importante
metode de apel invers p e care ar trebui suprascrie:
• onStartCommand() – sistem ul invocă această metod ă apelând
startService () atunci când o altă comp onentă solicită pornirea
serviciului. Când această metodă este executată, serviciul este
pornit și poate rula în fundal pe o perioa dă nedeterminată.
• onBind() – sistemul invocă ace astă metodă apelând bindService ()
atunci când o altă componentă dorește să se lege de serviciu.
Această metodă este apelat ă pentru a efectua proceduri de
configurare o singură dată când serviciul este cr eeat înainte de a
apela fie onStartCommand (), fie onBind(), dacă serviciul este deja
în desfășurare, această metodă nu este apelată.
• onDestroy() – această metodă este apelată atunci când serviciul nu
mai este utilizat și este distrus. Serviciul ar trebui să imp lementeze
acest lucru pentru a curăța toate resursele, cum ar fi fire,
ascultători înregistrați sau receptoare.
3.3.5 Permisiuni
Android este un sistem de operare separat de privilegii, în care fiecare
aplicație rulează cu o identitate de sistem distin ctă. Părți ale sistemului sunt, de
asemenea, separate în identități dist incte. Linux, prin urmare, izolează aplicați ile una
de alta și de sistem.
Aplicațiile își pot expune funcționalitatea către alte aplicații, definind
permisiunile pe care alte aplicații le pot solicita. De asemenea, pot defini permisiuni
care sunt automat puse la dispoziția altor aplicații care sunt semnate cu același
certificat.
De exemplu, o aplicație care dorește să controleze cine poate începe una
dintre activitățile sale ar putea de clara o permisiune pentru această operație după
cum urmează:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
/>
27
3.3.6 Manifest
Pentru orice aplicație trebuie să existe un fișier AndroidManifest.xml cu exact
același nume localizat în directorul root. Fișierul manifest oferă inform ații esențiale
despre aplicați ile sistemului Android, pe care sistemul trebuie să le aibe înainte de a
se putea executa oricare dintre codurile aplicației.
Caracteristici ale fisierului mani fest:
• Oferă numele pachetului Java pentru aplicație, fiind un identificator
unic pentru aplicație;
• Descrie componentele aplicației incluzând activitățile, serviciile,
receptoarele de difuzare și furnizorii de conținut care compun
aplicația;
• Numește clasele care implementează fiecare dintre componente și
publică propriile lor capacități, cum ar fi mesajele Intent pe care le
pot gestiona;
• Aceste declarații informează sistemul Android cu privire la
componentele și co ndițiile în care pot fi lansate;
• Acesta dete rmină procesele care gă zduiesc componentele
aplicației;
• Declară nivelul minim al API -ului Androi d pe care îl solicită
aplicația;
• Enumeră bibliotecile căreia trebuie să li se lege aplicația;
3.3.7 Layout
Layout reprezintă structura vizuală a unei interfaț e cu utilizatorul, cum ar fi
interfața utilizator p entru o activitate sau componente pentru aplicații.
Declararea acesteia se poate face în două moduri:
• Declararea ementelor UI în XML. Android oferă un vocabular
simplu XML care corespunde claselor și subc laselor de vizualizare,
cum ar fi cele pentru componente și layouts.
• Elemente de aspect al instanței î n timpul rulării. Aplicația poate
crea obiecte View și ViewGroup și manipula proprietățile lor
programabil.
Beneficiul în declara rea interfaței utilizator în XML este faptul că permite
separarea și prezentarea codul ui care controlează comportam entul acestuia.
Descrierile de inte rfață se pot modifica sau adapta fără a fi nevoie de a
modifica codul sursă și recompila , fiind externe codului de aplicație.
28
Se pot crea machete XML pentru orientări diferite ale ecranului, dimensiuni
diferite ale ecranului dispozitivului și limbi diferite. În plus, declararea layout -ului în
XML facilitează vizualiz area structurii interfeței UI, deci este mai ușor de depanat .
3.3.8 Evenimente
Evenimentele din Android pot lua o varietate de forme diferite, dar sunt de
obicei generate ca răspuns la o acțiune externă. Cea mai comună formă de
evenimente, în special pentru dispozitive precum tablete și smartphone -uri, implică o
anumită formă de interacțiune cu ecranul tactil. Astfel de evenimente se încadrează
în categoria evenimentelor de intrare.
Android stochează o coadă de evenimente în care evenimentele sunt plasate
în momentul în care apar. Evenimentele sunt apoi șterse din coadă, în primul rând
(FIFO). În cazul unui eveniment de intrare, cum ar fi o atingere pe ecran,
evenimentul este trecut la vizualizarea poziționată în locul de pe ecranul unde a avut
loc atingerea. În plus față de notificarea evenimentului, vizualizarea transmi te, de
asemenea, o serie de informații despre natura evenimentului, cum ar fi coordonatele
punctului de contact dintre degetul utilizatorului și ecran.
Un ascultător de evenimente este o interfață în clasa Vizualizare care conține
o singură metodă de retur . Aceste metode vor fi numite de cadrul Android când
vizualizarea la care a fost înregistrat ascultătorul este declanșată de interacțiunea
utilizatorului cu elementul din interfața de utilizare.
Exemple de evenimente :
• onClick() – atunci când utilizatorul atinge elementul sau se
concentrează asupra elementului cu ajutorul tastelor de navigare și
apasă tasta corespunzătoare “enter ”.
• onTouch() – atunci când utilizatorul efectuează o acțiune calificată
ca eveniment tactil, inclusiv o apăsare, o eliberare sau orice gest
de mișcare pe ecran.
• onFocusChange() – atunci când utilizatorul navighează pe sau
depărtare de element , utilizând tastele de navigare .
29
3.3.9 Dialog
O fereastră de tip dialog este o fereastră mică care îi determină pe utilizator
să ia o decizie sau să introducă informații suplimentare. O fereastră de tip dialog nu
umple ecranul și este folosită în mod obișnuit pentru evenimentele modale care
necesită o acțiune de către utilizatori înainte de a putea continua.
Un DialogFragment este un fragment ca re afișează o fereastră modală, care
se găsește în partea superioară a ferestrei de activitate curentă. O instanță a
DialogFragment poate fi utilizată pentru a afișa un dialog de implementare Dialog
existent sau o ierarhie de vizualizare personalizată.
Clasa Dialog este clasa de bază pentru implementarea unui dialog. Android
oferă mai multe implementări standard de dialo g, AlertDialog, ProgressDialog,
DatePickerDialog sau TimePickerDialog. Dialogul Fragment poate implementa
metoda onCreateDialog și returnea ză o astfel de implementare a dialogului.
Implementarea DialogFragment comunică cu activitatea similară cu alte
fragmente. O bună practică este că fragmentul definește o interfață pe care trebuie
să o implementeze activitatea. Fragmentul poate reveni la ac tivitate fără a cunoaște
detaliile implementării activității.
3.3.10 Notifică ri
Notificare a este un mesaj care se afișează utilizatorului aflat în afara interfeței
obișnuite a aplicației. Când sistemul emite o notificare, ace asta apare mai întâi ca o
pictogramă în zona de notificare. Pentru a vedea detaliile notificării , utilizatorul
deschide activitatea notificări.
Pentru a cre ea un canal de notificare:
• Se construiește un obiect de canal de notificare cu un I D care este
unic;
• Se configurează obiectul canalului de notificare cu setările inițiale
dorite ;
• Se trimite obiectul canal de notificar e către managerul de notificări;
Încercarea de a cre ea un canal de notificare existent cu valorile s ale inițiale
nu efectuează nici o operație, deci este sigur să ruleze secvența precedentă de pași
atunci când se porneste aplicatia .
30
Următorul exemplu de cod demonstrează cre earea unui canal de notificare
cu un nivel de importanță ridicat.
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder( this)
.setSmallIcon(R.drawable. ic_alarm_on_black_24dp )
.setContentTitle( "Good morning!" )
.setContentText( "Is time to wake up!" )
.setContentIntent(pendingIntent)
.setOngoing( true);
notificationManager.notify();
notificationManager.notify( 0, mBuilder.build());
3.3.11 Toast
Un toast este o vizualizare care conține un mesaj scurt pentru utilizator. Nu
va primi niciodată focalizare.
Ideea este aceea de a fi cât mai discret posibil , în timp ce încă îi arată
utilizator ului informațiile pe care dore ște să le vadă. Două exemple sunt controlul
volumului și mesajul scurt care spune că setările au fost salvate.
Clasa Android Toast oferă o modalitate la îndemână de a arăta alertele
utiliza torilor, dar problema este că aceste alerte nu sunt persistente, ceea ce
înseamnă că semnalul de alertă clipește pe ecran timp de câteva secunde și apoi
dispare.
Toast.makeText (this, "Wake up!!!" , Toast. LENGTH_SHORT ).show();
3.3.12 Media Player
Cadru l multimedia include suport pentru redarea diverselor tipuri d e fișiere,
astfel încât se pot integra cu ușurință elemente audio, vid eo și imagini în aplicație.
Fișiere le audio sau video se pot reda din fișierele media stocate în resursele
aplicație, din fi șierele autonome din sistemul de fișiere sau dintr -un flux de date care
sosesc printr -o conexiune de rețea.
31
Următoarea diagramă prezintă ciclul de viață și starea unui obiect
MediaPlayer condus de operațiile de control al redării acceptate.
32
Înainte de a începe dezvoltarea aplicației utilizând MediaPlayer, fișierul
manifest trebuie să conț ina declarațiile corespunzătoare pentru a permite utilizarea
funcțiilor aferente.
• Permisiune Internet – Media Player pentru streaming de conți nut bazat pe
accesul l a rețea :
<uses-permission android:name="android.permission.INTERNET" />
• Permisiune Wake Lock – Dacă aplicația de pe player trebuie să țină
ecranul în diminuare, procesorul să doarmă sau să folosească metodele
Medi aPlayer.setScreenOnWhilePlaying sau Medi aPlayer. setWakeMode :
<uses-permission android:name="android.permission.WAKE_LOCK" />
Una dintre cele mai importante componente ale cadrului media este clasa
MediaPlayer. Un obiect din această clasă poate prelua, decoda și reda atât audio
cât și vide o cu configurare minimă.
Sprijină mai multe surse media, cum ar fi:
• Resurse locale ;
• URI internă , cum ar fi unul pe care l -ați putea obține de la un Resolver de
conținut ;
• Adresele URL externe, un exemplu fiind streaming ;
Iată un exemplu de redare a unui fi șier audio disp onibil ca resursă primă
locală salvat în d irectorul res/raw/aplicație :
MediaPlayer mediaPlayer = MediaPlayer. create(this, R.raw. guitar);
mediaPlayer.start();
3.4 Python
Python este un limbaj de progr amare foarte popular , oferind posibili tatea
programării structura te dar și orientate pe obiect incluzând și elemente din
paradigma funcțională. Este un limbaj de scripting, ceea ce înseamnă că este
interpretat și nu compilat, economisind mult timp în procesul de dezvoltare și
debugging.
Limb ajul combină o putere remarcabilă cu o sintaxă foarte clară. Are module,
clase, excepții, tipuri dinamice și garbage collection. Python oferă module pentru o
33
gamă foarte mare de funcționalități, de la cele de bază pentru lucrul cu șiruri și
fișiere, până l a cele pentru lucrul cu procese, thr eaduri, sockets, serializare . Multe
dintre aceste module oferă o interfață foarte similară programării la nivel de sistem
din C astfel încât funcțiile Python au același nume si aproximativ aceiași parametrii
ca cei pentr u funcțiile din C pentru apeluri de sistem.
Python oferă tipuri de d ate numerice, booleene, șiruri , dicționare, fișiere,
clase, instanțe și excepții. Din punct de vedere al tipării Python folosește tipuri pentru
obiecte, însă la definirea variabilelor nu trebuie precizat tipul acestora.
Constrângerile de tip sunt verificate la execuție, astfel încât pot apărea erori
și excepții generate de folosirea unui tip necorespunzător în atribuiri și excepții.
Python asociază numele unei variabile cu un obiect, care poate fi număr, șir de
caractere sau ceva mai complex. Când este folosită o variabilă, tipul acesteia este
tipul obiectului cu care este asociată. Este greșită folosirea într -o expresie a unei
variabile care nu a fost asociată cu un obiect.
i = 15 # va f i de tip Integer
i = "Hello" # va fi de tip String
Particularități de lucru cu șirurile de caractere:
• pot fi concatenate folosind simbolul +
• pot fi multiplicate folosind caracterul *
• se poate folosi operatorul % pentru formatarea șirurilor similar
printf-ului din C
• modulul string oferă șiruri predefinite și metoda format pentru
crearea șirurilor
• modulul str oferă metode de lucru cu șirurile precum index,
replace, split, isdigit, format
• modulul re – regular expressions este util pentru căutarea sau
separarea unor substringuri folosind expresii regulate.
În Python se poate lucra cu numere întregi și numere în virgulă mobilă.
Numerele întregi dintr -o expresie se convertesc automat în numere în virgulă mobilă
dacă este necesar. Cele patru tipuri numeric e int, long, float și complex și operațiile
acestora sunt descrise în API. În afară de operațiile aritmetice standard (+, -,*,/),
există operatori pentru modulo % și pentru ridicarea la putere **.
34
3.5 Apache Server
Apache HTTP Server, denumit în mod ob ișnuit Apache , este un software
open -source pentru servere web pe platformă deschisă, lansat în condițiile Apache
License 2.0. Apache este dezvoltat și întreținut de o comunitate deschisă de
dezvoltatori, sub auspiciile Apache Software Foundation.
Serverul Apache HTTP este cross -platform, construit pentru sistemele de tip
Unix precum și Windows. Cu toate acestea, începând cu 1 iunie 2017, 92,26% din
toate copiile de pe serverul Apache HTTPS ruleaz ă pe distribuții Linux. Versiunea
2.0 a îmbunătățit suportul pentru non -Unix, de ex. Windows ș i OS / 2 (și
eComStation). Versiunile vechi ale Apache au fost portate pentru a rula, de ex.
OpenVMS și NetWare.
Inițial bazat pe serverul NCSA HTTPd, dezvoltarea Apache a început la
începutul anului 1995 după ce s-a lucrat la codul NCSA. Apache a jucat un rol cheie
în creșter ea inițială a World Wide Web , depășind repede NCSA HTTPd ca server
dominant HTTP și a rămas cel mai popular din aprilie 1996. În 2009, a devenit primul
software de servere web care este utilizat de peste 100 de milioane de site -uri web.
Începând cu iulie 2016, Apache a rămas cel mai utilizat software de server
web, estimat iv servește aproximativ 46% din toate site -urile web active .
În loc să implementeze o singură arhitectură, Apache oferă o varietate de
module de procesare multiplă (MPM), care permit Apache -ului să ruleze într -un
proces hibrid (proces și thread), pentru a se potrivi mai bine cu ceri nțele fiecărei
infrastructuri.
Aceasta implică faptul că alegerea MPM corectă și configurarea corectă sunt
importante. În cazul în care trebuie realizate compromisuri în ceea ce privește
performanța, designul Apache are rolul de a reduce latența și de a mări capacitatea
de producție, relativ la manipularea a mai multor solicitări, asigurând astfel o
prelucrare c onsecventă și fiabilă a cererilor în cadrul unor termene rezonabile.
35
3.6 PHP
PHP este un limbaj de programare destinat în primul rând Internetului,
aducând dinamică unei pagini web. Este unul dintre cele mai importante limbaje de
programare web open -source, este gratuit , în plus, utilizatorii pot acționa liber asupra
procesului de dezvoltare și server -side codul sursă nu se rulează pe calculatorul
celui care vizualizează pagina, ci pe ser verul web .
Numele să u este un acronim recursiv: “PHP este un Hyper text Processor”.
Limbajul a fost început în 1994 ca o extensie a limbajului server -side Perl, și apoi ca
o serie de CGI -uri compilate, de către Rasmus Lerdorf, pentru a genera un
curriculum vitae și pentru a urmări numărul de vizitatori ai unui site. A evo luat apoi în
PHP/FI 2.0, dar proiectul open -source a început să ia amploare după ce Zeev
Suraski și Andi Gutmans au lansat o nouă versiune a interpretorului PHP în vara
anului 1998, această versiune primind numele de PHP 3.0. Tot ei au schimbat
numele în a cronimul recursiv amintit mai sus, până atunci PHP -ul fiind cunoscut ca
„Personal Home Page tools”. În prezent este utilizată versiunea 6 a acestui limbaj.
Prin CGI (Common Gateway Interface) se înțelege o interfață a unui server
de web, care extinde func ționalitățile acestuia. CGI nu se referă la un anumit limbaj
de programare, ci definește un modul standardizat, prezent în cadrul unui server
HTTP. Prin intermediul acestui modul se stabilesc regulile prin care server -ul va
pasa datele primite de la un uti lizator către o aplicație scrisă într -un anumit limbaj de
programare, pentru ca apoi să întoarcă rezultatele acestei aplicații înapoi la
utilizator. Limbajul PHP, în marea majoritate a cazurilor, se folosește sub formă de
secvențe de cod inserate în cadrul unui document HTML.
Structura unui script PHP este foarte asemănătoare cu cea a unui cod scris
în limbajul C, mai ales în sensul în care structurile de programare au aceeași sintaxă
și aceeași funcționalitate.
Rolurile de bază ale unui script PHP consta u în aceea că scipt -ul poate
prelua date trimise de către o pagină web de la un client (în general, datele pot fi
trimise de către o pagină web prin intermediul formularelor) și de a executa o
secvență de program în urma căreia va rezulta un cod HTML, cod pe care clientul îl
va primi sub forma unei pagini web. Clientul nu va avea acces la codul efectiv al
script -ului, ci, prin faptul că acesta se află pe server și se rulează tot pe acesta, va
primi direct HTML -ul generat de script.
36
3.7 Bash scripting
Bash este un limbaj de comandă scris de Brian Fox pentru proiectul GNU ca
înlocuitor de software liber pentru shell -ul Bourne. Lansat în anul 1989, a fost
distribuit pe scară largă ca shell -ul de conectare implicit pentru majoritatea
distribuțiilor Linux și ma cOS-ul Apple (fostul OS X). O versiune este dispon ibilă și
pentru Windows 10.
Bash este un procesor de comandă care rulează în mod obișnuit într -o
fereastră de text, în care utilizatorul tipulează comenzi care generează acțiuni. Bash
poate, de asemenea, s ă citească și să execute comenzi dintr -un fișier, numit script.
Ca toate shell -urile Unix, suport a globalizarea nume lui de fișier, pipe-uri, substituție
de comandă, variabile și structuri de control pentru testul condițional și iterație.
Cuvintele cheie, s intaxa și alte c aracteristici de bază ale limbajului sunt copiate din
sh. Alte caracteristici, de exemplu, istoric, sunt copi ate din csh și ksh. Bash este
compatibil cu POSIX, dar cu un număr de extensii.
O eroare de securitate din Bash, datând de la ve rsiunea 1.03 din august
1989 , numită Shellshock, a fost descoperită la începutul lunii septembrie 2014 și a
condus rapid la o serie de atacuri pe Internet . Modificările pentru remedierea erorilor
au fost puse la dispoziție la scurt timp după identificarea ero rilor, dar nu toate
computerele au fost actualizate.
Sintaxa comenzii Bash este o suprasetare a sintaxei comenzii shell Bourne.
Bash poate executa marea majoritate a script -urilor de shell Bourne fără modificări,
cu excepția script -urilor de shell Bourne c are se blochează în comportamentul
sintaxelor marginale interpretate diferit în Bash sau în încercarea de a rula o
comandă de sistem care să corespundă unui nou Bash . Sintaxa comenzii Bash
include idei desenate de la shell -ul Korn (ksh) și shell -ul C (csh) , cum ar fi editare a
liniei de comandă, istoricul comenzilor, stiva directorului, variabilele $RANDOM și
$PPID și sintaxa de substituire a comen zii POSIX .
Atunci când un utilizator apasă tasta tab în cadrul unei comenzi interactive,
Bash folosește automat linia de comandă pentru a se potrivi parțial cu numele
programelor, nume le de fișiere și nume le de variabile. Sistemul de completare a
liniei de comandă Bash este foarte flexibil și ușor de personalizat. E ste adesea
folosit cu funcții care completează argu mentele și numele de fișiere pentru anumite
programe și sarcini.
Bash poate efectua calcule întregi ("evaluarea aritmetică") fără a genera
procese externe. Utilizează comanda ((…)) și sintaxa variabilă $ ((…)) pentru acest
scop. Sinta xa simplifică redi recționarea I /O. De exemplu, poate redirecționa simultan
ieșirea standard (stdout) și eroarea standard (stderr) folosind operatorul &>. Acest
lucru este mai simplu de tip decât comanda Bourne echivalent "comanda> fișier 2>
& 1".
37
Bash acceptă substituirea procesului utilizând sintaxa <(comanda) și>
(comanda), care înlocuiește ieșirea (sau introducerea) unei comenzi unde este
folosit în mod normal un nume de fișier. Acest lucru este implementat prin
intermediul țevilor / proc / fd / unnamed pe sistemele care susțin acest lucru sau prin
conductele numite temporar acolo unde este necesar .
3.8 CMU Sphinx
CMU Sfinx, denumit și Sfinx pe scurt, este termenul general pentru a descrie
un grup de sisteme de recunoaștere vocală dezvoltate la Universitatea Carnegie
Mellon. Acestea includ o serie de recunoașteri de vorbire și un antrenor de model
acustic (SphinxTrain).
În 2000, grupul Sphinx de la Carnegie Mellon s -a angajat să deschidă câteva
componente de recunoaștere vocală, inclusiv Sfi nxul 2 și mai târziu Sfinxul 3 în anul
2001 . Decodoarele de vorbire vin cu modele acustice ș i aplicații pentru eșantioane.
Resursele disponibile includ, în plus, software -ul pentru formarea acustică a
modelului, compilația modelului de limbă și dicționarul de pronunț ie a domeniului
public.
Sfinxul este un sistem de recunoaștere independent de difuzor, care
utilizează modele ascunse Markov acustice (HMM) și un model de limbă statistică n –
gram. A fost dezvoltat de Kai -Fu Lee.
Sfinxul a prezentat fezabilitatea recunoașterii vocabulare de lungă durată, a
cărei posibilitate era în litigiu la momentul respectiv, anul 1986 . Sfinxul este de
interes istoric; aceasta a fost înlocuită cu performanțe de versiuni ulterioare. Un
articol de arhivă descrie sistemul în detaliu.
Sphinx 4 este o re -scrie re completă a motorului Sphinx cu scopul de a oferi
un cadru mai flexibil pentru cercetarea în recunoașterea vocală, scrisă în întregime
în limbajul de programare Java. Sun Microsystems a sprijinit dezvoltarea proiectului
Sphinx 4 și a contribuit cu expert iza de inginerie software la proiect. Participanții au
inclus persoane fizice la MERL, MIT și CMU.
38
Obiectivele actuale de dezvoltare includ:
• dezvoltarea unui nou model acustic ;
• implementarea adaptăr ii difuzorului ;
• îmbunătățirea gestionării configurației ;
• creearea unei interfețe grafice bazată pe grafic pentru proiectarea
sistemului grafic ;
3.9 Cron job scheduler
Cron este un programator de timp bazat pe timp în sistemele de operare de
tip computer Unix. Persoanele care configurează și întrețin medii de s oftware
utilizează cron pentru a programa lucră ri, pentru a rula în mod periodic la ore, date
sau intervale fixe. De obicei, aceasta automatizează întreținerea sau administrarea
sistemului, deși natura sa generală o face utilă pentru lucruri precum descărc area
fișierelor de pe Internet și descărcarea de e -mail la intervale regulate. Originea
numelui cron este din cuvântul grec pe ntru timp, chronos .
Cron este cel mai potrivit pentru programarea sarcinilor repetate.
Programarea sarcinilor unice este adesea re alizată mai ușor utilizând utilitarul
asociat.
Cron es te condus de un fișier crontab sau tabel cron , un fișier de configurare
care specifică comenzile shell pentru a rula periodic pe un anumit program. Fișierele
crontab sunt stocate în cazul în care sunt p ăstrate listele de locuri de muncă și alte
instrucțiuni pentru daemonul cron.
Utilizatorii pot avea propriile fișiere crontab individuale și de multe ori există
un fișier crontab la nivel de sistem, de obicei în /etc sau un subdirector de /etc pe
care d oar administratorii de sistem îl pot edita.
39
Fiecare linie a unui fișier crontab reprezintă o lucrare și arată astfel:
┌───────────── minute (0 – 59)
│ ┌───────────── hour (0 – 23)
│ │ ┌───────────── day of month (1 – 31)
│ │ │ ┌───────────── month (1 – 12)
│ │ │ │ ┌───────────── day of week (0 – 6) (Sunday to Saturday;
│ │ │ │ │ 7 is also Sunday on some systems)
│ │ │ │ │
│ │ │ │ │
* * * * * command to execute
3.10 Bing Speech API
API-ul poate fi direcț ionat pentru a porni și recunoaște sunetul provenit de la
microfon în timp real, recunoaște sunetul provenit de la o altă sursă audio în timp
real sau pentru a recunoaște sunetul dintr -un fișier. În toate cazurile, streaming -ul în
timp real este disponibil , astfel încât audio -ul este trimis către server, iar rezultatele
recunoașterii parțiale sunt returnate.
API-urile Speech to Text transmit fluxurile aud io în text pe care aplicația le
poate afișa utilizatorului sau poate acționa ca intrări de comandă.
API-urile Speech To Text au două căi de comunicare:
• API REST – util pentru aplicațiile care trebuie să convertească comenzi
scurte vorbite în text, dar nu au nevoie de feedback simultan de către
utilizatori. API -ul REST utilizează codarea HTTP chunked -transf er pentru
a trimite octeții audio către serviciu.
• API WebSocket – util pentru aplicații, necesită o experiență îmbunătățită a
utilizatorului, utilizând puterea conexiunii WebSocket full duplex. Aplicațiile
care utilizează acest API obțin acces la funcții a vansate precum ipotezele
de recunoaștere a vorbirii. Această alegere API este, de asemenea, mai
bună pentru aplicațiile care trebuie să transcrie mai multe pasaje audio.
40
4. Structuri de date
Pentru a putea utiliza eficient datele, trebuie să avem grijă la modul în care le
stocăm. O structură de date repr ezintă un mod de organizare a informațiilor ce are
ca scop creșterea eficienței și îmbunătățirea modului în care folo sim aceste
informații. Stivele, cozile, listele, arborii, heap -urile, vectorii, tabelele de disperie sunt
cele mai cunoscute structuri de date folosite în programarea modernă.
De asemenea, în majoritatea limbajelor de programare putem adăuga
structuri de date noi, folosind clasele. Astfel, fiecărei structuri de date nou definită îi
putem adă uga câmpuri sau metode proprii.
4.1 Vectori
In informatică, un vector este o structură de date ce constă într -o colecție de
elemente, fiecare dintre acestea indentificate de o cheie. În imaginea de mai jos
avem un exemplu de vector:
Adresa de memorie a primului element din vect or este numită adresă
“fundație ”. Fiecare dintre adresele celorlalte elemente sunt succesori ai adresei
“fundație ” și pot fi calculate în funcție de tipul de date pe care îl stocăm în vector.
Spre deosebire de listele înlănțui te, vectorii au o performanță mai ridicată
când vine vorba de accesarea datelor deoarece toate elementele se află în zone
apropiate de memorie, deci putem obține ușor valoarea unui element dacă știm
cheia acestuia.
41
4.2 Liste înlănțuite
Listele înlănț uite, cele mai simple și mai comune structuri de date, reprezintă
o colecție liniară de informații, numite noduri, care sunt legate între ele prin
intermediul pointerilor. Această structură permite inserarea și ștergerea informațiilor
în mod rapid, însă ac cesarea acestora se realizează mai dificil decât la vectori, de
exemplu.
Listele înlănțuite sunt foarte des folosite pentru implementarea altor tipuri de
date abastracte, precum: stivele, cozile, arborii, etc. Principalul beneficiu pentru care
listele sun t folosite uneori mai des decât vectorii este faptul că elementele pot fi
șterse sau adăugate fără a realoca memoria sau a reorganiza întreaga structură. Pe
de altă parte, există și dezavantaje ale acestei structuri de date, iar una dintre ele
este faptul că listele înlănțuite nu permit acces aleator la elementele acesteia, astfel
că în momentul în care se dorește extragerea ultimei valori din listă, de exemplu,
trebuie să parcurgem toate elementele.
Listele înlănțuite se împart în:
• Liste simplu înlănțuit e – sunt acele liste în care fiecare nod a re o
singură legătură, aceasta fiind către nodul următor. Un punct slab
al acestei structuri de date este faptul că lista nu poate fi parcursă
în mod eficient în ordine inversă (de la ultimul element la primul).
• Liste dublu înlănțuite – sunt similare listelor simplu înlănțuite, doar
că acestea au pentru fiecare nod, pe lângă legătura spre nodul
următor, și o legătură spre nodul anterior. Sistemele de operare
moderne folosesc aceste tipuri de date pentru a ține refe rințe către
procesele active, fire de execuție sau alte obiecte dinamice.
• Liste circular înlănțuite – care sunt de fapt liste simplu înlănțuite
(sau dublu înlănțuite) în care ultimul nod pointează către primul.
42
4.3 Expresii regulate
Se numeste expresi e regulată o secvență de caractere care definește un
șablon de căutare. Acest concept a apărut în anul 1950, ajung ând în prezent să fie o
unealtă indispensabilă în programare și nu numai, fiind suportat de majoritatea
limbajelor de programare (C#, Java, Py thon, C++, etc).
Denumită și pattern, o expresie regulată este folosită pentru a specifica un
anumit set de string -uri necesar pentru un anumit scop.
De exemplu, pentru a specifica string -urile: “Gray” și “Grey”, putem folosi
pattern -ul Gr(a|e)y și spun em că acest pattern este valid pentru ambele string -uri.
Operații folosite pe expresiile regulate:
• | (bară verticală) reprezintă OR boolean. De exemplu, un pattern
valid pentru string -urile “r oșu”, “verde” este “rosu|verde”;
• . (punct) reprezintă AN D bool ean;
• ? (semnul întrebării) este un cuantificator și indică cel mult o
apariție a simbolului anterior. De exemplu, pentru string -urile
“casă” și “cască”, avem pattern -ul “casc ă”;
• (asterisk) este tot un cuantificator și indică zero sau mai multe
apariții ale simbolului anterior;
• + (plus) de asemenea cuantificator, indică una sau mai multe
apariții ale elementului precedent. Expresiile regulate descriu , de
asemenea, limbaje regulate;
Pentru a defini un limbaj regulat, avem nevoie de următoarele structuri:
• Mulțimea vidă ∅;
• Caracterul vid ƛ;
• Caracterul simplu, îl notăm “a” ;
• Regula de concatenare;
• Regula de reuniune;
Iterația Kleene . Exemple de limbaje regulate:
• x | y* – reprezintă mulțimea: {ƛ, x, y, yy, yyy, … } ;
• (0 | 1)* – reprezintă toate stringurile care conțin doar simbolurile 0
sau 1, la care adăugăm simbolul vid;
43
Există cel puțin trei algoritmi care verifică dacă un string este valid printr -o
expresie regulată:
• Transformarea automatelor finite nedeterministe ( NFA) în automate finite
deterministe ( DFA) este cel mai vechi, dar cel mai rapid dintre algoritmi.
Odată construit DFA -ul, putem rula string -ul de intrare începând cu primul
simbol apoi avansând pe rând cu câte încă un simbol. Pentru o expresie
regulată de dimensiune m, memoria necesară construirii DFA-ului este O
însă poate rula pentru un stri ng de dimensiune n în timp O(n);
• Simularea NFA -ului este al doilea algoritm și presupune construirea
fiecărei stări a DFA -ului atunci când se cere, apoi renunțarea la ea în
următorul pas. Acest lucru scade complexitatea exponențială cerută de
construirea DFA -ului, însă tim pul de execuție crește la O(mn);
• Verific area folosind backtracking -ul este al treilea algoritm, însă este
ineficient deoarece timpul de rulare poate fi exponențial în multe cazuri.
Expresi ile regulate sunt folosite des în procesarea textelor, validarea
datelor, parsarea simplă, syntax highlighting (colorarea cod -ului de către
compilator în funcție de cuvintele che ie folosite), web scraping, etc;
4.4 MultiThreading
Multithreading este un model de programare și execuție care permite mai
multor thread -uri sau secvenț e de instrucțiuni independente să existe în contextul
aceluiași proces. Folosind multithearding putem folosi execuția paralelă pe un sistem
multiprocesor, nu trebuie făcută confu zia într e paralelism și multithreading, greșe ală
pe care multă lume o comite .
Multithreading se poate face pe un computer cu un singur procesor însă nu
este posibil paralelismul decât pe un sistem multiprocessor.
Avantajele folosiri modelului de programa re multithreading:
• Daca un program ce ruleaza pe un singur thread are apelata o
functie a carei timp de executie este foarte mare, programul se va
“bloca” asteptand ca thread -ul principal sa fie deblocat. Dacă
folosim multithreading și întâmpinăm o astfel de problemă, doar
thread -ul cu problemă se va bloca iar celelalte vor rula în
continuare. În aceeași categorie întră și blocarea fluxului I/O;
44
• Permite folosirea paraleli smului pe sisteme multiprocesor;
• Aplicatia poate servi clienti in paralel, consum mic d e resurse ;
Dezavantajele modelului de programare multithreading:
• Exista situatii cand doua thread -uri folosesc aceiasi resursa in
paralel, iar datorita unei proaste sincronizari apare procesul de
“deadlock”, situație în care două thread -uri așteaptă unul pe
celălalt să își termine execuția însă niciu nul nu acționează în acest
sens;
• Operatie ilegala rulata pe un thread poate distruge intreg procesul;
5. Aplicatia Android
5.1 Context
Tehnologia trebuie să evolueze în mod continuu, iar scopul acestei evo luții
este să creeze un set de facilități de care oamenii să s e poată folosi oricând pentru a
își ușura munca. Aplicatia “Coffee on Time” a fost cr eeată cu un astfel de scop,
ajutâ nd utilizatori să își poată î ncep e dimineața mai rapid ș i mai bine dispusi.
Sunt situaț ii în care nu am dormit cat ne -am dorit, iar trezirea de dimineață
poate fi uneori dificilă , de aceea “Coffee on Time” obligă utilizatorul să se deplasaze
pană la cafetieră și să ii comunice acesteia cu vântul “STOP” care semnifică oprirea
alarm ei telefonului.
Pe langă funcționalitatea menționată mai sus, ce este folosită în special
dimineața, aplicația beneficează și de opțiunea de a îți prepara cafeaua de la
distanț a în orice alt moment al zilei prin ap ăsarea unui singur buton ce selecteaz ă
tipul de cafea dorit ă.
În opinia mea, o astfel de aplicație reprezintă o idee de viitor ce poate fi foarte
utilă in viața reală, deși trebuie dezvoltată în continuare pentru a îș i atinge potențialul
maxim. Existenț a ei în casa oricărei persoane ne poate face viața mai usoară,
economisind timp ș i fiind mai practici.
Unul dintre motivele pentru care piaț a ar av ea nevoie de o astfel de aplicație
ce controlează device -urile IoT este de a câștiga timp personal, înlocuind acț iunile
noas tre cu cele ale roboților. C ând ne tr ezim avem deja cafeaua pregatită și putem
45
obține instant informaț iile ce ne -ar interesa în ziua respectivă printr -o simplă
comandă vocală .
5.2 Caracteristici
Principalele caracteristici ale aplicației sunt:
• Transf ormarea inputului audio în text;
• Transformarea textului în output audio;
• Pair device î ntre mobile si Rasbperry PI ;
• Controlarea prin comanda vocală;
• Oprirea GPIO prin comandă vocală ;
• Pornirea GPIO prin comandă vocală;
• Cautarea informaț iilor pe internet folosind Bing Speech API ;
5.3 Func tionalite
Primul ecran ce îi este afișat utilizatorului conține cele 4 opț iuni de alegere:
• Morning Coffee
• Make Coffee
• Pair device
• Continue with facebook
46
Înainte de a folosi opțiunile aplicației, pe langă “Continue with Faceboo k”,
utilizatorul este ob ligat să facă “Pair device” cu Raspberry Pi. Încă din fiș ierul
“/etc/rc.local” care este rulat la pornirea Raspberry Pi este executa t un script B ash
ce porneș te ca proces î n background un script Python ce iniț ializeza socket -ul de
bluetooth cu numele “rasp berrypi”.
47
Exemplu initilizare socket bluetooth:
server_sock = BluetoothSocket(RFCOMM)
server_sock.bind(("", PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "94f39d29 -7d6d -437d -973b -fba39e49d4ee"
advertise_service(server_so ck, "SampleServer",
service_id=uuid,
service_classes=[uuid, SERIAL_PORT_CLASS],
profiles=[SERIAL_PORT_PROFILE]
)
Aplicația mobilă verifică dacă telefonul este conectat la in ternet pentru a citi
SSID -ul rețelei curente, urmănd ca utilizatorul să introducă manual parola WI -FI la
care este conectat, pentru a putea trimite catre Raspberry Pi creden țialele de
conectare la aceiasi reț ea. Apoi sunt scanate prin Bluetooth to ate device -urile din
apropiere ș i se conecteaza la cel cu numele de “raspberrypi ”, Raspberry Pi făcâ nd
automat “trusted device ” cu telefonul. Odată creeat un canal de comunicare î ntre
cele două device -uri, aplicația mobile trimite credențialele de internet că tre
Raspb erry Pi prin Bluetooth, urmând ca Raspberry Pi sa scrie î n fisierul
“/etc/wpa_supplicant/wpa_supplicant.conf” datele primite, într -un final executâ nd
comenziile:
• sudo systemctl daemon -reload
• sudo service networking restart
• sudo ifup wlan0
pentru a restarta interfața de internet. După terminarea execută rii comenziilor de mai
sus, este tri mis ca raspuns prin Bluetooth că tre telefon IP local pe care Raspberry Pi
îl primeș te de la rețea, astfel aplicația salvează adresa IP și este folosită la
comunicarea TCP/IP .
Dacă pasul precedent s -a efectuat cu success, util izatorul poate folosi restul
opțiunilor fără nicio restricț ie.
48
Conectarea cu Facebook se face folosind Oauth2 Face book SDK, aplicația
primeș te numele, prenumele, avatarul, email -ul utilizatorului de Facebook, ce vor fi
ulterio r folosite la salvarea datelor într -o baza de date .
49
Activitatea “Morning Coffee” oferă utilizatorului opțiunea de a selecta tipul de
cafea dorită , mome ntan fiind implementate doar două tipuri de cafea ș i anume:
• SHORT COFFEE
• LONG COFFEE
După selectarea cafelei dorite, util izatorul alege ora la care dorește să sune
alarma, astfel încât cafeaua să fie pregatită cu cateva minute î nainte de a s e trezi,
servind cafeaua în timp scurt fără a mai fi nevoie să aștepte să se răcească .
Pentru a programa RasberryPi să prepare cafeaua cu câteva minute î nainte
de a se trezi utilizatorul , se trimite un request de tip HTTP la adresa IP salvată î n
pasul precedent, iar script -ul PHP adaugă în cron un task ce se execută la ora
specificată.
Atunci câ nd cron execută comanda adaugată , trimite printr -un script Python
la GPIO status 1, ceea ce duce la î nchiderea circuitului de curent al cafeteriei printr –
un releu , astfel încât cafeaua începe să se prepare.
Când alarma începe să sune este trimisă o notifi care ce informează
utilizatorul că trebuie să se deplaseze până la cafetieră pentru a îi transmite prin
comandă vocală cuvâ ntul “STOP”, în caz contrar aplicaț ia con tinuă să sune.
50
Activitatea “Make Coff ee” permite prepararea cafelei în orice moment al zilei,
selectând tipul de cafea dorită și apăsând butonul “START”. În timp ce cafeteria
prepară cafeaua, utilizatoru l poate citi diverse informaț ii, acestea se pot preset a din
pagina “Settings” in funcție de preferinț ele fiecaruia.
51
5.4 Evoluț ie
În versiunea 1.0 aplicaț ia constă î ntr-un singur buton prin care se putea seta
alarma telefonului să sune la ora specificată , cafetiera pornind atunci când alarma
incepe să sune. Pe parcurs au fost adăugate opț iunile “Pair Device”, “Make Coffee”
și “Connec ting with Facebook“, prima funcționalitate specificată fiind necesară
pentr u un utilizator ce nu are cunoș tiințe în a programa o astfel de aplicație în care
se operează cafetiera prin intermediul telefonului.
În viitorul apropiat proiectul va ben eficia de al te tipuri de cafea și de o
cafetieră construită pe micropr ocesorul Raspberry Pi, astfel să poată fi cumpara tă ca
un produs fizi c insoțit de o aplicație mobilă disponibilă î n alte sisteme de operare.
6. Aplicaț ia Rasbperry Pi
La baza functionalității aplicației stă Rasbperry Pi, care are rolul de a controla
acțiunile fizice și este cel care transmite comenzile.
Pentru acest proiect am instalat si configurat urmatoarele:
• Canal de comunicare SSH
• Server HTTP
• Socket Bluetooth
• CMU Sphinx pentru recunoaște re vocală
• Configurarea GPIO în mod OUTPUT
Raspberry Pi, face legatura între telefon ș i cafetieră , fiind cea care operează
întreg procesul de preparare al cafelei, pornit sau oprit.
Motivul pentru care am ales să utilizez Raspberry Pi 3 în locul celei de a doua
versiuni, este diferența reprezentată de existența WI -FI-ului și al Bluetooth -ului
incorporate.
52
6.1 Pair device bluetooth
Tehnologia fără fir Bluetooth este o specificație la nivel mondial pentru o
soluție radio cu cost redus, care oferă legături între calculatoarele mobile,
telefoanele mob ile, alte dispozitive portabile și conectivitatea la Internet. Specificația
este dezvoltată, publicată și promovată de către Grupul de interes special Bluetooth
(SIG).
Dispozitivele fără fir cu radiofrecvențe Bl uetooth trebuie să fie asociate între
ele înainte de a putea comunica. Aceasta implică f aptul că se pot descoperi și
eventual, introduce un cod PIN, in cazul proiectului meu, codul PIN nu mai este
necesar.
Microprocesorul foloseste libraria “BlueZ” ce desc hide un port bluetooth care
poate fi descoperit de catre orice device, c onectarea la acesta fiind liberă .
Libraria BlueZ oferă suport pentru straturile și protocoalele de bază Bluetooth.
Este flexibil, eficient și utilizează o implementare modulară.
Are multe caracteristici interesante:
• Implementare completă modulară
• Metoda de procesare simetrică
• Procesarea datelor cu mai multe fire
• Suport pentru mai multe dispozitive Bluetooth
• Abstracție hardware reală
• Interfață standard pentru socket
• Suport de securit ate la nivel de dispozitiv și serviciu
6.2 Speech recognition
Procesul re cunoaș terii automate a vorbiri vizează transform area unui semnal
audio ce conț ine vorbire într-o succesiune de cuvinte. Întelegerea automată a vorbirii
extinde scopul ace steia în cercând să producă informații de natură semantică privind
înțelesul propoziț iei generate de sistem .
Unul di ntre mai importanț i factori de care depinde dificultatea procesului de
transcriere este sarcina de recunoaș tere, aceasta include specificit ate a li mbii,
numărul de cuvinte ce pot fi pronunț ate si incertituninea lingvistică de recunoaș tere.
Diverse limbi vorbite prezintă provocă ri difer ite pentru un sistem de
recunoaștere a vorbirii. În consecință, proiectarea ș i creearea unui s istem de
recunoaștere a utomată a vorbirii trebuie să prevadă ș i colectarea acestor resurse.
53
Recunoasterea automată a vorbirii este unul dintre primele domenii in care
tehnicile de modelare statistică, î n care modelele se cre eaza pe baza unor cantitaț i
mari de date, s -a impus ca și standard. Platforma statistică pentru recunoasterea
automata a vorbirii a fost creată și dezvoltata de -a lungul a două deceni i de mai
multe echipe de cercetatori.
Dicționarul fonetic este utilizat î n partea de dezvoltare a unui si stem de
recunoaș tere, m ai precis l a antrenarea modelului acustic ș i a modelului fonetic. Un
dicționar fonetic este un inst rument lingvistic care specifică modul în care se
pronunță cuvintele unei limbi.
Altfel spus dicț ionarul fonetic face corespondența î ntre forma scrisă și for ma
fonetică a cuvintelor unei limbi. Aceastea trebuie să conțină toate cuvintele p osibile
pentru o anumită sarcină de recunoaștere a vorbirii alături, bineinț eles, de
transcrierile fonetice ale acestor cuvinte.
În cazul de față recuno așterea vocală se fac e folosind libraria “Sphinx”,
folosind limbajul de programare Python3. Script fiind setat pentru a rula chiar după
pornirea microprocesorului, folosește un while loop în care așteaptă să primească o
comanda vocală .
Exemplu de implementare:
r = sr.Recognizer ()
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source)
print("Say something!")
audio = r.listen(source)
result = r.recognize_sphinx(audio, grammar='cale_fisier_gramatica.gram')
if result == 'on':
GPIO.output(17, 1)
elif result == 'off':
GPIO.output(17, 0)
54
6.3 Server HTTP
Acest proiect foloseș te serverul Apache, un server web cu o contribuție
notabilă la dezvoltar ea Internetului . Apache a reprezentat prima alternativă viabilă la
Netsc ape Communications Corporation și a evoluat rapid în funcționalitate și
performanță ca un rival competitiv pentru alte servere web bazate pe Unix.
Scopul principal al serverului Apache este de a permi te o comunicare prin
portul HTTP si de a controla GPIO prin acesta.
55
BIBLIOGRAFIE
• Electronic Systems & T echniques – Second Edition, Autor K.F. Ibrahim,
Editura Teora
• https://ocw.cs.pub.ro/courses/eim/laboratoare/laborator01
• https://en.wikipedia.org/wiki/Java_(programming_language)
• https://en.wikipedia.org/wiki/Raspberry_Pi
• https://en.wikipedia.org/wiki/Wi -Fi
• https://en.wikipedia.org/wiki/Antenna_(radio)
• https://en.wikipedia.org/wiki/Java_(programming_language)
• https://en.wikipedia.org/wik i/USB
• https://en.wikipedia.org/wiki/Light -emitting_diode
• https://en.wikipedia.org/wiki/Bluetooth
• https://en.wikipedia.org/wiki/Bash_(Unix_shell)
• https://en.wikipedia.org/wiki/Object_(computer_science)
• https://en.wikipedia.org/wiki/Java_annotation
• https://en.wikipedia.org/wiki/Java_concurrency
• https://en.wikipedia.org/wiki/Gradle
• https://en.wikipedia.org/wiki/Python_(programming_language)
• https://en.wikipedia.org/wiki/Apache_HTTP_Server
• https://en.wikipedia.org/wiki/PHP
• https://en.wikipedia.org/wiki/Reg ular_expression
• https://en.wikipedia.org/wiki/Thread_(computing)#Multithreading
• https://en.wikipedia.org/wiki /Array_data_structure
• https://en.wikipedia.org/wiki/Linked_list
• http://speed.pub.ro/speed3/wp -content/uploads/2014/02/Indrumar -de-
proiect -PCDTV -v11.pdf
• https://developer.android.com/guide/topics/manifest/manifest -intro.html
• https://developer.android.com/guide/topics/ui/declaring -layout.html
• https://developer.android.c om/guide/topics/ui/ui -events.html
• https://developer.android.com/guide/topics/ui/dialogs.html
• https://developer.android.com/guide/topics/ui/notifiers/notifications.html
• https://developer.android.com/guide/topics/ui/notifiers/toasts.html
• https://developer.an droid.com/reference/android/media/MediaPlayer.html
• http://www.bluez.org/about/
• http://www.descopera.org/scurta -istorie -a-tehnologiei -si-singularitatea –
tehnologica/
56
ANEXE
Anexa 1: Structura aplicației și fi șierele existente în proiect
57
Anexa 2 : Android Layout
<?xml version= "1.0" encoding= "utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res -auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_main"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:paddingBottom= "@dimen/activity_vertical_margin"
android:paddingLeft= "@dimen/activity_horizontal_margin"
android:paddingRight= "@dimen/activity_horizontal_margin"
android:paddingTop= "@dimen/activity_vertical_margin"
app:layout_behavior= "@string/appbar_scrolling_view_behavior"
tools:context= "com.webevo.licenta.MainActivity"
tools:showIn= "@layout/activity_main" >
<Button
android:id="@+id/startClockIntentBtn"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_above= "@+id/makeCoffeBtn"
android:layout_alignParentEnd= "true"
android:layout_alignParentLeft= "true"
android:layout_alignParentRight= "true"
android:layout_alignParentStart= "true"
android:drawableLeft= "@drawable/ic_alarm_on_black_24dp"
android:text="Morning coffee"
android:theme="@style/Pr imaryButton" />
<Button
android:id="@+id/makeCoffeBtn"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentEnd= "true"
android:layout_alignParentLeft= "true"
android:layout_alignParentRight= "true"
android:layout_alignParentStart= "true"
android:layout_centerVertical= "true"
android:drawableLeft= "@drawable/ic_local_cafe_black_24dp"
android:text="MAKE COFFEE"
android:theme="@style/PrimaryButton" />
<Button
android:id="@+id/scanRobotBtn"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentEnd= "true"
android:layout_alignParentLeft= "true"
android:layout_alignParentRight= "true"
android:layout_alignParentStart= "true"
android:layout_below= "@+id/makeCoffeBtn"
android:drawableLeft= "@drawable/ic_bluetooth_black_24dp"
android:text="pair device "
android:theme="@style/PrimaryButton" />
58
<com.facebook.login.widget.ProfilePictureView
android:id="@+id/facebook_profile_photo"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignE nd="@+id/textWelcomeUser"
android:layout_alignLeft= "@+id/textWelcomeUser"
android:layout_alignParentTop= "true"
android:layout_alignRight= "@+id/textWelcomeUser"
android:layout_alignStart= "@+id/textWelcomeUser" />
<TextView
android:id="@+id/textWelcomeUser"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentBottom= "false"
android:layout_below= "@+id/facebook_profile_photo"
android:layout_centerHorizontal= "true"
android:layout_marginTop= "18dp"
android:text="Welcome, guest"
android:textSize= "18sp"
android:textStyle= "normal|bold" />
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_below= "@+id/scanRobotBtn"
android:layout_centerHorizontal= "true"
android:layout_gravity= "center_horizontal"
android:layout_marginTop= "55dp" />
</RelativeLayout >
Anexa 3 : Controlare GPIO Python
import RPi.GPIO as GPIO
import sys
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
status = sys.argv[1]
GPIO.setup(24, GPIO.OUT)
GPIO.output(24, status)
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Coffee on time – Aplicaț ie mobilă & IOT COORDONATOR ȘTIINȚ IFIC STUDENT Andrei Pă un Radu Ionuț Alexandru Bucuresti 2017 2 Cuprins 1. Introducere… [619269] (ID: 619269)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
