সুচিপত্র:

Arduino সিরিয়াল যোগাযোগ: 5 টি ধাপ
Arduino সিরিয়াল যোগাযোগ: 5 টি ধাপ

ভিডিও: Arduino সিরিয়াল যোগাযোগ: 5 টি ধাপ

ভিডিও: Arduino সিরিয়াল যোগাযোগ: 5 টি ধাপ
ভিডিও: How to use 2 channel relay to control AC and DC loads in Arduino 2024, জুলাই
Anonim
Arduino সিরিয়াল যোগাযোগ
Arduino সিরিয়াল যোগাযোগ

অনেক Arduino প্রকল্প বেশ কয়েকটি Arduinos এর মধ্যে তথ্য প্রেরণের উপর নির্ভর করে।

আপনি শখের বশে যে আরসি গাড়ি, আরসি বিমান তৈরি করছেন, অথবা রিমোট ডিসপ্লে দিয়ে আবহাওয়া স্টেশন ডিজাইন করছেন, আপনাকে জানতে হবে কিভাবে একটি আর্ডুইনো থেকে অন্যটিতে সিরিয়াল ডেটা নির্ভরযোগ্যভাবে স্থানান্তর করতে হয়। দুর্ভাগ্যবশত, শৌখিনদের জন্য তাদের নিজস্ব প্রকল্পগুলিতে সিরিয়াল ডেটা কমিউনিকেশন কাজ করা কঠিন।

বাইট প্রবাহের মধ্যে কোন প্রকার প্রসঙ্গ ছাড়া, ডেটা ব্যাখ্যা করা প্রায় অসম্ভব। ডেটা ব্যাখ্যা করতে না পারলে, আপনার Arduinos নির্ভরযোগ্যভাবে যোগাযোগ করতে সক্ষম হবে না। স্ট্যান্ডার্ড সিরিয়াল প্যাকেট ডিজাইন ব্যবহার করে বাইট স্ট্রীমে এই প্রসঙ্গ ডেটা যোগ করা কী।

সিরিয়াল প্যাকেট ডিজাইন, প্যাকেট স্টাফিং এবং প্যাকেট পার্সিং জটিল এবং অর্জন করা কঠিন। সৌভাগ্যবশত আরডুইনো ব্যবহারকারীদের জন্য, এমন লাইব্রেরি রয়েছে যা পর্দার আড়ালে এই জটিল যুক্তিগুলি করতে পারে যাতে আপনি আপনার প্রকল্পটি অতিরিক্ত মাথা ব্যতীত কাজ করার দিকে মনোনিবেশ করতে পারেন। এই নির্দেশযোগ্য সিরিয়াল প্যাকেট প্রক্রিয়াকরণের জন্য লাইব্রেরি SerialTransfer.h ব্যবহার করবে।

সংক্ষেপে: এই নির্দেশিকাটি আপনি লাইব্রেরি সিরিয়াল ট্রান্সফার.এইচ ব্যবহার করে যে কোনও প্রকল্পে সহজেই শক্তিশালী সিরিয়াল ডেটা বাস্তবায়ন করতে পারেন। আপনি যদি শক্তিশালী সিরিয়াল যোগাযোগের নিম্ন স্তরের তত্ত্ব সম্পর্কে আরও জানতে চান, এই টিউটোরিয়ালটি দেখুন।

সরবরাহ

  • 2 Arduinos

    এটি অত্যন্ত উৎসাহিত যে আপনি Arduinos ব্যবহার করেন যার একাধিক হার্ডওয়্যার UART আছে (যেমন Arduino Mega)

  • হুকআপ তার
  • SerialTransfer.h ইনস্টল করুন

    Arduino IDE এর লাইব্রেরি ম্যানেজারের মাধ্যমে উপলব্ধ

ধাপ 1: শারীরিক সংযোগ

শারীরিক সংযোগ
শারীরিক সংযোগ

সিরিয়াল যোগাযোগ ব্যবহার করার সময়, কয়েকটি ওয়্যারিং পয়েন্ট মনে রাখা প্রয়োজন:

  • নিশ্চিত করুন যে সমস্ত মাঠ সংযুক্ত আছে!
  • Arduino TX (Transmit) পিনকে অন্য Arduino এর RX (Receive) পিনের সাথে সংযুক্ত করতে হবে

ধাপ 2: লাইব্রেরি কিভাবে ব্যবহার করবেন

লাইব্রেরি কিভাবে ব্যবহার করবেন
লাইব্রেরি কিভাবে ব্যবহার করবেন

SerialTransfer.h আপনাকে কাস্টম প্যাকেট প্রোটোকল ব্যবহার করে সহজেই প্রচুর পরিমাণে ডেটা পাঠাতে দেয়। নীচে লাইব্রেরির সমস্ত বৈশিষ্ট্যগুলির বিবরণ দেওয়া হয়েছে - যার মধ্যে অনেকগুলি আমরা পরে এই টিউটোরিয়ালে ব্যবহার করব:

SerialTransfer.txBuff

এটি একটি বাইট অ্যারে যেখানে সিরিয়ালে পাঠানো সমস্ত প্লেলোড ডেটা ট্রান্সমিশনের আগে বাফার করা হয়। আপনি এই বাফারটি ডেটা বাইট দিয়ে অন্য Arduino- এ পাঠাতে পারেন।

SerialTransfer.rxBuff

এটি একটি বাইট অ্যারে যেখানে অন্যান্য Arduino থেকে প্রাপ্ত সমস্ত প্লেলোড ডেটা বাফার করা হয়।

SerialTransfer.bytes পড়ুন

অন্যান্য Arduino দ্বারা প্রাপ্ত পেলোড বাইটের সংখ্যা এবং SerialTransfer.rxBuff এ সংরক্ষিত

SerialTransfer.begin (Stream & _port)

লাইব্রেরির ক্লাসের একটি উদাহরণ শুরু করে। আপনি যেকোনো "সিরিয়াল" শ্রেণীর বস্তুকে প্যারামিটার হিসেবে পাস করতে পারেন - এমনকি "SoftwareSerial" শ্রেণীর বস্তুগুলিও!

SerialTransfer.sendData (const uint16_t & messageLen)

এটি আপনার Arduino কে অন্য Arduino- এ প্রেরণ বাফারে "বার্তা লেন" বাইট পাঠায়। উদাহরণস্বরূপ, যদি "messageLen" 4 হয়, SerialTransfer.txBuff এর প্রথম 4 বাইট সিরিয়ালের মাধ্যমে অন্য Arduino- এ পাঠানো হবে।

SerialTransfer.available ()

এটি আপনার 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)

ইনডেক্স থেকে শুরু করে রিসিভ বাফার (rxBuff) থেকে শুরু করে "len" সংখ্যার বাইট পড়ে একটি "ইন্ডেক্স" যুক্তি দ্বারা নির্ধারিত একটি নির্বিচারে বস্তুতে (বাইট, ইন্ট, ফ্লোট, ডাবল, স্ট্রাক্ট ইত্যাদি …)।

বিঃদ্রঃ:

ডেটা প্রেরণের সবচেয়ে সহজ উপায় হল প্রথমে এমন একটি কাঠামো সংজ্ঞায়িত করা যাতে আপনি পাঠাতে চান এমন সমস্ত ডেটা থাকে। প্রাপ্ত প্রান্তে Arduino একটি অভিন্ন কাঠামো সংজ্ঞায়িত হওয়া উচিত।

ধাপ 3: প্রাথমিক তথ্য প্রেরণ

নিম্নলিখিত স্কেচ এনালগ রিডের এডিসি মান (0) এবং এনালগ রিড (0) এর মান ভোল্টেজ থেকে আরডুইনো #2 এ রূপান্তরিত করে।

Arduino #1 এ নিম্নলিখিত স্কেচ আপলোড করুন:

#অন্তর্ভুক্ত করুন "SerialTransfer.h"

সিরিয়াল ট্রান্সফার মাই ট্রান্সফার; গঠন STRUCT {uint16_t adcVal; ভাসা ভোল্টেজ; } ডেটা; অকার্যকর সেটআপ () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (সিরিয়াল 1); } অকার্যকর লুপ () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (data, sizeof (data)); myTransfer.sendData (sizeof (data)); বিলম্ব (100); }

ধাপ 4: বেসিক ডেটা গ্রহণ করুন

নিম্নলিখিত কোডটি Arduino #1 থেকে প্রাপ্ত ADC এবং ভোল্টেজের মানগুলি প্রিন্ট করে।

Arduino #2 এ নিম্নলিখিত কোডটি আপলোড করুন:

#অন্তর্ভুক্ত করুন "SerialTransfer.h"

সিরিয়াল ট্রান্সফার মাই ট্রান্সফার; গঠন STRUCT {uint16_t adcVal; ভাসা ভোল্টেজ; } ডেটা; অকার্যকর সেটআপ () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (সিরিয়াল 1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (data, sizeof (data)); সিরিয়াল.প্রিন্ট (data.adcVal); সিরিয়াল.প্রিন্ট (''); Serial.println (data.voltage); Serial.println (); } অন্যথায় যদি (myTransfer.status <0) {Serial.print ("ERROR:"); যদি (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 #2 এর সিরিয়াল মনিটর ব্যবহার করে যাচাই করতে পারেন যে আপনি Arduino #1 থেকে ডেটা পাচ্ছেন।

প্রস্তাবিত: