Differences

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

Link to this comparison view

pm:prj2021:cghenea:stonks [2021/05/25 23:48]
eren.murat
pm:prj2021:cghenea:stonks [2021/06/04 19:41] (current)
eren.murat
Line 10: Line 10:
  
 ====== 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 display-ului sub formă de bytes. +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:​schema_bloc_stonks.png?​nolink&​300 |}}+
  
 ====== 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 36: Line 96:
 ====== Bibliografie/​Resurse ====== ====== Bibliografie/​Resurse ======
 <​note>​ <​note>​
 +https://​www.gammon.com.au/​forum/?​id=11516
  
 +https://​arduinojson.org/​v6/​doc/​
 +
 +https://​finnhub.io/​
 </​note>​ </​note>​
 +
 +====== Demo ======
 +<​note>​https://​www.youtube.com/​watch?​v=-q5PAhELp_Y</​note>​
 +
 +
 +
 +
  
  
pm/prj2021/cghenea/stonks.1621975737.txt.gz · Last modified: 2021/05/25 23:48 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