विषयसूची:
- आपूर्ति
- चरण 1: शारीरिक संबंध
- चरण 2: पुस्तकालय का उपयोग कैसे करें
- चरण 3: मूल डेटा संचारित करें
- चरण 4: मूल डेटा प्राप्त करें
- चरण 5: परीक्षण
वीडियो: Arduino सीरियल संचार: 5 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:20
कई 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 पर सीरियल मॉनिटर का उपयोग कर सकते हैं!
सिफारिश की:
रास्पबेरी PI 3 - TtyAMA0 से BCM GPIO 14 और GPIO 15: 9 चरणों में सीरियल संचार सक्षम करें
रास्पबेरी पीआई 3 - बीसीएम जीपीआईओ 14 और जीपीआईओ 15 के लिए सीरियल संचार सक्षम करें: मुझे हाल ही में मेरे रास्पबेरी पीआई (3 बी) पर यूएआरटी 0 को सक्षम करने में दिलचस्पी थी ताकि मैं इसे सीधे आरएस -232 सिग्नल लेवल डिवाइस से मानक 9 का उपयोग करके कनेक्ट कर सकूं -पिन डी-सब कनेक्टर को यूएसबी से आरएस-232 एडॉप्टर में जाने की जरूरत नहीं है। मेरी दिलचस्पी का हिस्सा
कम लागत वाले E32 (sx1278/sx1276) के साथ LoRa 3Km से 8Km वायरलेस संचार Arduino, Esp8266 या Esp32 के लिए डिवाइस: 15 कदम
लोरा 3Km से 8Km वायरलेस कम्युनिकेशन कम लागत E32 (sx1278/sx1276) Arduino, Esp8266 या Esp32 के लिए डिवाइस: मैं लोरा डिवाइस की सेमटेक श्रृंखला के आधार पर EBYTE E32 को प्रबंधित करने के लिए एक लाइब्रेरी बनाता हूं, बहुत शक्तिशाली, सरल और सस्ता डिवाइस। आप पा सकते हैं यहां 3 किमी संस्करण, यहां 8 किमी संस्करण वे 3000 मीटर से 8000 मीटर की दूरी पर काम कर सकते हैं, और उनके पास बहुत सारी विशेषताएं हैं
MPU 6050 Gyro, एक्सेलेरोमीटर संचार Arduino के साथ (Atmega328p): 5 कदम
MPU 6050 Gyro, Arduino के साथ एक्सेलेरोमीटर कम्युनिकेशन (Atmega328p): MPU6050 IMU में 3-एक्सिस एक्सेलेरोमीटर और 3-एक्सिस गायरोस्कोप दोनों एक ही चिप पर एकीकृत हैं। जाइरोस्कोप घूर्णी वेग या समय के साथ कोणीय स्थिति के परिवर्तन की दर को मापता है, साथ में एक्स, वाई और जेड अक्ष। जाइरोस्कोप के आउटपुट ar
ब्लूफ्रूट का उपयोग कर वायरलेस सीरियल संचार: 4 कदम
ब्लूफ्रूट का उपयोग कर वायरलेस सीरियल संचार: ब्लूटूथ कम ऊर्जा कनेक्शन के साथ अपने तारों को बदलने के लिए चरण-दर-चरण मार्गदर्शिका यहां दी गई है: मुझे यह पता लगाने में थोड़ा समय लगा क्योंकि आधुनिक ब्लूटूथ कम ऊर्जा तकनीक के साथ ऐसा करने पर शायद ही कोई दस्तावेज है ब्लूफ्रूई के रूप में
एआरएम कॉर्टेक्स-एम4 का उपयोग कर सीरियल संचार: 4 कदम
एआरएम कोर्टेक्स-एम4 का उपयोग कर सीरियल संचार: यह एक ब्रेडबोर्ड आधारित परियोजना है जो वर्चुअल टर्मिनल का उपयोग करके सीरियल संचार के लिए एआरएम कॉर्टेक्स-एम 4 (टेक्सास इंस्ट्रूमेंट्स ईके-टीएम4सी123जीएक्सएल) का उपयोग करती है। आउटपुट 16x2 LCD स्क्रीन पर प्राप्त किया जा सकता है और सीरियल संचार के लिए इनपुट सीरियल Mo