Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:cghenea:stonks [2021/06/02 18:43]
eren.murat
pm:prj2021:cghenea:stonks [2021/06/04 19:41] (current)
eren.murat
Line 11: Line 11:
 ====== Descriere Generala ====== ====== Descriere Generala ======
 Se cicleaza prin companiile aflate in portofoliu, iar la un interval de timp este inițiat un http request către API pentru noul simbol, care răspunde cu informațiile cerute într-un JSON. Acest JSON este parsat pe NodeMCU, iar datele sunt pasate prin driverele MAX7219 conectate in serie si ajung la matricea LED. Se cicleaza prin companiile aflate in portofoliu, iar la un interval de timp este inițiat un http request către API pentru noul simbol, care răspunde cu informațiile cerute într-un JSON. Acest JSON este parsat pe NodeMCU, iar datele sunt pasate prin driverele MAX7219 conectate in serie si ajung la matricea LED.
-{{ :​pm:​prj2021:​cghenea:​stonks_schema_bloc.png?​nolink&​700 |}} 
  
 ====== Hardware Design ====== ====== Hardware Design ======
Line 23: Line 22:
  
 Schema electrica: Schema electrica:
-{{ :​pm:​prj2021:​cghenea:​stonks_schema_electrica.png?​nolink |}}+{{ :​pm:​prj2021:​cghenea:​stonks_schema_electrica.png?​nolink&​700 ​|}}
  
 ====== Software Design ====== ====== Software Design ======
 +Mediul de dezvoltare folosit este Arduino IDE, cu configurarile necesare pentru NodeMCU. Pentru afisare am inclus bibiloteca MAX7219_Dot_Matrix.h care contine un alfabet pentru traducerea caracterelor intr-o stare a led-urilor. Biblioteca bitBangedSPI.h implementeaza protocolul SPI si este folosita in cadrul MAX7219_DotMatrix.h pentru a permite conectarea in serie (topologie daisy chain) a mai multor drivere MAX7219.
 +
 +Initializez un display format din chips drivere care au CS conectat pe GPIO2.
 +<​code>​
 +    MAX7219_Dot_Matrix display (chips, 2); 
 +</​code>​
 +
 +Stabilirea conexiunii reprezinta un proces simplu, acesta fiind unul dintre motivele pentru care am ales sa folosesc NodeMCU, in detrimentul unui combo Arduino Uno si ESP8266.
 +<​code>​
 +    WiFi.mode(WIFI_STA);​
 +    WiFiMulti.addAP("​SSID",​ "​password"​);​
 +</​code>​
 +
 +Este timpul sa trecem la loop, unde se intampla magia! La fiecare iteratie, verific intai starea conexiunii.
 +<​code>​
 +void loop(){
 +    if ((WiFiMulti.run() == WL_CONNECTED)) {
 +        // creez un client pentru care trimit cererile
 +        std::​unique_ptr<​BearSSL::​WiFiClientSecure>​client(new BearSSL::​WiFiClientSecure);​
 +        // do more stuff
 +    }
 +}
 +</​code>​
 +
 +Pentru a ma asigura ca utilizatorul primeste informatii relevante, iar in acelasi timp numarul de cereri ramane rezonabil, am decis sa reimprospatez datele o data la un minut. De aceea, la fiecare loop verific daca au trecut 60 secunde de la ultima cerere:
 +<​code>​
 +    if (currentMillis - previousMillis >= interval) {
 +        // execut o cerere pentru fiecare ticker din portofoliu
 +        for (int i = 0; i < NUM_TICKERS;​ ++i) {
 +            String request = "​https://​finnhub.io/​api/​v1/​quote?​symbol="​ + tickers[i] + "&​token="​ + apiToken;
 +            if (https.begin(*client,​ request)) {
 +                // primesc raspunsul, verifica daca este valid si trec la parsare
 +                // ...
 +                String payload = https.getString();​
 +                DynamicJsonDocument doc(1024);
 +                DeserializationError error = deserializeJson(doc,​ payload);
 +                // ...
 +            }
 +            https.end();​
 +        }
 +    }
 +</​code>​
 +
 +DynamicJsonDocument este un buffer folosit in cadrul versiunii 6 de ArduinoJSON pe care il initializez cu capacitatea fixa de 1024 octeti. Functia [[https://​arduinojson.org/​v6/​api/​json/​deserializejson/​|deserializeJson]] parseaza inputul JSON si scrie rezultatul in buffer, intorcand eventual o eroare.
 +
 +La finalul fiecarui loop, afisez textul si il shiftez spre stanga. Acest proces se intampla la un interval de 40 milisecunde prin functia updateDisplay().
 +<​code>​
 +void updateDisplay() {
 +    display.sendSmooth (message, messageOffset);​
 +
 +    if (messageOffset++ >= (int) (strlen (message) * 8)) {
 +        messageOffset = - chips * 8;
 +    }   
 +
 +</​code>​
 +
  
 ====== Rezultate Obtinute ====== ====== Rezultate Obtinute ======
 +//Stonks// se comporta exact cum ma asteptam si imi ofera doar datele esentiale, cu precizie si usurinta. Mi-am propus sa creez un dispozitiv rapid, compact si independent de computer. Am reusit toate acestea cu un NodeMCU, un breadboard care ii ofera integritate structurala si o sursa de alimentare pe breadboard cu doua intrari (DC si USB) pentru a putea aseza device-ul oriunde. La inceputul dezvoltarii,​ l-am proiectat sa functioneze cu 5 drivere MAX7219, acest lucru traducandu-se intr-o rezolutie de 8x40. Din pacate, nu am prevazut incercarile esuate de a lega driverele si am ramas in prezent cu un display de 8x24. Astfel, citirea informatiile devine putin mai dificila, dar conceptul este acelasi si i se poate observa utilitatea in continuare.
 +
 +{{ :​pm:​prj2021:​cghenea:​stonks_res1.jpg?​nolink&​600 |}}
 +{{ :​pm:​prj2021:​cghenea:​stonks_res2.jpg?​nolink&​600 |}}
  
 ====== Concluzii ====== ====== Concluzii ======
 +In concluzie, doresc sa prezint planul de imbunatatire si extindere a //Stonks//. Voi construi un website prin care sa pot controla ticker-ele din portofoliu, trimitand comenzi de add si remove. In plus, voi oferi un nivel nou de utilitate prin posibilitatea afisarii orei si a datelor meteorologice. Toate acestea vor veni intr-o carcasa custom si //Stonks// va fi gata pentru a-si lua locul pe birou!
  
 ====== Download ====== ====== Download ======
Line 35: Line 95:
  
 ====== Bibliografie/​Resurse ====== ====== Bibliografie/​Resurse ======
-<​note>​https://​www.gammon.com.au/​forum/?​id=11516</​note>​+<​note>​ 
 +https://​www.gammon.com.au/​forum/?​id=11516 
 + 
 +https://​arduinojson.org/​v6/​doc/​ 
 + 
 +https://​finnhub.io/​ 
 +</​note>​ 
 + 
 +====== Demo ====== 
 +<​note>​https://​www.youtube.com/​watch?​v=-q5PAhELp_Y</​note>​ 
 + 
  
  
pm/prj2021/cghenea/stonks.1622648624.txt.gz · Last modified: 2021/06/02 18:43 by eren.murat
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0