Სარჩევი:

Arduino სერიული კომუნიკაცია: 5 ნაბიჯი
Arduino სერიული კომუნიკაცია: 5 ნაბიჯი

ვიდეო: Arduino სერიული კომუნიკაცია: 5 ნაბიჯი

ვიდეო: Arduino სერიული კომუნიკაცია: 5 ნაბიჯი
ვიდეო: Using Micro SD Card and Data logging with Arduino | Arduino Step by Step Course Lesson 106 2024, ივლისი
Anonim
არდუინოს სერიული კომუნიკაცია
არდუინოს სერიული კომუნიკაცია

არდუინოს მრავალი პროექტი ემყარება მონაცემთა გადაცემას რამდენიმე არდუინოს შორის.

ხართ თუ არა ჰობისტი, რომელიც აშენებს RC მანქანას, RC თვითმფრინავს, ან ამუშავებს ამინდის სადგურს დისტანციური დისპლეით, თქვენ უნდა იცოდეთ როგორ საიმედოდ გადაიტანოთ სერიული მონაცემები ერთი Arduino– დან მეორეზე. სამწუხაროდ, ჰობისტებისთვის ძნელია სერიული მონაცემების კომუნიკაციის მიღება საკუთარ პროექტებში. ეს იმიტომ ხდება, რომ სერიული მონაცემები იგზავნება როგორც ბაიტების ნაკადი.

ბაიტების ნაკადში რაიმე სახის კონტექსტის გარეშე, თითქმის შეუძლებელია მონაცემების ინტერპრეტაცია. მონაცემების ინტერპრეტაციის გარეშე, თქვენი Arduinos ვერ შეძლებს საიმედო კომუნიკაციას. მთავარია ამ კონტექსტის მონაცემების დამატება ბაიტის ნაკადში სტანდარტული სერიული პაკეტის დიზაინის გამოყენებით.

პაკეტის სერიული დიზაინი, შეფუთვა და პაკეტის გაანალიზება რთული და ძნელად მისაღწევია. საბედნიეროდ, არდუინოს მომხმარებლებისთვის, არსებობს ბიბლიოთეკები, რომლებსაც შეუძლიათ გააკეთონ მთელი ეს რთული ლოგიკა კულისებში, ასე რომ თქვენ შეგიძლიათ კონცენტრირება მოახდინოთ თქვენი პროექტის მუშაობაზე დამატებითი სათაურის გარეშე. ეს ინსტრუქცია გამოიყენებს ბიბლიოთეკას SerialTransfer.h სერიული პაკეტის დამუშავებისთვის.

მოკლედ: ეს ინსტრუქცია გაივლის თუ როგორ შეგიძლიათ მარტივად განახორციელოთ ძლიერი სერიული მონაცემები ნებისმიერ პროექტში ბიბლიოთეკის გამოყენებით SerialTransfer.h. თუ გსურთ მეტი გაიგოთ ძლიერი სერიული კომუნიკაციის დაბალი დონის თეორიის შესახებ, იხილეთ ეს სამეურვეო.

მარაგები

  • 2 არდუინოსი

    ძალზედ წახალისებულია, რომ თქვენ იყენებთ Arduinos– ს, რომელსაც აქვს მრავალი ტექნიკური UART (ანუ Arduino Mega)

  • დასაკავშირებელი მავთული
  • დააინსტალირეთ SerialTransfer.h

    ხელმისაწვდომია Arduino IDE ბიბლიოთეკების მენეჯერის საშუალებით

ნაბიჯი 1: ფიზიკური კავშირები

ფიზიკური კავშირები
ფიზიკური კავშირები

სერიული კომუნიკაციის გამოყენებისას მხედველობაში უნდა იქნას მიღებული გაყვანილობის რამდენიმე წერტილი:

  • დარწმუნდით, რომ ყველა საფუძველი დაკავშირებულია!
  • Arduino TX (გადაცემა) პინი უნდა იყოს დაკავშირებული სხვა Arduino– ს RX (მიღება) პინთან

ნაბიჯი 2: როგორ გამოვიყენოთ ბიბლიოთეკა

როგორ გამოვიყენოთ ბიბლიოთეკა
როგორ გამოვიყენოთ ბიბლიოთეკა

SerialTransfer.h საშუალებას გაძლევთ ადვილად გამოაგზავნოთ დიდი რაოდენობით მონაცემები პერსონალური პაკეტის პროტოკოლის გამოყენებით. ქვემოთ მოცემულია ბიბლიოთეკის ყველა მახასიათებლის აღწერა - ბევრ მათგანს მოგვიანებით გამოვიყენებთ ამ გაკვეთილში:

SerialTransfer.txBuff

ეს არის ბაიტი მასივი, სადაც გადაცემის წინ ბუფერდება ყველა დატვირთვის მონაცემები, რომლებიც უნდა გაიგზავნოს სერიულად. თქვენ შეგიძლიათ შეავსოთ ეს ბუფერი მონაცემების ბაიტებით სხვა Arduino– ზე გასაგზავნად.

SerialTransfer.rxBuff

ეს არის ბაიტი მასივი, სადაც სხვა Arduino– დან მიღებული დატვირთვის ყველა მონაცემი ბუფერულია.

SerialTransfer.bytesRead

სხვა Arduino– ს მიერ მიღებული და დატვირთული ტვირთის ბაიტების რაოდენობა SerialTransfer.rxBuff– ში

SerialTransfer.begin (ნაკადი და _ პორტი)

ინიციალიზებს ბიბლიოთეკის კლასის მაგალითს. თქვენ შეგიძლიათ გაიაროთ ნებისმიერი "სერიული" კლასის ობიექტი, როგორც პარამეტრი - თუნდაც "SoftwareSerial" კლასის ობიექტები!

SerialTransfer.sendData (const uint16_t & messageLen)

ეს აიძულებს თქვენს Arduino– ს გაუგზავნოს „messageLen“ბაიტების რაოდენობა გადაცემის ბუფერში სხვა Arduino– ში. მაგალითად, თუ "messageLen" არის 4, SerialTransfer.txBuff– ის პირველი 4 ბაიტი სერიული გზით გაიგზავნება სხვა Arduino– ში.

SerialTransfer.available ()

ეს აიძულებს თქვენს Arduino- ს გაანალიზოს სხვა Arduino– დან მიღებული სერიული მონაცემები. თუ ეს ფუნქცია დააბრუნებს ლოგიკურ მნიშვნელობას "true", ეს ნიშნავს, რომ ახალი პაკეტი წარმატებით იქნა გაანალიზებული და ახლად მიღებული პაკეტის მონაცემები ინახება/ხელმისაწვდომია 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)

კითხულობს "len" - ს ბაიტების რაოდენობას მიმღები ბუფერიდან (rxBuff) დაწყებული ინდექსით, როგორც ეს მითითებულია არგუმენტით "index" თვითნებურ ობიექტში (ბაიტი, int, float, double, struct და ა.შ …).

ᲨᲔᲜᲘᲨᲕᲜᲐ:

მონაცემთა გადაცემის უმარტივესი გზაა ჯერ განვსაზღვროთ სტრუქტურა, რომელიც შეიცავს ყველა მონაცემს, რომლის გაგზავნაც გსურთ. არდუინოს მიმღებზე უნდა იყოს განსაზღვრული იდენტური სტრუქტურა.

ნაბიჯი 3: ძირითადი მონაცემების გადაცემა

შემდეგი ესკიზი გადასცემს როგორც ADR მნიშვნელობას analogRead (0) და მნიშვნელობა analogRead (0) ძაბვად გადაქცეული Arduino #2.

ატვირთეთ შემდეგი ესკიზი არდუინოში #1:

#მოიცავს "სერიული გადაცემა. თ"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; მცურავი ძაბვა; } მონაცემები; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (სერიალი 1); } void loop () {data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (მონაცემები, ზომა (მონაცემები)); myTransfer.sendData (ზომა (მონაცემები)); დაგვიანება (100); }

ნაბიჯი 4: მიიღეთ ძირითადი მონაცემები

შემდეგი კოდი ბეჭდავს ADC და ძაბვის მნიშვნელობებს Arduino #1 -დან.

ატვირთეთ შემდეგი კოდი Arduino #2 -ში:

#მოიცავს "სერიული გადაცემა.ჰ"

SerialTransfer myTransfer; struct STRUCT {uint16_t adcVal; მცურავი ძაბვა; } მონაცემები; void setup () {Serial.begin (115200); Serial1.begin (115200); myTransfer.begin (სერიალი 1); } void loop () {if (myTransfer.available ()) {myTransfer.rxObj (მონაცემები, ზომა (მონაცემები)); Serial.print (data.adcVal); Serial.print (''); Serial.println (data.voltage); Serial.println (); } else if (myTransfer.status <0) {Serial.print ("ERROR:"); if (myTransfer.status == -1) Serial.println (F ("CRC_ERROR")); სხვა შემთხვევაში თუ (myTransfer.status == -2) Serial.println (F ("PAYLOAD_ERROR")); else if (myTransfer.status == -3) Serial.println (F ("STOP_BYTE_ERROR")); }}

ნაბიჯი 5: ტესტირება

მას შემდეგ, რაც ორივე ესკიზი აიტვირთა მათ შესაბამის Arduinos– ში, შეგიძლიათ გამოიყენოთ სერიული მონიტორი Arduino #2 –ზე, რათა დაადასტუროთ, რომ თქვენ იღებთ მონაცემებს Arduino #1 – დან!

გირჩევთ: