Sadržaj:
Video: Različit pristup s Nextion -om: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
U svom prvom projektu s Arduino Nano povezanim s Nextion zaslonom osjetljivim na dodir, napisao sam dugi niz naredbi koje će se komunicirati s Nextionom preko serijskog porta, a to je neizbježno ako moramo slati potpuno neovisne naredbe, u slučajnim trenucima.
Moram priznati i da sam više vremena proveo u 'borbi' s Knjižnicama nego bilo što drugo. Tako sam postupno počeo raditi potpuno bez teških ITEAD knjižnica.
Ubrzo sam shvatio da nemam hitnu potrebu obavijestiti Nextion o promjenama atributa vizualnih objekata, ali radije čekam da ih prikupim i pošaljem u Nextion u cjelini, kad dobijem kompletnu grupu.
Pokušat ću se bolje objasniti.
Kad u svom projektu koji se sastoji od 16 tekstualnih oznaka želim neke od njih uključiti ili isključiti, to činim tako da koristim atribut 'bco' koji za uključivanje prelazi (na primjer) iz tamno sive u bijelu (ako je u crni pravokutnik) i obrnuto za isključivanje.
U mojoj aplikaciji smatralo sam beskorisnim slanje 16 naredbi na serijski port u 16 različitih trenutaka, po jednu za svaki 'bco' od 16 signala.
Umjesto toga, radije bih da Arduino prikuplja podatke koji moraju biti 'uključeni' (HIGH), a koji moraju biti 'isključeni' (LOW) u 16-bitnom registru, gdje svaki bit odgovara jednom od 16 signalizacija Nextiona.
Nakon ažuriranja svakog bita registra, prenosim njegovu vrijednost u Nextion, jednu poruku koja sadrži zbirne podatke o 16 elemenata.
Na taj se način komunikacija s Arduina i Nextiona znatno smanjuje jer se u toj jednoj poruci koja se serijski prenosi na Nextion prikupljaju informacije koje bi u protivnom zahtijevale prijenos 16 poruka.
Istina, nije uvijek potrebno ažurirati sva izvješća, ali siguran sam da bi na drugi način izgubili više vremena.
Naravno, svaki bit sadržan u cijelom broju koji je primio Arduino, zaslon Nextion morat će ga povezati sa željenim atributom.
To znači da se kôd mora napisati na zaslonu Nextion, ali ne treba se bojati: ako uspijem …
Zatim postoji dvostruka prednost: Arduino će imati lakši kôd i manje će se baviti serijskom komunikacijom s Nextionom.
Nextion će ih, nakon što primi podatke u jednoj poruci, koristiti mnogo brže nego da čeka 16 poruka. Uključivanje ili isključivanje 16 signala bit će stoga gotovo istodobno s obzirom na najčešći način rada, u kojem vrijeme za nepoznati broj poruka protekne između izvršenja naredbe za prvu signalizaciju i naredbe za posljednju signalizaciju.
Na Nextion zaslonu stvorio sam ovaj sustav na klasičan način, to jest, svaki put okretanje registra 'maske' omogućuje vam pregled svakog od 16 bitova. Kad je ispitivani bit VISOK, signal povezan s tim bitom svijetli na zaslonu i isključuje se kada je bit NISKI.
'Negativan' aspekt ovog sustava je to što je kôd napisan na Nextion zaslonu manje prikladan za dokumentiranje od Arduino koda. Nadalje, Nextion kod riskira da se rasprši po raznim objektima. Morate paziti da odmah dokumentirate ono što radite.
Koristim Notepad ++ za pisanje koda koji zatim kopiram u objekt Nextion koji je gotovo isključivo u tm0 stranice 0.
Sintaksa jezika Nextion ima brojna ograničenja, ali uspijeva ih prevladati ili zaobići s minimalnim naporom te pokušati sagledati probleme s gledišta koja su također neobična.
Kao primjer navodim način na koji Arduino zapisuje registar za prijenos, koji sam napisao na najelementarniji mogući način.
Korak 1: Način prijenosa registra
U datoteci ArduinoCode. PDF pokazujem svu svoju skicu. (Čitanje koda ovdje dolje nije tako jasno)
Ovdje dolje želim samo pokazati na koji način Arduino šalje 16 -bitni registar u Nextion, bez pomoći knjižnica, ali samo poštujući sintaksu koju je opisao ITEAD.
//***************************************************************************************
void NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // šalje 16 prikupljenih bitova na Nextion zaslon
SRSerial.print (InpReg); // šalje 16 prikupljenih bitova na Nextion zaslon
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
SRSerial.write (termin); // 255
}
//***************************************************************************************
Korak 2:.. Ali prije…
Naravno da kôd počinje sa svim deklaracijama i setup ().
Ulazi su INPUT_PULLUP, pa su ulazni prekidači normalno otvoreni, a kada su zatvoreni, primjenjuju GND na odgovarajući ulaz.
(Ovo je moj prvi Instructable i žao mi je što vam mogu pokazati svoj kôd na ovaj loš način. Preuzmite datoteku ArduinoCode. PDF da je vrlo jasna.
Dopustite mi da pričam više o tome
Razvio sam vlastiti način da 'kažem' Nextion zaslonu što mora učiniti. Obično MCU (u mom slučaju Arduino) šalje poruku za svaku varijaciju koja se primjenjuje na atribut bilo kojeg objekta. Ova metoda troši puno vremena na stvari koje nisu uvijek tako hitne za stalno učitavanje serijske linije. Bilo mi je prikladnije da Arduino skuplja u 16 -bitne registre podatke o atributima koji se mogu razlikovati na Nextionu. Otprilike svakih 500 mS, moj Arduino šalje Nextionu jednu poruku koja sadrži 16 bita sadržanih u svakom registru u isto vrijeme. Očito nam je u Nextionu potreban kod koji obrađuje ono što se mora izvršiti. Ova raspodjela zadatka (i koda) omogućuje mnoge druge prednosti. Na primjer, zamislite kako treptati svjetlo! S mojim pristupom je jednostavno: postavite malo u Arduino registar i pošaljite ga na Nextion. Nextion dvostruki registri mogli bi se vrlo rijetko ažurirati s Arduina jer je frekvencija treptanja neovisna o komunikaciji; učestalost treptaja ovisi od objekta Timer u Nextion i može raditi s minimalnom vremenskom bazom blizu 50 mS. Tako mojom metodom možemo treptati svjetlom u Nextionu na relativno visokoj frekvenciji (pretpostavimo 2 Hz), čak i ako moj Arduino šalje poruke svakih 10 sekundi, samo za ekstreman primjer. To može ukazivati na suprotan problem: kako postupiti ako komunikacija ne uspije? Ovo nije predmet ove rasprave, ali već sam riješio ovaj problem s nekom vrstom Watch Doga: jedan unutar Arduino koda, drugi u Nextion kodu.
Treptanje je regulirano Nextion kodom, pri čemu svako svjetlo slijedi njegova pravilna pravila: UKLJUČENO/ISKLJUČENO ili ZELENO/CRVENO ili također mijenjajući napisano unutra (ili drugo). Mogao bih reći neke druge stvari o svom projektu, ali radije bih čekao vaša pitanja, prije nego što dodam previše riječi koje mi nije tako lako prevesti kao što bih to učinio.
Korak 3: Uređivanje Nextion objekata
Evo dijela koda koji sam napisao s Nextion Editor -om na objektu tm0.
Ne bježi nam od ruke da sa 16 bita primljenih od Arduina, Nextion zaslon ne uključuje samo i isključuje signale. Za sada izostavljam objašnjenja kako ne bih zakomplicirao razumijevanje.
Ja sam početnik i zato je bolje preuzeti stranicu Nextion code. PDF umjesto da čitate zbunjeni kôd ovdje dolje. (Žao mi je što mi je ovo prva instrukcija)
Ako želite, možete preuzeti cijeli kôd "HMI" za ovu moju aplikaciju. Naziv datoteke ovog koda je POW1225. HMI. Može naići na vaš Nextion zaslon NX4024T032, ali da biste to razumjeli, morate zaplivati u mnoge objekte i pogledati kod unutar malog prozora uređivača. Tako da mislim da će tako biti lakše pogledati glavni kod, zapisan u datoteci Nextion code. PDF
// Projekt POW1225. HMI 15. svibnja 2019
// vACC (va0) Akumulator
// vINP (va1) Ulazni registar xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Start
tm0.tim = 50 // tm0 Vremenska baza 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // Maska
if (vACC.val! = 0) // Testiraj RDY
{
tRDY.pco = PLAVO // CRVENO
}drugo
{
tRDY.pco = SIVA // tamno SIVA
}
// PWR ***************
vACC.val = vINP.val & 0x0002
if (vACC.val! = 0) // Testiraj PWR
{
tPWR.pco = ZELENO // svijetlo ZELENO
tPON.txt = "UKLJUČENO" // UKLJUČENO
tPON.pco = ZELENO // svijetlo ZELENO
}drugo
{
tPWR.pco = SIVA // tamna SIVA 33808
tPON.txt = "OFF" // OFF
tPON.pco = SIVA // tamna SIVA 33808
}
// SUHO ***************
vACC.val = vINP.val & 0x0004
if (vACC.val! = 0) // Test DRY
{
tDRV.pco = PLAVA // PLAVA
tDRY.pco = PLAVA // PLAVA
}drugo
{
tDRV.pco = SIVA // tamna SIVA 33808
tDRY.pco = SIVA // tamna SIVA 33808
}
// TRČANJE ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = CRVENO // MARCIA CRVENO (uključeno)
tRUN.pco = CRNO // na CRNO
tDIR.bco = CRVENO // DIR CRVENO
tDIR.pco = CRNO // na CRNO
}drugo
{
tRUN.bco = 32768 // MARCIA GREY (isključeno)
tRUN.pco = SIVA // na SIVOJ
tDIR.bco = 32768 // DIR tamno ZELENO 1024
tDIR.pco = SIVA // DIR SIVA
tDIR.txt = "---" // STOP
}
// LIJEVO **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN Desno
{
tDIR.txt = "<<<" // SMIRNO LIJEVO
}
// PRAVO *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN Lijevo
{
tDIR.txt = ">>>" // DIREKTNO DESNO
}
// OBA **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Testiraj oba
{
tDIR.txt = ">>! <<" // UPOZORENO OBA
}
// TEST **************
vACC.val = vINP.val & 0x0020
if (vACC.val! = 0) // Test TEST
{
tTEST.pco = BIJELO // BIJELO
tsw tTEST, 1 // Omogući događaje dodira
}drugo
{
tTEST.pco = SIVA // tamna SIVA 33808
tsw tTEST, 0 // Onemogući dodirne događaje
}
// KVAR *************
vACC.val = vINP.val & 0x0040
if (vACC.val == 0) // Test FAULT
{
tFLT.pco = SIVA // KVARA odsutan
}
if (vACC.val! = 0)
{
tFLT.pco = ŽUTI // GREŠKA prisutna
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Testiraj EME
{
tEME.pco = SIVA // EME odsutan
}
if (vACC.val! = 0)
{
tEME.pco = CRVENO // EME prisutno
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
if (vACC.val! = 0) // Test FERMO
{
tFER.pco = CRNO // CRNO
tFER.bco = ZELENO // ZELENO
}drugo
{
tFER.pco = SIVA // SIVA
tFER.bco = 672 // tamno ZELENO
}
// *******************
Priznanje
Želim zahvaliti Gideonu Rossouwvu jer sam čitajući njegove Instructables brzo stekao dio svojih ciljeva. Hvala gosp. Gideon Rossouwv
Preporučeni:
MCU Pristup internetskoj usluzi putem IFTTT - Ameba Arduino: 3 koraka
MCU Pristup internetskoj usluzi putem IFTTT -a - Ameba Arduino: Pristup internetskoj usluzi lak je posao za pametne uređaje poput android telefona, tableta ili računala, ali nije tako jednostavan za mikrokontrolere jer obično zahtijeva bolju povezanost i procesorsku snagu. Međutim, možemo iskrcati teški dio
Diy makro objektiv s AF -om (različit od svih ostalih DIY makro objektiva): 4 koraka (sa slikama)
Diy makro objektivi s AF-om (različiti od svih ostalih DIY makro objektiva): Vidio sam mnogo ljudi koji rade makro objektive sa standardnim kit objektivom (obično 18-55 mm). Većina njih je leća koja se samo zalijepi na kameru unatrag ili se ukloni prednji element. Za obje ove opcije postoje nedostaci. Za montažu objektiva
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: 6 koraka
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: Hej dečki! U svjetlu nedavnih događanja, naš tim na lokaciji remote.it naporno je razmišljao o idejama kako daljinski rad učiniti bezbolnim i pristupačnim. Osmislili smo sliku remote.itPi SD kartice, SD karticu koju možete staviti u novu
Pristup vašim Solaredge podacima pomoću Pythona: 4 koraka
Pristup vašim Solaredge podacima pomoću Pythona: Budući da se podaci solaredge transformatora ne pohranjuju lokalno, već na poslužiteljima solaredgea, htio sam koristiti svoje podatke lokalno, na ovaj način mogu koristiti podatke u vlastitim programima. Pokazat ću vam kako možete zatražiti svoje podatke na solaredge web stranicama
Daljinski pristup Raspberry Pi: SSH, Dekstop & FTP: 4 koraka
Daljinski pristup Raspberry Pi -u: SSH, Dekstop i FTP: U ovom ćemo članku pogledati 3 različite metode pomoću kojih možete daljinski pristupiti Raspberry Pi -u kako biste mu olakšali rad. Prvi je SSH, koji će vam omogućiti daljinski pristup terminalu. Drugi je remo