विषयसूची:

Arduino सीरियल संचार: 5 कदम
Arduino सीरियल संचार: 5 कदम

वीडियो: Arduino सीरियल संचार: 5 कदम

वीडियो: Arduino सीरियल संचार: 5 कदम
वीडियो: Arduino Programming Series - Tutorial 04 | Serial Monitor [in Hindi] 2024, जुलाई
Anonim
Arduino सीरियल संचार
Arduino सीरियल संचार

कई Arduino प्रोजेक्ट कई Arduinos के बीच डेटा संचारित करने पर निर्भर करते हैं।

चाहे आप एक शौक़ीन हों जो RC कार, RC हवाई जहाज बना रहे हों, या रिमोट डिस्प्ले के साथ मौसम स्टेशन डिज़ाइन कर रहे हों, आपको यह जानना होगा कि सीरियल डेटा को एक Arduino से दूसरे में मज़बूती से कैसे स्थानांतरित किया जाए। दुर्भाग्य से, शौकियों के लिए अपने स्वयं के प्रोजेक्ट्स में सीरियल डेटा संचार प्राप्त करना मुश्किल है। ऐसा इसलिए है क्योंकि सीरियल डेटा बाइट्स की एक धारा के रूप में भेजा जाता है।

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

सीरियल पैकेट डिजाइन, पैकेट स्टफिंग और पैकेट पार्सिंग जटिल और हासिल करना मुश्किल है। सौभाग्य से Arduino उपयोगकर्ताओं के लिए, ऐसे पुस्तकालय उपलब्ध हैं जो इस जटिल तर्क को पर्दे के पीछे से कर सकते हैं ताकि आप अपने प्रोजेक्ट को अतिरिक्त हेडसेस के बिना काम करने पर ध्यान केंद्रित कर सकें। यह निर्देशयोग्य सीरियल पैकेट प्रोसेसिंग के लिए लाइब्रेरी SerialTransfer.h का उपयोग करेगा।

संक्षेप में: यह निर्देश इस बात पर जाएगा कि आप लाइब्रेरी SerialTransfer.h का उपयोग करके किसी भी प्रोजेक्ट में मजबूत सीरियल डेटा को आसानी से कैसे लागू कर सकते हैं। यदि आप सशक्त धारावाहिक संचार पर निम्न-स्तरीय सिद्धांत के बारे में अधिक जानना चाहते हैं, तो यह ट्यूटोरियल देखें।

आपूर्ति

  • 2 Arduinos

    यह अत्यधिक प्रोत्साहित किया जाता है कि आप Arduinos का उपयोग करें जिसमें कई हार्डवेयर UART हैं (अर्थात Arduino मेगा)

  • तार बांधना
  • SerialTransfer.h. स्थापित करें

    Arduino IDE के लाइब्रेरी मैनेजर के माध्यम से उपलब्ध है

चरण 1: शारीरिक संबंध

शारीरिक संबंध
शारीरिक संबंध

धारावाहिक संचार का उपयोग करते समय, कुछ तारों को ध्यान में रखा जाना चाहिए:

  • सुनिश्चित करें कि सभी आधार जुड़े हुए हैं!
  • Arduino TX (ट्रांसमिट) पिन को अन्य Arduino के RX (Receive) पिन से कनेक्ट करने की आवश्यकता है

चरण 2: पुस्तकालय का उपयोग कैसे करें

पुस्तकालय का उपयोग कैसे करें
पुस्तकालय का उपयोग कैसे करें

SerialTransfer.h आपको कस्टम पैकेट प्रोटोकॉल का उपयोग करके बड़ी मात्रा में डेटा आसानी से भेजने की अनुमति देता है। नीचे पुस्तकालय की सभी विशेषताओं का विवरण दिया गया है - जिनमें से कई का उपयोग हम बाद में इस ट्यूटोरियल में करेंगे:

SerialTransfer.txBuff

यह एक बाइट ऐरे है जहां सीरियल पर भेजे जाने वाले सभी पेलोड डेटा ट्रांसमिशन से पहले बफर किए जाते हैं। आप इस बफ़र को दूसरे Arduino को भेजने के लिए डेटा के बाइट्स के साथ भर सकते हैं।

SerialTransfer.rxBuff

यह एक बाइट सरणी है जहां अन्य Arduino से प्राप्त सभी पेलोड डेटा को बफ़र किया जाता है।

SerialTransfer.bytesपढ़ें

अन्य Arduino द्वारा प्राप्त पेलोड बाइट्स की संख्या और SerialTransfer.rxBuff. में संग्रहीत

SerialTransfer.begin(स्ट्रीम &_पोर्ट)

पुस्तकालय की कक्षा का एक उदाहरण प्रारंभ करता है। आप किसी भी "सीरियल" क्लास ऑब्जेक्ट को पैरामीटर के रूप में पास कर सकते हैं - यहां तक कि "सॉफ़्टवेयरसेरियल" क्लास ऑब्जेक्ट्स भी!

SerialTransfer.sendData (स्थिरांक uint16_t और संदेश लेन)

यह आपके Arduino को अन्य Arduino को ट्रांसमिट बफर में बाइट्स की "messageLen" संख्या भेजता है। उदाहरण के लिए, यदि "messageLen" 4 है, तो SerialTransfer.txBuff के पहले 4 बाइट्स सीरियल के माध्यम से अन्य Arduino पर भेजे जाएंगे।

सीरियल ट्रांसफर। उपलब्ध ()

यह आपके Arduino को अन्य Arduino से प्राप्त सीरियल डेटा को पार्स करता है। यदि यह फ़ंक्शन बूलियन "सत्य" देता है, तो इसका मतलब है कि एक नया पैकेट सफलतापूर्वक पार्स किया गया है और नए प्राप्त पैकेट का डेटा SerialTransfer.rxBuff में संग्रहीत/उपलब्ध है।

SerialTransfer.txObj(const T &val, const uint16_t &len, const uint16_t &index=0)

एक मनमानी वस्तु (बाइट, इंट, फ्लोट, डबल, स्ट्रक्चर, आदि…) के बाइट्स की "लेन" संख्या को "इंडेक्स" तर्क द्वारा निर्दिष्ट इंडेक्स पर शुरू होने वाले ट्रांसमिट बफर में स्टफ करता है।

SerialTransfer.rxObj(const T &val, const uint16_t &len, const uint16_t &index=0)

एक मनमानी वस्तु (बाइट, इंट, फ्लोट, डबल, स्ट्रक्चर, आदि…) में तर्क "इंडेक्स" द्वारा निर्दिष्ट इंडेक्स पर शुरू होने वाले प्राप्त बफर (आरएक्सबफ) से बाइट्स की "लेन" संख्या पढ़ता है।

ध्यान दें:

डेटा संचारित करने का सबसे आसान तरीका पहले एक संरचना को परिभाषित करना है जिसमें वह सभी डेटा शामिल है जिसे आप भेजना चाहते हैं। प्राप्त करने वाले छोर पर Arduino में एक समान संरचना परिभाषित होनी चाहिए।

चरण 3: मूल डेटा संचारित करें

निम्नलिखित स्केच एनालॉग रीड (0) के एडीसी मान और एनालॉग रीड (0) के मान को वोल्टेज में अरुडिनो # 2 में परिवर्तित करता है।

निम्नलिखित स्केच को Arduino #1 पर अपलोड करें:

#शामिल "SerialTransfer.h"

सीरियल ट्रांसफर मायट्रांसफर; संरचना संरचना { uint16_t adcVal; फ्लोट वोल्टेज; } आंकड़े; शून्य सेटअप () {Serial.begin(११५२००); Serial1.begin(११५२००); myTransfer.begin (सीरियल 1); } शून्य लूप () {data.adcVal = एनालॉग रीड (0); डेटा.वोल्टेज = (डेटा.एडीसीवैल * 5.0) / 1023.0; myTransfer.txObj (डेटा, आकार (डेटा)); myTransfer.sendData (आकार (डेटा)); देरी (100); }

चरण 4: मूल डेटा प्राप्त करें

निम्न कोड Arduino #1 से प्राप्त ADC और वोल्टेज मानों को प्रिंट करता है।

निम्न कोड को Arduino #2 पर अपलोड करें:

#शामिल "SerialTransfer.h"

सीरियल ट्रांसफर मायट्रांसफर; संरचना संरचना { uint16_t adcVal; फ्लोट वोल्टेज; } आंकड़े; शून्य सेटअप () {Serial.begin(११५२००); Serial1.begin(११५२००); myTransfer.begin (सीरियल 1); } शून्य लूप () { अगर (myTransfer.उपलब्ध ()) { myTransfer.rxObj (डेटा, आकार (डेटा)); सीरियल.प्रिंट (डेटा.एडीसीवैल); सीरियल.प्रिंट (''); Serial.println (डेटा। वोल्टेज); सीरियल.प्रिंट्लन (); } और अगर (myTransfer.status < 0) { Serial.print("ERROR:"); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); और अगर (myTransfer.status == -2) Serial.println(F("PAYLOAD_ERROR")); और अगर (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); } }

चरण 5: परीक्षण

एक बार जब दोनों रेखाचित्र उनके संबंधित Arduinos पर अपलोड हो जाते हैं, तो आप Arduino #1 से डेटा प्राप्त कर रहे हैं यह सत्यापित करने के लिए Arduino #2 पर सीरियल मॉनिटर का उपयोग कर सकते हैं!

सिफारिश की: