This is an old revision of the document!
Student: Gul Farhad Ali Irinel
Grupa: 334CC
Pentru acest proiect, am ales să folosesc un Raspberry Pi Pico W, deoarece aveam nevoie de un microcontroler care să poată utiliza informațiile obținute într-un mod practic.
Rolul unui API este să expună funcționalitatea unui sistem într-un mod organizat.
Platforma care oferă informațiile trebuie să descrie modul în care se poate comunica cu ea prin API. Comunicare cu API-urile alese în cadrul dispozitivelor se face la nivel de HTTP Requests.
Proiectul se bazează pe comunicarea cu mai multe API-uri, printre care și cel de bază - API-ul pus la dispoziție de OpenAI pentru a comunica cu ChatGPT. În momentul de față, este cea mai bună metodă de a comunica cu un AI dintr-un dispozitiv remote cu putere de procesare limitată.
Ideea de la care am pornit a fost lansarea API-ului ChatGPT de către OpenAI care a deschis orizontul și spre dispozitivele mai slabe computațional.
GPT Assistant Speaker este un dispozitiv portabil care preia comenzi din telefon, prin bluetooth și produce răspunsul vocal în 2 limbi posibile (engleză sau română, în funcție de modul selectat). Dispune de funcționalități precum: play la piese de pe youtube, vremea din orice oraș în momentul actual sau din următoarele zile, statistici locale de temperatură și umiditate. De asemenea, poate face request-uri la ChatGPT, să primească răspunsul și să-l transmită prin boxe.
Scopul acestui proiect este acela de a îndrepta atenția și spre această zonă de proiectare cu microcontrolere, zona de proiectare folosind Cloud, care are la bază API-uri.
In plus, acesta poate prelua date de la un modul ESP32 care transmite date in timp real de oriunde exista o conexiune la internet catre un server local. De la acel server local, GPTMA va prelua datele si le va procesa realizand un text mai cursiv.
Lista pieselor folosite:
Proiectarea software a fost realizata in CircuitPython, care dispune de biblioteci si suport pentru ce am realizat in cadrul proiectului. Pentru a realiza un API Request avem în primul rând nevoie de conexiune la internet. După conectarea Pico la internet prin WIFI, avem nevoie de o bibliotecă care să poată face request-uri. Am ales biblioteca adafruit_requests, capabilă de requesturi simple. [1] Tot codul este complex și lung, vom pune accentul pe baza acestuia și anume requestul la ChatGPT. Pentru a face acest request, avem nevoie de preconfigurare de socket, ssl, pentru ca mai apoi să deschidem o sesiune de request. Formatul prompt-ului trimis este de forma: full_prompt = [{“role”: “user”, “content”: payload},], payload fiind textul primit ca input. În cadrul request-ului, trebuie precizat ce model vrem să folosim, noi am folosit gpt-3.5-turbo. De asemenea, am precizat și authorization key-ul, cel obținut de pe pagina celor de la OpenAI. Pentru a trimite request-ul, am folosit requests.post cu parametrii: URL, modelul dorit și mesajul ca JSON și Authorization Key ca header. Răspunsul primit poate fi extras sub formă de JSON din response.content. Fiecare API poate avea un model de împachetare a datelor diferit, la fel și tipul de cerere care trebuie făcută pentru a afla informațiile. Modelul de request de mai sus se aplică mai departe și pentru alte API-uri pe care le-am folosit în proiect cu modificările necesare aferente.
API - uri folosite: ChatGPT Vreme - https://openweathermap.org/api Text-to-speech - https://rapidapi.com/voicerss/api/text-to-speech-1 Youtube API - https://github.com/FarhadGUL06/YoutubeAPI ESP_32_STATS_API - https://github.com/FarhadGUL06/esp32_stats_api
Folosesc proiectul de la IC - ESP32 pe post de tracker pentru statistici de temperature, umiditate, calitatea aerului, acceleratia (In cazul deplasarii) din orice loc cu o conexiune la internet, care trimite date din 10 in 10 secunde catre API-ul ESP_32_STATS_API, date care pot fi preluate ulterior de catre GPT Multimedia Assistant.
Astfel, de oriunde in lume, cu acces la internet, se pot afla date despre un alt loc unde se afla acest tracker.
Schema de comunicare cu API-urile de mai sus:
Un mic demo cu cateva din functionalitatile GPTMA in faza incipienta: Prezentare GPT Multimedia Assistant
Poza cu proiectul la inceputul proiectarii:
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.
[1] https://docs.circuitpython.org/projects/requests/en/latest/api.html [2]