Documente Academic
Documente Profesional
Documente Cultură
Proiect
Informatică Aplicată
Studenți:
Anghel Alexandru-Dan
Sinani Kristi
Grupa 422B
Echipa B19
Considerente teoretice ............................................................................................... 1
Protocoalele și metodele de comunicație utilizate..................................................... 2
WI-Fi ....................................................................................................... 4
HTTP (HyperText Transfer Protocol) ..................................................... 5
JSON (JavaScript Object Notation) ........................................................ 6
Implementare ............................................................................................................. 7
Concluzii .................................................................................................................... 7
Bibliografie ................................................................................................................ 8
Anexe (Codul complet).............................................................................................. 8
Introducere
Considerente teoretice
Modulul ESP32 reprezintă o placă de dezvoltare extrem de versatilă și
puternică, care se bazează pe chipsetul ESP8266 dezvoltat de către compania
Espressif Systems. Acesta combină funcționalitatea unui microcontroler puternic
cu conectivitate Wi-Fi și Bluetooth, oferind o gamă largă de aplicații și posibilități
de dezvoltare.
Pag. 1
Acesta este foarte apreciat în comunitatea tehnologică datorită puterii de calcul
considerabilă, fiind echipat cu un procesor dual-core Xtensa de 32 de biți, ce
rulează la frecvențe de până la 240 MHz.
Memoria flash integrată permite stocarea programelor și datelor, iar modulul
dispune și de o cantitate generoasă de memorie RAM pentru a susține aplicații
complexe.
Modulul dispune de interfețe UART, SPI, I2C și GPIO, permițând conectarea
la o mare varietate de senzori, actuatori și alte dispozitive periferice. Mai mult
decât atât, modulul poate fi programat folosind diverse medii de dezvoltare, cum
ar fi Arduino IDE, MicroPython sau ESP-IDF, oferind dezvoltatorilor o
multitudine de opțiuni și abordări.
Suportul pentru Wi-Fi îl face ușor de conectat la rețele wireless, permițând
transmiterea și recepționarea datelor prin intermediul internetului. De asemenea,
prezența modulului Bluetooth deschide calea către comunicarea fără fir cu
dispozitive periferice, cum ar fi smartphone-uri, tablete sau alte dispozitive
inteligente.
Protocoalele și metodele
de comunicație utilizate
Bluetooth Classic (BTC)
Bluetooth Classic este o tehnologie fără fir de comunicație utilizată pentru a
stabili legături între dispozitive electronice.
Bluetooth Classic utilizează o frecvență radio de 2,4 GHz pentru a permite
transferul de date, la o rată maximă de 3Mbps, între dispozitivele compatibile.
Aceasta oferă o rază de acțiune de aproximativ 100 de metri în condiții ideale.
Pag. 2
Comunicația Bluetooth Classic este o comunicație serială, permițând
transmisia bidirecțională a datelor.
Printre cele mai cunoscute profiluri Bluetooth Classic se numără profilul
pentru căști și difuzoare audio (A2DP și AVRCP), profilul pentru telecomandă
(HID), profilul pentru transfer de fișiere (FTP) și profilul pentru modem (DUN).
Aceste profiluri permit utilizatorilor să se conecteze și să interacționeze cu diferite
dispozitive într-un mod specific și optimizat pentru fiecare aplicație. De asemenea,
Bluetooth Classic oferă și suport pentru protocoale de comunicație serie, cum ar fi
RS-232, permițând conectarea și controlul dispozitivelor cu porturi seriale.
Cu toate acestea, tehnologia Bluetooth Classic a fost înlocuită în mare
măsură de către Bluetooth Low Energy (BLE) în ceea ce privește aplicațiile IoT și
dispozitivele cu consum redus de energie.
Pag. 3
WI-Fi
Tehnologia Wi-Fi (Wireless Fidelity) este o soluție de comunicare
fără fir ce permite dispozitivelor să se conecteze la internet și să comunice între ele
prin intermediul unor rețele locale sau la distanță scurtă. Este una dintre cele mai
răspândite și utilizate tehnologii de conectivitate wireless.
Pag. 4
4. Viteză și performanță: Wi-Fi oferă transfer de date rapid și
performanță sporită în funcție de standardul utilizat (de exemplu,
802.11ac, 802.11ax). Aceasta permite streaming-ul video fără
întreruperi, descărcarea rapidă de fișiere și utilizarea eficientă a
aplicațiilor online.
Pag. 5
• 3xx - redirecționări: această clasă de răspuns/status indică faptul că
acțiunile următoare vor trebui făcute de browser pentru a putea fi îndeplinita
cererea.
• 4xx - erori ale utilizatorilor: această clasă de mesaje/statusuri este
folosită în cazurile în care utilizatorul ar putea greși formularea cererii.
• 5xx - erori de server: răspunsurile/status-urile ce încep cu
unitatea/cifra 5 indică cazurile în care serverul e conștient de greșelile produse sau
e incapabil să execute cererea.
Pag. 6
Implementare
Dacă utilizatorul vrea să afle informații în plus cu privire la vreun film din,
poate sa apese butonul “Details”. În urma apăsării acestui buton, aplicația trimite
iarăși o notificare modulului de tipul “getDetails”, numai că în plus vă trimite și
ID-ul episodului respectiv. Modulul va prelua ID-ul folosind funcția “TeamId” și
va trimite un request de tipul “GetDetails” la URL-ul API-ului, cu parametrul de
ID primit. De asemenea, dacă codul răspunsului este 200, înseamnă că request-ul a
fost îndeplinit cu succes iar modulul va trimite datele către aplicație urmând aceiași
pasi că la metoda de tip getData().
Concluzii
În urma realizarii acestui proiect, am aflat o nouă metoda foarte folositoare
de a extrage datele dintr-un API, utilizând un modul ESP32 și o conexiune WIFI.
Această metoda ajută la o gestionare mai buna a resurselor smartphone-ului
deoarece toate resursele alocate pentru extragerea de date provine din modulul
ESP32. O astfel de metodă de gestionare a datelor previne pe utilizatorul de
smartphone din a accesa baza de date care a fost folosită pentru acest proiect și
totodată din a o modifica, fiind un punct de plecare pentru continuarea de a
dezvolta aplicații de backend.
Pag. 7
Bibliografie
• https://www.espressif.com/sites/default/files/documentation/esp8685-
wroom01_datasheet_en.pdf
• https://en.wikipedia.org/wiki/ESP32
• https://www.bluetooth.com/learn-about-bluetooth/tech-overview/
• https://en.wikipedia.org/wiki/Wi-Fi
• https://www.json.org/json-en.html
• https://southpark.fandom.com/wiki/South_Park •
https://www.google.ro/imghp?hl=ro
Pag. 8
for (int i = 0; i < n; i++) {
DynamicJsonDocument networkDoc(1024);
networkDoc["ssid"] = WiFi.SSID(i);
networkDoc["strength"] = WiFi.RSSI(i);
networkDoc["encryption"] = WiFi.encryptionType(i);
networkDoc["teamId"] = teamId;
String response;
serializeJson(networkDoc, response);
SerialBT.println(response);
}
}
else if (action == "connect") {
String ssid = doc["ssid"];
String password = doc["password"];
WiFi.begin(ssid.c_str(), password.c_str());
unsigned long startTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() ‐ startTime < 10000) {
delay(100);
}
DynamicJsonDocument responseDoc(1024);
responseDoc["ssid"] = ssid;
responseDoc["connected"] = WiFi.status() == WL_CONNECTED;
responseDoc["teamId"] = teamId;
String response;
serializeJson(responseDoc, response);
SerialBT.println(response);
}
else if (action == "getData" || action == "getDetails") {
HTTPClient http;
if (action == "getData") {
http.begin("http://proiectia.bogdanflorea.ro/api/marvel‐movies/movies");
}
else if (action == "getDetails") {
String id = doc["id"];
http.begin("http://proiectia.bogdanflorea.ro/api/marvel‐movies/movie?id=" +
id);
}
int httpResponseCode = http.GET();
Pag. 9
if (httpResponseCode > 0) {
String payload = http.getString();
DynamicJsonDocument responseDoc(15000);
DeserializationError error = deserializeJson(responseDoc, payload);
if (!error) {
if (action == "getData") {
for (JsonVariant v : responseDoc.as<JsonArray>()) {
DynamicJsonDocument movieDoc(1024);
movieDoc["id"] = v["id"];
movieDoc["name"] = v["title"];
movieDoc["image"] = v["cover_url"];
movieDoc["teamId"] = teamId;
String response;
serializeJson(movieDoc, response);
SerialBT.println(response);
}
}
else { // getDetails
DynamicJsonDocument detailDoc(1024);
detailDoc["id"] = responseDoc["id"];
detailDoc["name"] = responseDoc["title"];
detailDoc["image"] = responseDoc["cover_url"];
detailDoc["description"] = responseDoc["overview"];
detailDoc["teamId"] = teamId;
detailDoc["release_date"] = responseDoc["release_date"];
detailDoc["box_office"] = responseDoc["box_office"];
detailDoc["duration"] = responseDoc["duration"];
detailDoc["trailer_url"] = responseDoc["trailer_url"];
detailDoc["directed_by"] = responseDoc["directed_by"];
detailDoc["phase"] = responseDoc["phase"];
detailDoc["saga"] = responseDoc["saga"];
detailDoc["chronology"] = responseDoc["chronology"];
detailDoc["post_credit_scenes"] = responseDoc["post_credit_scenes"];
detailDoc["imdb_id"] = responseDoc["imdb_id"];
String response;
serializeJson(detailDoc, response);
SerialBT.println(response);
}
}
}
http.end();
}
Pag. 10
}
void setup() {
Serial.begin(9600);
SerialBT.begin(btcServerName);
WiFi.mode(WIFI_MODE_STA);
WiFi.disconnect();
}
void loop() {
while (SerialBT.available() > 0) {
char received = SerialBT.read();
if (received == '\n') {
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, data);
if (!error) {
String action = doc["action"];
handleAction(action, doc);
}
data = "";
}
else {
data += received;
}
}
delay(20);
}
Pag. 11