สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
โครงการ Arduino จำนวนมากอาศัยการส่งข้อมูลระหว่าง Arduinos หลายตัว
ไม่ว่าคุณจะเป็นมือสมัครเล่นที่สร้างรถ RC เครื่องบิน RC หรือออกแบบสถานีตรวจอากาศด้วยจอแสดงผลระยะไกล คุณจะต้องรู้วิธีถ่ายโอนข้อมูลอนุกรมจาก Arduino หนึ่งไปยังอีกเครื่องหนึ่งอย่างน่าเชื่อถือ น่าเสียดาย เป็นเรื่องยากสำหรับมือสมัครเล่นที่จะให้การสื่อสารข้อมูลแบบอนุกรมทำงานในโครงการของตนเอง เนื่องจากข้อมูลอนุกรมถูกส่งเป็นสตรีมของไบต์
หากไม่มีบริบทใดๆ ภายในสตรีมของไบต์ แทบจะเป็นไปไม่ได้เลยที่จะตีความข้อมูล หากไม่สามารถตีความข้อมูลได้ Arduinos ของคุณจะไม่สามารถสื่อสารได้อย่างน่าเชื่อถือ กุญแจสำคัญคือการเพิ่มข้อมูลบริบทนี้ไปยังสตรีมไบต์โดยใช้การออกแบบแพ็คเก็ตอนุกรมมาตรฐาน
การออกแบบแพ็กเก็ตแบบอนุกรม การบรรจุแพ็กเก็ต และการแยกวิเคราะห์แพ็กเก็ตนั้นซับซ้อนและยากต่อการบรรลุผล โชคดีสำหรับผู้ใช้ Arduino มีไลบรารี่ที่สามารถทำตรรกะที่ซับซ้อนทั้งหมดนี้อยู่เบื้องหลังได้ ดังนั้นคุณจึงสามารถมุ่งความสนใจไปที่การทำให้โปรเจ็กต์ของคุณทำงานได้โดยไม่ต้องปวดหัวเพิ่มเติม คำแนะนำนี้จะใช้ไลบรารี SerialTransfer.h สำหรับการประมวลผลแพ็คเก็ตแบบอนุกรม
กล่าวโดยย่อ: คำแนะนำนี้จะอธิบายวิธีที่คุณสามารถใช้ข้อมูลอนุกรมที่มีประสิทธิภาพได้อย่างง่ายดายในโครงการใด ๆ โดยใช้ไลบรารี SerialTransfer.h หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับทฤษฎีระดับต่ำเกี่ยวกับการสื่อสารแบบอนุกรมที่มีประสิทธิภาพ โปรดดูบทช่วยสอนนี้
เสบียง
-
2 Arduinos
ขอแนะนำอย่างยิ่งให้คุณใช้ Arduinos ที่มีฮาร์ดแวร์ UART หลายตัว (เช่น Arduino Mega)
- สายเชื่อมต่อ
-
ติดตั้ง SerialTransfer.h
พร้อมใช้งานผ่าน Libraries Manager ของ Arduino IDE
ขั้นตอนที่ 1: การเชื่อมต่อทางกายภาพ
เมื่อใช้การสื่อสารแบบอนุกรม ต้องคำนึงถึงจุดเดินสายสองสามจุด:
- ตรวจสอบให้แน่ใจว่าได้เชื่อมต่อบริเวณทั้งหมดแล้ว!
- พิน Arduino TX (ส่ง) ต้องเชื่อมต่อกับพิน RX (รับ) ของ Arduino อื่น
ขั้นตอนที่ 2: วิธีใช้ห้องสมุด
SerialTransfer.h ช่วยให้คุณส่งข้อมูลจำนวนมากได้อย่างง่ายดายโดยใช้โปรโตคอลแพ็คเก็ตที่กำหนดเอง ด้านล่างนี้คือคำอธิบายคุณลักษณะทั้งหมดของห้องสมุด ซึ่งเราจะนำไปใช้ในบทช่วยสอนนี้ในภายหลัง:
SerialTransfer.txBuff
นี่คืออาร์เรย์ไบต์ที่ข้อมูลเพย์โหลดทั้งหมดที่จะส่งผ่านซีเรียลจะถูกบัฟเฟอร์ก่อนส่ง คุณสามารถยัดบัฟเฟอร์นี้ด้วยไบต์ของข้อมูลเพื่อส่งไปยัง Arduino อื่น
SerialTransfer.rxBuff
นี่คืออาร์เรย์ไบต์ที่ข้อมูลเพย์โหลดทั้งหมดที่ได้รับจาก Arduino อื่นถูกบัฟเฟอร์
SerialTransfer.bytesRead
จำนวนเพย์โหลดไบต์ที่ Arduino อื่นได้รับและจัดเก็บไว้ใน SerialTransfer.rxBuff
SerialTransfer.begin (สตรีม &_port)
เริ่มต้นอินสแตนซ์ของคลาสของไลบรารี คุณสามารถส่งผ่านอ็อบเจ็กต์คลาส "Serial" เป็นพารามิเตอร์ - แม้กระทั่งอ็อบเจ็กต์คลาส "SoftwareSerial"!
SerialTransfer.sendData (const uint16_t &messageLen)
สิ่งนี้ทำให้ Arduino ของคุณส่งจำนวนไบต์ "messageLen" ในบัฟเฟอร์ส่งไปยัง Arduino อื่น ตัวอย่างเช่น หาก "messageLen" เป็น 4 ไบต์ 4 ไบต์แรกของ SerialTransfer.txBuff จะถูกส่งผ่านซีเรียลไปยัง Arduino ตัวอื่น
SerialTransfer. พร้อมใช้งาน ()
สิ่งนี้ทำให้ Arduino ของคุณแยกวิเคราะห์ข้อมูลอนุกรมที่ได้รับจาก Arduino อื่น หากฟังก์ชันนี้คืนค่าบูลีนเป็น "จริง" แสดงว่าแพ็กเก็ตใหม่ได้รับการแยกวิเคราะห์เรียบร้อยแล้ว และข้อมูลของแพ็กเก็ตที่ได้รับใหม่จะถูกจัดเก็บ/พร้อมใช้งานใน SerialTransfer.rxBuff
SerialTransfer.txObj (const T &val, const uint16_t &len, const uint16_t &index=0)
ใส่จำนวนไบต์ "len" ของอ็อบเจ็กต์ที่กำหนดเอง (ไบต์, int, float, double, struct, ฯลฯ…) ลงในบัฟเฟอร์การส่งข้อมูลโดยเริ่มต้นที่ดัชนีตามที่ระบุโดยอาร์กิวเมนต์ "index"
SerialTransfer.rxObj (const T &val, const uint16_t &len, const uint16_t &index=0)
อ่านจำนวนไบต์ "len" จากบัฟเฟอร์การรับ (rxBuff) โดยเริ่มต้นที่ดัชนีตามที่ระบุโดยอาร์กิวเมนต์ "index" ลงในอ็อบเจ็กต์ตามอำเภอใจ (ไบต์, int, float, double, struct, ฯลฯ…)
บันทึก:
วิธีที่ง่ายที่สุดในการส่งข้อมูลคือการกำหนดโครงสร้างที่มีข้อมูลทั้งหมดที่คุณต้องการส่งก่อน Arduino ที่ส่วนรับควรมีการกำหนดโครงสร้างที่เหมือนกัน
ขั้นตอนที่ 3: ส่งข้อมูลพื้นฐาน
ภาพร่างต่อไปนี้จะส่งทั้งค่า ADC ของ analogRead(0) และค่าของ analogRead(0) ที่แปลงเป็นแรงดันไฟฟ้าเป็น Arduino #2
อัปโหลดภาพร่างต่อไปนี้ไปยัง Arduino #1:
#include "SerialTransfer.h"
SerialTransfer myTransfer; โครงสร้าง STRUCT { uint16_t adcVal; แรงดันลอย; } ข้อมูล; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); Serial1.begin(115200); myTransfer.begin(Serial1); } วงเป็นโมฆะ () { data.adcVal = analogRead (0); data.voltage = (data.adcVal * 5.0) / 1023.0; myTransfer.txObj (ข้อมูล, ขนาด (ข้อมูล)); myTransfer.sendData(ขนาดของ(ข้อมูล)); ล่าช้า (100); }
ขั้นตอนที่ 4: รับข้อมูลพื้นฐาน
รหัสต่อไปนี้พิมพ์ค่า ADC และแรงดันไฟฟ้าที่ได้รับจาก Arduino #1
อัปโหลดรหัสต่อไปนี้ไปยัง Arduino #2:
#include "SerialTransfer.h"
SerialTransfer myTransfer; โครงสร้าง STRUCT { uint16_t adcVal; แรงดันลอย; } ข้อมูล; การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); Serial1.begin(115200); myTransfer.begin(Serial1); } วงเป็นโมฆะ () { ถ้า (myTransfer.available ()) { myTransfer.rxObj (ข้อมูล ขนาด (ข้อมูล)); Serial.print (data.adcVal); Serial.print(' '); Serial.println (data.voltage); Serial.println(); } else if(myTransfer.status < 0) { Serial.print("ข้อผิดพลาด: "); if(myTransfer.status == -1) Serial.println(F("CRC_ERROR")); อื่น if(myTransfer.status == -2) Serial.println(F("PAYLOAD_ERROR")); อื่น if(myTransfer.status == -3) Serial.println(F("STOP_BYTE_ERROR")); } }
ขั้นตอนที่ 5: การทดสอบ
เมื่ออัปโหลดภาพร่างทั้งสองไปยัง Arduinos แล้ว คุณสามารถใช้ Serial Monitor บน Arduino #2 เพื่อตรวจสอบว่าคุณได้รับข้อมูลจาก Arduino #1!
แนะนำ:
Alternative Communication Vest (CoCoA): 8 ขั้นตอน (พร้อมรูปภาพ)
Alternative Communication Vest (CoCoA): โครงการ CoCoA เป็นเสื้อกั๊กที่สวมใส่ได้ซึ่งเชื่อมต่อกับอินเทอร์เน็ตซึ่งมีสัญลักษณ์ที่สัมผัสได้ของการสื่อสารทางเลือกเพื่อช่วยเหลือผู้ที่มีความบกพร่องทางการพูดหรือทางอวัจนภาษา ตัวย่อ CoCoa มาจากคำย่อของชื่อโปรตุเกส:
LORA Peer to Peer Communication กับ Arduino: 9 ขั้นตอน
LORA Peer to Peer Communication กับ Arduino: ฉันเป็นผู้ริเริ่มด้านอิเล็กทรอนิกส์และนี่เป็นคำแนะนำแรกของฉัน ดังนั้นโปรดอย่าแสดงความคิดเห็นของคุณอย่างหยาบคาย ในคำแนะนำนี้ ฉันจะอธิบายวิธีสร้างสองโหนด LORA สื่อสารโดยตรงโดยไม่ต้องใช้ TTN (เครือข่ายสิ่งของ)
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): 5 ขั้นตอน
STM32F4 Discovery Board และ Python USART Communication (STM32CubeMx): สวัสดี! ในบทช่วยสอนนี้ เราจะพยายามสร้างการสื่อสาร USART ระหว่าง STM32F4 ARM MCU และ Python (สามารถแทนที่ด้วยภาษาอื่นได้) เอาล่ะ มาเริ่มกันเลย
Arduino และ Python Serial Communication - จอแสดงผลปุ่มกด: 4 ขั้นตอน
Arduino และ Python Serial Communication - การแสดงปุ่มกด: โครงการนี้สร้างขึ้นสำหรับผู้ใช้ Mac แต่สามารถใช้งานได้กับ Linux และ Windows ขั้นตอนเดียวที่ควรแตกต่างคือการติดตั้ง
D4E1 Communication Aid: 7 ขั้นตอน
D4E1 Communication Aid: จ็ากเกอลีนและเจอราร์ดาเป็นผู้หญิงสูงวัย 2 คนที่มีความกระตือรือร้น พวกเขาอาศัยอยู่ใน Zorghotel Heilig Hart ใน Kortrijk ลูก ๆ ของพวกเขามาหลายครั้งต่อสัปดาห์ ผู้หญิงทั้งสองชอบไปสวนสาธารณะ ลูก ๆ ของพวกเขาชอบที่จะผลักพวกเขาไปข้างหน้าในรถเข็น แจ็ค