विषयसूची:

नेक्स्टियन के साथ एक अलग दृष्टिकोण: 3 कदम
नेक्स्टियन के साथ एक अलग दृष्टिकोण: 3 कदम

वीडियो: नेक्स्टियन के साथ एक अलग दृष्टिकोण: 3 कदम

वीडियो: नेक्स्टियन के साथ एक अलग दृष्टिकोण: 3 कदम
वीडियो: Arduino Attic Fan Control with Nextion Touch Screen GUI // Tutorial Part 1 – Hardware and Wiring 2024, नवंबर
Anonim
Nextion के साथ एक अलग दृष्टिकोण
Nextion के साथ एक अलग दृष्टिकोण

नेक्स्टियन टच डिस्प्ले से जुड़े अरुडिनो नैनो के साथ अपने पहले प्रोजेक्ट में, मैंने सीरियल पोर्ट के माध्यम से नेक्स्टियन को संप्रेषित करने के लिए कमांड की एक लंबी श्रृंखला लिखी थी और यह अपरिहार्य है अगर हमें यादृच्छिक क्षणों में पूरी तरह से स्वतंत्र कमांड भेजने की आवश्यकता है।

मुझे यह भी स्वीकार करना होगा कि मैंने किसी भी चीज़ की तुलना में पुस्तकालयों के साथ 'लड़ाई' में अधिक समय बिताया। इसलिए मैं धीरे-धीरे भारी ITEAD पुस्तकालयों के बिना पूरी तरह से काम करने लगा।

मुझे जल्द ही एहसास हुआ कि मुझे नेक्स्टियन को दृश्य वस्तुओं की विशेषताओं में बदलाव के बारे में बताने की कोई तात्कालिकता नहीं है, लेकिन मैं तब तक इंतजार करना पसंद करता हूं जब तक कि मैं उन्हें एकत्र नहीं कर लेता और उन्हें एक पूरे के रूप में नेक्स्टियन में भेज देता, जब मुझे एक पूरा समूह मिला।

मैं खुद को बेहतर तरीके से समझाने की कोशिश करूंगा।

जब मेरी परियोजना में 16 पाठ्य संकेत होते हैं, तो मैं उनमें से कुछ को चालू या बंद करना चाहता हूं, मैं इसे 'bco' विशेषता का लाभ उठाकर करता हूं, जो स्विच ऑन के लिए (उदाहरण के लिए) गहरे भूरे से सफेद (यदि में) एक काला आयत), और इसके विपरीत स्विच ऑफ करने के लिए।

मेरे आवेदन में मैंने 16 अलग-अलग क्षणों में सीरियल पोर्ट पर 16 कमांड भेजने के लिए बेकार पाया, 16 सिग्नल के प्रत्येक 'बीसीओ' के लिए एक।

मैं इसके बजाय पसंद करता हूं कि Arduino इकट्ठा करें कि कौन से सिग्नल 'ऑन' (हाई) होने चाहिए और कौन से 16-बिट रजिस्टर में 'ऑफ' (LOW) होने चाहिए, जहां प्रत्येक बिट नेक्स्टियन के 16 सिग्नलिंग में से एक से मेल खाती है।

रजिस्टर के प्रत्येक बिट को अपडेट करने के बाद, मैं इसके मूल्य को नेक्स्टियन को प्रेषित करता हूं, एक एकल संदेश जिसमें 16 तत्वों से संबंधित सामूहिक जानकारी होती है।

इस तरह Arduino और Nextion से संचार काफी कम हो जाता है क्योंकि सीरियल पर नेक्स्टियन को प्रेषित उस एकल संदेश में, जानकारी एकत्र की जाती है कि अन्यथा 16 संदेशों के प्रसारण की आवश्यकता होती।

सच है, सभी रिपोर्टों को अपडेट करना हमेशा आवश्यक नहीं होता है, लेकिन मुझे यकीन है कि ऐसा करने में अधिक समय बर्बाद होगा।

स्वाभाविक रूप से प्रत्येक बिट Arduino द्वारा प्राप्त पूर्णांक में निहित है, नेक्स्टियन डिस्प्ले को इसे वांछित विशेषता से जोड़ना होगा।

इसका मतलब है कि कोड नेक्स्टियन डिस्प्ले में लिखा होना चाहिए, लेकिन यह डरने की नहीं है: अगर मैं सफल हुआ …

फिर एक दोहरा फायदा है: Arduino का एक हल्का कोड होगा और Nextion के साथ धारावाहिक संचार में कम व्यस्त होगा।

एक संदेश में डेटा प्राप्त करने के बाद अगला, 16 संदेशों की प्रतीक्षा करने की तुलना में उनका अधिक तेज़ी से उपयोग करेगा। इसलिए 16 संकेतों को चालू या बंद करना सबसे सामान्य मोड के संबंध में लगभग समसामयिक होगा, जिसमें पहले सिग्नलिंग के लिए कमांड के निष्पादन और अंतिम सिग्नलिंग के लिए कमांड के बीच अज्ञात संख्या में संदेशों का समय बीत जाता है।

नेक्स्टियन डिस्प्ले में मैंने इस सिस्टम को क्लासिक तरीके से बनाया है, यानी हर बार एक 'मास्क' रजिस्टर को चालू करने से आप 16 बिट्स में से प्रत्येक की जांच कर सकते हैं। जब बिट की जांच की जाती है, तो उस बिट से जुड़ा सिग्नल डिस्प्ले पर रोशनी करता है और थोड़ा कम होने पर बंद हो जाता है।

इस प्रणाली का 'नकारात्मक' पहलू यह है कि नेक्स्टियन डिस्प्ले में लिखा कोड Arduino कोड की तुलना में प्रलेखित होने के लिए कम सुविधाजनक है। इसके अलावा, नेक्स्टियन कोड के जोखिम विभिन्न वस्तुओं पर बिखरे हुए हैं। आप जो भी करते हैं उसे तुरंत प्रलेखित करने में सावधानी बरतनी चाहिए।

मैं कोड लिखने के लिए नोटपैड ++ का उपयोग करता हूं जिसे मैं नेक्स्टियन ऑब्जेक्ट में कॉपी करता हूं जो लगभग अनन्य रूप से पेज 0 के tm0 में है।

नेक्स्टियन भाषा के वाक्य-विन्यास की कई सीमाएँ हैं, लेकिन यह उन्हें दूर करने या कम से कम प्रयास के साथ उनके आसपास जाने का प्रबंधन करता है और समस्याओं को उन दृष्टिकोणों से देखने का प्रयास करता है जो असामान्य भी हैं।

एक उदाहरण के रूप में, मैं उस तरीके की रिपोर्ट करता हूं जिसमें Arduino प्रेषित होने के लिए रजिस्टर लिखता है, मेरे द्वारा सबसे प्राथमिक तरीके से लिखा जाता है।

चरण 1: रजिस्टर कैसे प्रेषित किया जाता है

ArduinoCode. PDF फ़ाइल में मैं अपना सारा स्केच दिखाता हूँ। (यहां कोड पढ़ना इतना स्पष्ट नहीं है)

यहां नीचे, मैं केवल यह दिखाना चाहता हूं कि किस तरह से Arduino 16 बिट रजिस्टर को नेक्स्टियन में भेजता है, बिना पुस्तकालयों की मदद के, लेकिन ITEAD द्वारा वर्णित सिंटैक्स का सम्मान करते हुए।

//***************************************************************************************

शून्य NexUpd ()

//***************************************************************************************

{

SRSerial.print("vINP.val=");

SRSerial.print(InpReg); // 16 एकत्रित बिट्स को नेक्स्टियन डिस्प्ले में प्रेषित करें

SRSerial.print(InpReg); // 16 एकत्रित बिट्स को नेक्स्टियन डिस्प्ले में प्रेषित करें

SRSerial.write (टर्मिन); // 255

SRSerial.write (टर्मिन); // 255

SRSerial.write (टर्मिन); // 255

}

//***************************************************************************************

चरण 2:.. लेकिन इससे पहले …

.. लेकिन इससे पहले …।
.. लेकिन इससे पहले …।

बेशक कोड सभी घोषणाओं और सेटअप () के साथ शुरू होता है।

इनपुट INPUT_PULLUP हैं, इसलिए इनपुट स्विच सामान्य रूप से खुले होते हैं और बंद होने पर, वे संवाददाता इनपुट पर GND लागू करते हैं।

(यह मेरा पहला निर्देश है और मुझे इस खराब तरीके से आपको अपना कोड दिखाने के लिए खेद है। कृपया फ़ाइल ArduinoCode. PDF डाउनलोड करें कि यह बहुत स्पष्ट है।

मुझे इसके बारे में और बात करने दो

मैंने नेक्स्टियन डिस्प्ले को 'बताने' का अपना तरीका विकसित किया है कि उसे क्या करना चाहिए। आमतौर पर MCU (मेरे मामले में Arduino) किसी एक वस्तु की विशेषता पर लागू होने के लिए हर एक भिन्नता के लिए एक संदेश भेजता है। यह मेथोड उन चीजों को करने में बहुत समय बर्बाद करता है जो सीरियल लाइन को लगातार लोड करने के लिए हमेशा इतनी जरूरी नहीं होती हैं। मुझे और अधिक सुविधाजनक लगा कि Arduino 16 बिट में एकत्र करता है, नेक्स्टियन पर अलग-अलग विशेषताओं के बारे में जानकारी दर्ज करता है। हर 500 mS के बारे में, मेरा Arduino नेक्स्टियन को एक संदेश भेजता है जिसमें प्रत्येक रजिस्टर में एक समय में 16 बिट निहित होता है। स्पष्ट रूप से नेक्स्टियन में हमें उस कोड की आवश्यकता होती है जो संभालता है जिसे निष्पादित किया जाना चाहिए। कार्य के इस वितरण (और कोड) को कई अन्य लाभ मिलते हैं। उदाहरण के लिए, सोचें कि पलक झपकते ही रोशनी कैसे करें! मेरे दृष्टिकोण के साथ यह आसान है: Arduino रजिस्टर में थोड़ा सा सेट करें और इसे Nextion पर भेजें। नेक्स्टियन ट्विन रजिस्टरों को Arduino से बहुत कम ही अपडेट किया जा सकता है, क्योंकि ब्लिंक फ्रीक्वेंसी यह संचार से स्वतंत्र है; ब्लिंक फ़्रीक्वेंसी टाइमर ऑब्जेक्ट से नेक्स्टियन में निर्भर करती है और न्यूनतम समय आधार के साथ 50 mS के पास चल सकती है। तो मेरी विधि के साथ हम नेक्स्टियन में एक प्रकाश को अपेक्षाकृत उच्च आवृत्ति (मान लीजिए 2 हर्ट्ज) पर झपका सकते हैं, भले ही मेरा Arduino हर 10 सेकंड में संदेश भेजता है, बस एक चरम उदाहरण के लिए। यह विपरीत समस्या का सुझाव दे सकता है: यदि संचार विफल हो जाए तो कैसे करें? यह इस चर्चा का उद्देश्य नहीं है, लेकिन मैंने पहले ही इस समस्या को एक प्रकार के वॉच डॉग के साथ हल कर लिया है: एक Arduino कोड के अंदर, दूसरा नेक्स्टियन कोड में।

ब्लिंकिंग को नेक्स्टियन कोड द्वारा नियंत्रित किया जाता है, जहां प्रत्येक प्रकाश अपने उचित नियमों का पालन करता है: चालू / बंद या हरा / लाल या लिखित अंदर (या अन्य अधिक) को बदलना। मैं अपने प्रोजेक्ट के बारे में कुछ और बातें बता सकता था, लेकिन मैं आपके प्रश्नों की प्रतीक्षा करना पसंद करता हूं, इससे पहले कि मैं बहुत अधिक शब्द जोड़ूं जो मेरे लिए इतना आसान अनुवाद नहीं है जितना मैं करूंगा।

चरण 3: नेक्स्टियन ऑब्जेक्ट्स का संपादन

नेक्स्टियन ऑब्जेक्ट्स का संपादन
नेक्स्टियन ऑब्जेक्ट्स का संपादन

यहाँ कोड का एक हिस्सा है जिसे मैंने tm0 ऑब्जेक्ट पर नेक्स्टियन एडिटर के साथ लिखा था।

यह हमारे नोटिस से नहीं बचता है कि Arduino से प्राप्त 16 बिट्स के साथ, नेक्स्टियन डिस्प्ले केवल सिग्नल को चालू और बंद नहीं करता है। फिलहाल मैं स्पष्टीकरणों को छोड़ देता हूं ताकि समझ को जटिल न बनाया जा सके।

मैं एक नौसिखिया हूं और इसलिए यहां भ्रमित कोड को पढ़ने के बजाय नेक्स्टियन कोड.पीडीएफ पेज डाउनलोड करना बेहतर है। (मुझे खेद है कि यह मेरी पहली शिक्षाप्रद है)

यदि आप चाहें तो मेरे आवेदन के लिए पूरा कोड "एचएमआई" डाउनलोड कर सकते हैं। इस कोड का फ़ाइल नाम POW1225. HMI है। यह आपके नेक्स्टियन डिस्प्ले NX4024T032 में चल सकता है लेकिन इसे समझने के लिए आपको कई वस्तुओं में तैरना होगा और संपादक की छोटी विंडो के अंदर कोड देखना होगा। तो मुझे लगता है कि फ़ाइल नेक्स्टियन कोड में लिखे गए मुख्य कोड को देखना अधिक आसान होगा। पीडीएफ

// प्रोजेक्ट POW1225. HMI 15 मई 2019

// वीएसीसी (va0) संचायक

// वीआईएनपी (va1) इनपुट रजिस्टर xxxx xxxx xxxx xxxx

tm0.en=1 // tm0 प्रारंभ

tm0.tim=50 // tm0 समय आधार 50 mS

// आरडीवाई ***************

vACC.val=vINP.val&0x0001 // मास्क

if(vACC.val!=0) // टेस्ट RDY

{

tRDY.pco=BLUE // RED

}अन्यथा

{

tRDY.pco=GRAY // गहरा धूसर

}

// पीडब्लूआर ***************

vACC.val=vINP.val&0x0002

if(vACC.val!=0) // टेस्ट पीडब्लूआर

{

tPWR.pco=GREEN // लाइट ग्रीन

tPON.txt="चालू" // चालू

tPON.pco=GREEN // लाइट ग्रीन

}अन्यथा

{

tPWR.pco=GRAY // गहरा ग्रे ३३८०८

tPON.txt="OFF" // OFF

tPON.pco=GRAY // गहरा ग्रे ३३८०८

}

// सूखा ***************

vACC.val=vINP.val&0x0004

if(vACC.val!=0) // टेस्ट DRY

{

tDRV.pco=BLUE // BLUE

tDRY.pco=BLUE // BLUE

}अन्यथा

{

tDRV.pco=GRAY // गहरा ग्रे ३३८०८

tDRY.pco=GRAY // गहरा ग्रे ३३८०८

}

// DAUD ***************

vACC.val=vINP.val&0x0018

if(vACC.val!=0) // टेस्ट रन

{

tRUN.bco=RED // मार्सिया रेड (चालू)

tRUN.pco=BLACK // ब्लैक पर

tDIR.bco=RED // DIR RED

tDIR.pco=BLACK // ब्लैक पर

}अन्यथा

{

tRUN.bco=32768 // मार्सिया ग्रे (बंद)

tRUN.pco=GRAY // ग्रे पर

tDIR.bco=32768 // डीआईआर गहरा हरा 1024

tDIR.pco=GRAY // DIR GRAY

tDIR.txt="---" // रोकें

}

// बाएं **************

vACC.val=vINP.val&0x0008

if(vACC.val!=0) // टेस्ट रन राइट

{

tDIR.txt="<<< " // DIR LEFT

}

// अधिकार *************

vACC.val=vINP.val&0x0010

if(vACC.val!=0) // टेस्ट रन लेफ्ट

{

tDIR.txt=" >>>" // डीआईआर राइट

}

// दोनों **************

vACC.val=vINP.val&0x0018

if(vACC.val==24) // दोनों का परीक्षण करें

{

tDIR.txt=">>!<<" // DIR BOTH

}

// परीक्षण **************

vACC.val=vINP.val&0x0020

if(vACC.val!=0) // टेस्ट टेस्ट

{

tTEST.pco=सफेद // सफेद

tsw tTEST, 1 // टच इवेंट सक्षम करें

}अन्यथा

{

tTEST.pco=GRAY // गहरा ग्रे ३३८०८

tsw tTEST, 0 // टच इवेंट अक्षम करें

}

// दोष *************

vACC.val=vINP.val&0x0040

if(vACC.val==0) // टेस्ट फॉल्ट

{

tFLT.pco=GRAY // FAULT अनुपस्थित

}

अगर(vACC.val!=0)

{

tFLT.pco=YELLOW // फॉल्ट प्रेजेंट

}

// ईएमई ***************

vACC.val=vINP.val&0x0080

if(vACC.val==0) // टेस्ट ईएमई

{

tEME.pco=GRAY // EME अनुपस्थित

}

अगर(vACC.val!=0)

{

tEME.pco=RED // EME वर्तमान

}

}

// फर्मो *************

vACC.val=vINP.val&0x0100

if(vACC.val!=0) // परीक्षण FERMO

{

tFER.pco=BLACK // BLACK

tFER.bco=GREEN // ग्रीन

}अन्यथा

{

tFER.pco=GRAY // GRAY

tFER.bco=672 // गहरा हरा

}

// *******************

स्वीकृति

मैं गिदोन रोसौव को अपनी पावती देना चाहता हूं क्योंकि उनके निर्देशों को पढ़कर मैंने अपने उद्देश्यों का हिस्सा जल्दी प्राप्त कर लिया है। शुक्रिया श्रीमान। गिदोन रोसौव्वा

सिफारिश की: