Sari la conținut
ELFORUM - Forumul electronistilor

sursa cu pic


aetius

Postări Recomandate

Acum 5 ore, Thunderer a spus:

Un "mini-webserver cu ESP" ar fi bun ca subiect pentru un topic de genul tutorial ESP. Multumesc in avans pentru orice detaliu.

 

@informer

Buna idee!

Ca să aplici se poate alege o cale bătuta, care este cea mai scurtă, sau să pui mâna pe carte (net). Deşi în general se poate,

 aşa cum am învăţat acum 2 ani să programez jocuri în Java, de data asta amân posibilele aplicaţii WiFi pentru mai târziu,

poate sunt alţi useri interesaţi şi vă mulţumesc pentru ofertă. Mi-a plăcut mult cum aţi schiţat conexiunea.

 

Conexiuni USB dintre PIC-PC îmi este cunoscută şi o schemă bloc generala este in poză.

   1675573571_ConexiuneUSB-PC.thumb.jpg.dffc2827c419681474c68cd099f2ac7b.jpg

Eu am optat pentru PIC, cod C sau Basic, schema, program pe PC in C# sa Basic si in cazul sursei cu PIC codul este extrem de simplu,

 mai ales ca se poate personaliza cu PID-VID.

 // RUTINA USB-HID bidirectionala

     USB_Polling_Proc();
       kk = HID_Read();
     if(kk != 0){
      Vtmp= (unsigned int)readbuff[3];
        tensiune= Vtmp*256 + readbuff[4];
        LongToStr(tensiune,txt);
        RA1_bit=0;
        RA2_bit=1;  //selecteaza afisorul 1 VOLTI
        lcd_Out(2,1,Ltrim(txt));   //txt este directionat spre LCD1 sau LCD2
      Atmp= (unsigned int)readbuff[5];
        curent= Atmp*256 + readbuff[6];
        curent=(curent*100)/25;
        LongToStr(curent,txt);
        RA1_bit=1;
        RA2_bit=0;  //selecteaza afisorul 2 AMPERI
        lcd_Out(2,1,Ltrim(txt));   //txt este directionat spre LCD1 sau LCD2
      }
       for(jnt=0;jnt<64;jnt++){  // initializaare buferi USB
         writebuff[jnt]=0;
        // readbuff[jnt]=0;
       }
      //for(jnt=0;jnt<64;jnt=jnt+2){  //step 2 pentru LSB si MSB sau chiar HSB
      //  writebuff[jnt]=0;        //tensiune/256;
        //kk=0x00FF & tensiune;
      //  writebuff[jnt+1]=0;      //kk;
      //}
     writebuff[0]= 71;   //Goo
     writebuff[1]= 111;  //caracter "o"
     writebuff[2]= 111;  //
    //*******************************************
     writebuff[3]= tensiune/256;   //TENSIUNEA LIMITA
     kk=0x00FF & tensiune;
     writebuff[4]= kk;
    //**********************************************
     writebuff[5]= curent/256;     //CURENTUL LIMITA
     kk=0x00FF & curent;
     writebuff[6]= kk;
    //**************************************************
     writebuff[7]= V3;      //TENSIUNEA in SARCINA are 3x8 bytes
     writebuff[8]= V2;
     writebuff[9]= V1;
    //****************************************************
     writebuff[10]= A3;      //CURENTUL in SARCINA  are 3x8 bytes
     writebuff[11]= A2;
     writebuff[12]= A1;

     kk=HID_Write(&writebuff[0],64);
     if (kk > 0)comenzi=1; // s-a stabilit conexiunea USB si se pot deschide celelalte rutine.

Acesta este tot codul pentru PIC, receptioneaza, seteaza si transmite tensiuni si curenti.

La PC sunt coduri mai complicate ce includ folosirea functiilor dintr-un dll specializat si rutinele grafice cu

 afisarea datelor dar sunt accesibile. In prezent ansamblul functioneaza dar finisez comenzile si aspectul grafic si

 daca este cineva interesat de aceasta faza voi pune pe site codurile si programul de setup pentru PC numit PicPowerSource.exe,

 impreuna cu programul aferent, in total vreo 5Mb.

Orice comentarii, sugestii si observatii sunt binevenite.

Spor!

 

@gsabac

Editat de gsabac
Link spre comentariu
Acum 6 ore, Thunderer a spus:

Un "mini-webserver cu ESP" ar fi bun ca subiect pentru un topic de genul tutorial ESP. Multumesc in avans pentru orice detaliu.

Nu ma prea pricep io la tutoriale, nu-s un bun profesor, am si lipsit la toate orele de pedagogie ca erau facultative si nu le gaseam interesante... :) 

Mi-e mult mai usor ca in masura cunostintelor sa raspund la intrebari punctuale.

Ca idee, un server web simplu pe ESP este un server mono-conexiune care primeste request-uri HTTP de tip GET (adica ii scrii adresa in orice browser) si functie de ce URL + eventuali parametri exista in request, apeleaza direct o anumita functie.

Exemplele de care spune colegul @Liviu M sunt relevante si treaba merge cam asa: considerand adresa serverului ca fiind A.B.C.D daca aceasta adresa este apelata din browser (http://A.B.C.D) se executa o functie corespunzatoare adresei root. Mai precis, codul care in "main" asteapta request-uri face un "goto" la functia "root()" iar dupa ce face ce i-ai scris acolo, se intoarce in main.  Daca de ex. se apeleaza o cale putin diferita, de ex. http://A.B.C.D/fct1 atunci nu se mai executa functia "root()" ci o alta functie asociata cu noul URL(.../fct1), functie care poate face cu totu` altceva... s.a.m.d.   

Se pot scrie oricate functii fiercare apelabila cu un URL diferit.

In interiorul oricarei functii ai acces la parametrii din GET trimisi ca pereche nume / valoare de ex: http://A.B.C.D/fct2?para1=33&para2=66&....

Ar fi bine de folosit utilitarul "WiFiManager" pt. a putea seta dinamic (NU rescriind codul!) parametri SSID si Password daca se schimba WLAN-u`.

Pagina "servita" la inceput poate fi statica in exemple simple dar se poate construi o functie "updatePage" care s-o "refresuiasca" de cate ori e necesar a.i. sa reflecte schimbarile parametrilor device-ului.

Si nah, multe altele dar e prea mult de scris... daca cineva e interesat poate sa intrebe.

Daca un moderator doreste sa faca un topic separat cu asta, io n-am nimic impotriva.

 

Link spre comentariu

Depinde ce construiesti si ce anume inseamna hack-uit in acest context... de ex. la serverul HTTP descris anterior, ORICUM nu exista nici o protectie in interiorul retelei locale, nici macar o autentificare cu user/pass. 

Odata un atacator intrat in LAN-ul cu pricina nu-l impiedica nimeni sa trimita request-uri HTTP la ce device conectat doreste.

Nu-i ca si cand conexiunea cu ele ar fi securizata/criptata or smth.

Da` nah, daca n-ai o protectie suficienta catre internet, asta e, o sa-ti aprinda altcineva becu` in camera... :) .

Io am un nginx la care ma conectez din exterior cu https si de la el am redirectari in LAN... pana acu` ce-am oprit o ramas oprit. 

Sigur ca cei care folosesc device-ul in locuri mai sensibile e bine sa fie informati... numa` sa nu vina ESP-u` gata compromis de la chinezi, cum ne avertizeaza dl. Trump, ca atunci ii mai greu... :rade:.

Editat de informer
Link spre comentariu
Acum 19 ore, Thunderer a spus:

Un "mini-webserver cu ESP"

 

De departe ... cel mai bine structurat proiect (întâlnit de mine pt. ESP8266 and ESP32) este acesta:   https://github.com/rjwats/esp8266-react

 

Sunt 2 proiecte în acestă soluție:.

    A.  Backend -> c++ firmware :: vezi directorul src si config (si implementare comun in lib/framework

    B.  Frontend ->(interfata) :: vezi interface ( foloseste react - o bilioteca javascript relativ mică dar extrem de flexibilă)

 

    Practic la prima accesare se încarcă tot codul de la B (în browserul client - telefon, tabletă, TV etc) după care comunicarea cu A se face prin apeluri simple JSON (ex:  /set/output/5V sau /set/limit/current/0.3A) practic un mic API in firmware (pe care evident poți să-l apelezi direct - ex: să-l  integrezi în node-red)

 

   Dacă nu ai un motiv întemeiat să folosești MCU pe 8 biti  la ~3 USD (pe eBay) ESP8266 e imbatabil pt. mici automatizări unde ai wifi + o priză (ex: un termostat).

 

@gsabac Conexiuni USB dintre PIC-PC îmi este cunoscută şi o schemă bloc generala este in poză.

Nu mai merită construite aplicații clasice PC - în 99% din cazuri faci o treabă mult mai bună cu aplicațiile care rulează în browser (rulează pe orice device , UI-ul (partea de interfata: butoane, liste, etc) este mai simplu de facut si mai flexibilă).

Editat de rlodina
un pic mai condensat sa nu poluam topicul curent - scuze: @gsabac
Link spre comentariu
  • 2 săptămâni mai târziu...

Proiectul merge mai departe si asa arata ultima versiune a sursei virtuale pe PC.

  2008300840_sursavirtualapePC.thumb.png.667edfe9e73b378a9b8b392a113935ba.png

Printre performante vreau precizia de tensiune de +/-1mV si de curent +/-1mA valori foarte dificil de obtinut datorita diferentei mari dintre valorile maxime si minime.

Deocamdata folosesc ADC de 22 biti si DAC de 16 biti, conexiunea bilaterala functioneaza bine, iar comenzile se pot da atit de pe sursa cat si de pe PC. 

 

@gsabac

Link spre comentariu
  • 2 săptămâni mai târziu...

Din aproape in aproape am sincronizat sursa cu modelul USB de pe PC. Click pentru marire.

   1635048449_sursadigitalacuUSB.thumb.png.361ae8335fcdd893e8c4832c6e74c4d6.png

 

In poza se vade precizia mai buna decat mi-am propus, insa mai trebuie testata la multe perechi tensiune-curent

 si in final voi reduce numarul de zecimala la trei. Teste interesante vor fi la viteza de protectie sau la trecere intre sursa

 de tensiune si cea de curent si modul de lucru cu sarcina dinamica.

 

@gsabac

Link spre comentariu

Nu te supăra ca spun dar ceea ce arăți tu este rezoluția nu precizia. Pt măsurat / vizualizat precizia trebuie sa masori tensiunea (curentul) de ieșire cu un alt multimetru de minim 4-5 ori mai precis (preferabil minim 10 ori mai precis). Diferența între valoarea afișată / setata pe sursa și cea măsurată cu multimetrul reprezinta precizia. 

Plus, ca să ai o precizie de 100nanovolti trebuie ca zgomotul de la iesire sa fie de citeva ori mai mic, ceea ce nu-i chiar simplu nici măcar de măsurat ca să nu mai zic de obținut. 

Pe urma la ce-ți folosește o precizie de 1milivolt (sa zicem) cind cu ai sau nu folosești load sensing? 

Editat de sesebe
Link spre comentariu

Un exemplu de cum se creeaza o sursa digitala cu afisaj Nextion touch TFT este prezentat in videoclipuri.

 

 

Partea a doua.

 

 

Se pare ca este extrem de simplu, cu observatia ca un click alaturi, seteaza valori pe care nu le doresti.

 

@gsabac

Link spre comentariu

Asa arata o sursa comandata digital realizata de un amator acum 2 ani, asa ca pentru clatirea mintii.

 Afisoare Nextion, comenzi "touch screen", 0-40V, 0-4A, cu modul PWM comandat de uC.

 

  image.thumb.png.b232cdd8b23b8471e4825fe40e4f96ff.png

 

Are un mod special de programare pentru marimea step-ului, prin selectarea ordinelor zecimale si reglaj fin cu encoder digital.

Autorul nu vrea sa prezinte cum a realizat-o, dar a postat un video de prezentare si reclama.

 

 

Merita felicitari pentru munca de programare si realizare, din stabilitatea cifrelor se vede ca nu are brum pe iesire (poate cu sarcina mica)

 si in total cred ca ar costa cam 500-800 lei.

Asa ceva sunt pe cale sa proiectez si eu, poate imi iese, deoarece sunt ceva necunoscute cu conexiunea afisor-arduino si arduino-stabilizator(fara PWM).

 

@gsabac

Editat de gsabac
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări