Სარჩევი:
- მარაგები
- ნაბიჯი 1: ფიზიკური კავშირები
- ნაბიჯი 2: როგორ გამოვიყენოთ ბიბლიოთეკა
- ნაბიჯი 3: ძირითადი მონაცემების გადაცემა
- ნაბიჯი 4: მიიღეთ ძირითადი მონაცემები
- ნაბიჯი 5: ტესტირება
ვიდეო: Arduino სერიული კომუნიკაცია: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
არდუინოს მრავალი პროექტი ემყარება მონაცემთა გადაცემას რამდენიმე არდუინოს შორის.
ხართ თუ არა ჰობისტი, რომელიც აშენებს 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 – დან!
გირჩევთ:
LoRa 3 კმ -დან 8 კმ -მდე უკაბელო კომუნიკაცია დაბალი ღირებულებით E32 (sx1278/sx1276) მოწყობილობა Arduino- სთვის, Esp8266 ან Esp32: 15 ნაბიჯი
LoRa 3 კმ -დან 8 კმ -მდე უკაბელო კომუნიკაცია დაბალი ღირებულებით E32 (sx1278/sx1276) მოწყობილობა Arduino, Esp8266 ან Esp32: მე ვქმნი ბიბლიოთეკას EBYTE E32- ის მართვისთვის LoRa მოწყობილობის Semtech სერიის საფუძველზე, ძალიან მძლავრი, მარტივი და იაფი მოწყობილობა. თქვენ შეგიძლიათ იპოვოთ 3 კმ ვერსია აქ, 8 კმ ვერსია აქ მათ შეუძლიათ იმუშაონ 3000 მ - დან 8000 მ - მდე მანძილზე და მათ აქვთ ბევრი მახასიათებელი
PIC MCU და პითონის სერიული კომუნიკაცია: 5 ნაბიჯი
PIC MCU და პითონის სერიული კომუნიკაცია: გამარჯობა, ბიჭებო! ამ პროექტში შევეცდები ავხსნა ჩემი ექსპერიმენტები PIC MCU და პითონის სერიული კომუნიკაციის შესახებ. ინტერნეტით, არსებობს მრავალი გაკვეთილი და ვიდეო იმის შესახებ, თუ როგორ უნდა დაუკავშირდეთ PIC MCU– ს ვირტუალურ ტერმინალზე, რაც ძალიან სასარგებლოა. ჰოევი
Arduino და Python სერიული კომუნიკაცია - კლავიატურის ჩვენება: 4 ნაბიჯი
Arduino და Python სერიული კომუნიკაცია - კლავიატურის ჩვენება: ეს პროექტი შექმნილია mac მომხმარებლებისთვის, მაგრამ ის ასევე შეიძლება განხორციელდეს Linux და Windows– ისთვის, ერთადერთი ნაბიჯი, რომელიც განსხვავებული უნდა იყოს არის ინსტალაცია
უკაბელო სერიული კომუნიკაცია Bluefruit– ის გამოყენებით: 4 ნაბიჯი
უკაბელო სერიული კომუნიკაცია Bluefruit– ის გამოყენებით: აქ არის მარტივი ნაბიჯ ნაბიჯ სახელმძღვანელო, რომ შეცვალოთ თქვენი მავთულები ბლუთუზის დაბალი ენერგიის კავშირით. როგორც ბლუფრუი
სერიული კომუნიკაცია ARM Cortex-M4– ის გამოყენებით: 4 ნაბიჯი
სერიული კომუნიკაცია ARM Cortex-M4– ის გამოყენებით: ეს არის დაფაზე დაფუძნებული პროექტი, რომელიც იყენებს ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) სერიული კომუნიკაციისთვის ვირტუალური ტერმინალის გამოყენებით. გამომავალი მიღება შესაძლებელია 16x2 LCD ეკრანზე და სერიული კომუნიკაციის შეყვანა შესაძლებელია სერიულ თვეში