อัปเดต 8/10/2024, แก้ไขความพยายามตัววนซ้ำหากไม่ได้ทำการเชื่อมต่อ
เครื่องรับส่งสัญญาณ eByte
ไลบรารีนี้มีวัตถุประสงค์เพื่อใช้กับตัวรับส่งสัญญาณ EBYTE ประเภท UART (ตัวอย่างเช่น E44-TTL-100) หน่วยไร้สายขนาดเล็กสำหรับ MCU เช่น Teensy และ Arduino ไลบรารีนี้ช่วยให้ผู้ใช้โปรแกรมพารามิเตอร์การดำเนินงานและทั้งการส่งและรับข้อมูล บริษัท นี้สร้างโมดูลหลายอย่างที่มีความสามารถที่แตกต่างกัน แต่ #DEFINES ส่วนใหญ่ที่นี่ควรเข้ากันได้กับค่าคงที่ทั้งหมดที่ได้รับการสกัดจากแผ่นข้อมูลหลายแผ่นและระบุไว้ในไบนารีเป็นวิธีที่แผ่นข้อมูลแสดงแต่ละการตั้งค่า หวังว่าการเปลี่ยนแปลงหรือการเพิ่มเติมใด ๆ ของค่าคงที่อาจเป็นเรื่องของการคัดลอกค่าคงที่แผ่นข้อมูลโดยตรงไปยัง #Defines การใช้ห้องสมุดนี้ใช้เวลาประมาณ 970 ไบต์
คุณต้องการห้องสมุดนี้จริงๆเพื่อตั้งโปรแกรมหน่วย EBYTE เหล่านี้
สำหรับการอ่านโครงสร้างข้อมูลคุณสามารถโทรหาวิธี Readbytes โดยตรงบนวัตถุอนุกรมของ Ebyte:
eserial.readbytes ((uint8_t*) & mydata, (uint8_t) sizeof (myData));
สำหรับการเขียนโครงสร้างข้อมูลคุณสามารถเรียกวิธีการเขียนได้โดยตรงบนวัตถุอนุกรมของ Ebyte
eserial.write ((uint8_t*) & mydata, (uint8_t) sizeof (myData));
หมายเลขรุ่น EBYTE (แสดงเพียงบางส่วนเท่านั้น) รูปแบบหมายเลขรุ่นเก่า E30-TTL-100, E30-490T20D, E31-TTL-100, E32-TTL-100, E32-TTL-500, E32-TTL-1W, E41-TTL-100 E44-TTL-1W, E50-TTL-100, E50-TTL-500, E51-TTL-100, E51-TTL-500, E51-TTL-1W
รูปแบบหมายเลขรุ่นใหม่ E22-900T22S, E22-230T22S, E22-400T22S, E22-230T30S, E22-400T30S, E22-900T30S, E30-433T20S3, E30-170T20D, E30-170T27D E30-868T20D, E30-915T20D, E30-490T20D, E30-433T20S, E30-433T20D, E30-915T20S, E30-490T20S, E31-433T30S, E31-433T17S3 E31-230T27D, E31-433T17S, E31-433T17D, E31-433T27D, E31-433T30D, E31-433T33D, E32-433T20DC, E32-43T20S E32-433T30D, E32-433T30S, E32-868T20D, E32-868T20S, E32-868T30D, E32-868T30S, E32-915T20D, E32-915T20S E32-170T30D, E32-400T20S
หมายเหตุ: ตรวจสอบเว็บไซต์ eByte เพื่อให้แน่ใจว่าโมดูลที่เลือกรองรับการสื่อสาร UART โมดูลบางอย่างเป็น SPI เท่านั้น
นี่คือวิดีโอ YouTube เกี่ยวกับการใช้ห้องสมุด: https://youtu.be/hmjarkgucfa
การเชื่อมต่อโมดูล
คำอธิบาย MODULE MCU
- mo pin ดิจิตอลใด ๆ* พินเพื่อควบคุมโหมดการทำงาน/โปรแกรม
- M1 พินดิจิตอลใด ๆ* พินเพื่อควบคุมโหมดการทำงาน/โปรแกรม
- rx พินดิจิตอลใด ๆ* พินไปยังพิน MCU TX (โมดูลส่งไปยัง MCU ดังนั้น MCU จะต้องได้รับข้อมูลจากโมดูล
- tx พินดิจิตอลใด ๆ* พินไปยังพิน MCU RX (โมดูลส่งไปยัง MCU ดังนั้น MCU จะต้องได้รับข้อมูลจากโมดูล
- AUX พินดิจิตอลใด ๆ เพื่อระบุว่าการดำเนินการเสร็จสมบูรณ์ (ต่ำไม่ว่างสูงทำเสร็จแล้ว) (คุณสามารถละเว้นได้ด้วย -1 แต่เวลาการกู้คืนคงที่ที่ใช้และอาจไม่นานพอที่จะดำเนินการให้เสร็จสมบูรณ์)
- VCC +3V3 หรือ 5V0 หมายเหตุหน่วยอาจอุ่นขึ้นด้วย 5V0 และใช้พลังงานมากขึ้น
- พื้นดิน VCC จะต้องเป็นเรื่องธรรมดาสำหรับโมดูลและ MCU
หมายเหตุ
- ข้อควรระวังในการเชื่อมต่อกับ Arduino Pin 0 และ 1 เนื่องจากพินเหล่านั้นใช้สำหรับการเชื่อมต่อ USB กับพีซีดังนั้นคุณจึงไม่สามารถเชื่อมต่อ EBYTE ในระหว่างการเขียนโปรแกรมได้ ฉันขอแนะนำไม่ใช้ Arduino Pins 0 และ 1
- สายสัญญาณสำหรับหน่วยเหล่านี้คือ 3v3 แต่มีความทนทานต่อ 5 โวลต์อย่างไรก็ตาม 5 โวลต์อาจส่งผลให้เกิดความล้มเหลวในการสื่อสาร หากใช้ MCU 5 โวลต์เช่น Arduino คุณอาจต้องทำสิ่งต่อไปนี้ A) คุณอาจต้องใช้ pullup 4K7-10K ไปที่ RX และ AUX PINS (อาจเป็น TX) หากใช้และ Arduino B) หากใช้ Arduino คุณอาจต้องใช้ตัวต้านทานซีรีย์ 4K7 ระหว่าง MCU TX และตัวรับส่งสัญญาณ RX
- ในแอปพลิเคชั่นบางอย่างของฉันฉันไม่มีหมุดดิจิตอลเพียงพอที่จะเชื่อมต่อพิน aux ไม่ต้องกังวล (เพียงแค่ผ่าน -1 ในรายการอาร์กิวเมนต์ในวัตถุสร้างรหัส) ห้องสมุดมีความล่าช้าในตัวเพื่อให้ความล่าช้าที่เหมาะสมเพื่อให้การส่งเสร็จสมบูรณ์-คุณอาจต้องทดสอบกับจำนวนเงิน
- หมุดอนุกรมสำหรับการเชื่อมต่อขึ้นอยู่กับ MCU, Teensy 3.2 ตัวอย่างเช่น: serial1 คือ rx = 0, tx = 1, serial2 rx = 9, tx = 10, serial3 rx = 7, tx = 8 Arduino สามารถเป็นหมุดอนุกรมได้มากที่สุดโดยใช้ softwareserial (MCU_RX_PIN, MCU_TX_PIN) ยกเว้นพิน 0 และ 1 เป็นสำหรับการใช้งาน USB
- MCU บางตัวเช่น Teensy และ ESP32 ไม่อนุญาตให้ใช้ซอฟต์แวร์ซอฟต์แวร์เพื่อสร้างพอร์ตการสื่อสาร ไม่ต้องกังวลเพียงแค่ลวดแข็ง ebtye ไปยังพอร์ต UART เฉพาะ (พิน 0 และพิน 1 บน Teensy 3.2 สำหรับ serial1
เว็บไซต์ผู้ผลิต
http://www.ebyte.com/en/ ตัวอย่างโมดูลไลบรารีนี้มีวัตถุประสงค์เพื่อใช้กับ http://www.ebyte.com/en/product-view-news.aspx?id=174
การใช้รหัสทั่วไป
- สร้างวัตถุอนุกรม
- สร้างวัตถุ eByte ที่ใช้วัตถุอนุกรม
- เริ่มต้นวัตถุอนุกรม
- init () วัตถุ eByte
- ตั้งค่าพารามิเตอร์ (เป็นทางเลือก แต่จำเป็นหากผู้ส่งและตัวรับสัญญาณแตกต่างกัน)
- ส่งหรือฟังข้อมูลที่ส่ง (ไบต์เดียว) หรือสร้างและส่งโครงสร้างข้อมูล
เคล็ดลับในการใช้งาน
สำหรับช่วงที่ดีที่สุด:
- แผ่นข้อมูลบ่งชี้ผลลัพธ์ที่ดีที่สุดคือเสาอากาศ 2 เมตรจากพื้นดิน
- แนวสายตาในอุดมคติ แต่การทดสอบส่วนตัวของฉันการส่งผ่านยังคงประสบความสำเร็จกับสิ่งกีดขวางบางอย่าง
- อัตราข้อมูลอากาศช้าสามารถปรับปรุงช่วงได้ แต่เนื่องจากเวลาการส่งข้อมูลนานขึ้นความถี่สามารถส่งข้อมูลได้จะถูกเสียสละ
- พิจารณาเสาอากาศที่ได้รับสูง (สามารถซื้อได้จากผู้ผลิต) ดูเว็บไซต์ของพวกเขาสำหรับรายละเอียด
- แผ่นข้อมูลบอกว่าสำหรับช่วงสูงสุดให้พลังงานแก่หน่วยด้วย 5.0 โวลต์ (เก็บ 3v3 บนสายสัญญาณ) ฉันพบว่ามีช่วงเล็ก ๆ น้อย ๆ แตกต่างกันกับแรงดันไฟฟ้าที่สูงขึ้น
- แผ่นข้อมูลบอกว่าสำหรับช่วงสูงสุดตั้งค่าอัตราข้อมูลอากาศเป็น 2.4 bps ฉันพบว่าช่วงเล็ก ๆ น้อย ๆ แตกต่างกันกับอัตราข้อมูลต่ำและอัตราข้อมูลต่ำอาจ จำกัด ความถี่ที่คุณสามารถส่งข้อมูลได้
แพ็คเก็ตการส่งข้อมูล
- ไลบรารีนี้มีวิธีการส่งไบต์เดียว แต่หากมีการส่งข้อมูลเพิ่มเติมให้สร้างโครงสร้างข้อมูลและส่งโครงสร้างข้อมูลโดยใช้วิธีการ SendStruct (& struct, sizeof (struct)) หมายเหตุผ่านการอ้างอิงดังนั้นรวมชื่อ & ก่อนโครงสร้าง
- อัตราข้อมูลช้าลงอีกครั้งจะใช้เวลานานขึ้นคุณจะต้องทดสอบกับช่วงอัตราข้อมูลอากาศในอุดมคติตามขนาดข้อมูล
- หากคุณต้องการส่งข้อมูลโดยใช้โครงสร้างระหว่างการเปลี่ยนแปลงของ MCU ที่แตกต่างกันว่าแต่ละชุดโปรเซสเซอร์อาจแตกต่างกันอย่างไร หากคุณได้รับข้อมูลที่เสียหายเมื่อสิ้นสุดการรับรู้มีวิธีบังคับให้คอมไพเลอร์ไม่เพิ่มประสิทธิภาพการบรรจุโครงสร้าง-ฉันยังไม่ได้ทำงาน สิ่งที่ได้ผลสำหรับฉันคือการใช้ห้องสมุดที่สร้าง Strut และจัดการส่ง ตรวจสอบ EasyTransfer.h (Google IT และรับผู้เขียนคนโปรดของคุณ) ใน libs เหล่านี้คุณจะใช้วิธีการส่งและรับ struct (มีฮาร์ดแวร์และซอฟต์แวร์ libs ใช้ตามนั้นหมายความว่าคุณสามารถใช้ไลบรารีนี้เพื่อโปรแกรมและจัดการการตั้งค่า แต่ใช้ EasyTransfer เพื่อจัดการการส่งข้อมูลผ่านสายอนุกรมที่ Ebyte ใช้งานจริง lib.
การดีบัก
- หากโมดูลไร้สายของคุณส่งคืน 0 ทั้งหมดสำหรับเมธอด printParameters () หรือเพียงแค่โมเดลและคุณกำลังใช้ฮาร์ดแวร์อนุกรมและคุณกำลังใช้ ESP32 ตรวจสอบให้แน่ใจว่าคุณใช้คำจำกัดความอนุกรมเต็มในคำสั่งเริ่มต้น (): เช่นนี้
#include <hardwareserial.h>
#define serial_0 serial2
serial_0.begin (9600, serial_8n1, 16, 17);
- หากโมดูลไร้สายของคุณส่งคืน 0 ทั้งหมดสำหรับวิธีการพิมพ์ PRINTPARMETERS () ตรวจสอบให้แน่ใจว่าการเดินสายของคุณถูกต้องและใช้งานได้ MCU RX จำเป็นต้องเชื่อมต่อกับ EBYTE TX และในทางกลับกัน ตรวจสอบให้แน่ใจว่า M0, M0 และ AUX เชื่อมต่อกับพอร์ตดิจิตอลที่ถูกต้อง ปัญหาส่วนใหญ่เกิดจากการเชื่อมต่อสายข้อมูลที่ไม่ถูกต้อง
- หากโมดูลไร้สายของคุณส่งคืน 0 ทั้งหมดสำหรับวิธีการพิมพ์พารามิเตอร์ () และคุณมั่นใจว่าการเดินสายของคุณถูกต้องโมดูลของคุณอาจตอบสนองต่อการเปลี่ยนแปลง pinmode ที่ดำเนินการระหว่างการเปลี่ยนแปลงโหมด แผ่นข้อมูลระบุว่าจำเป็นต้องมีความล่าช้า 2 ms แต่ฉันพบว่า 10 ms มีความน่าเชื่อถือมากกว่า ด้วยบางหน่วยจำเป็นต้องใช้เวลามากขึ้น ค่าเริ่มต้นของไลบรารีคือ 50 ms แต่เพิ่มสิ่งนี้ในไฟล์. h หากพารามิเตอร์ไม่ถูกอ่านอย่างถูกต้อง
- หากโมดูลไร้สายของคุณส่งคืน 0 ทั้งหมดสำหรับเมธอด printparameters () และคุณมั่นใจว่าการเดินสายของคุณถูกต้องและ MCU ของคุณคือ 5v0 คุณอาจต้องเพิ่มตัวแบ่งแรงดันไฟฟ้าในสาย MXU TX และ AUX โมดูลเหล่านี้อาจมีความพิถีพิถันหากมีการส่งสัญญาณ 5V0 ฉันได้รับผลลัพธ์ที่เชื่อถือได้มากเมื่อเปิดโมดูลด้วยแหล่งจ่ายไฟ 3V3 แยกต่างหาก โดยทั่วไปฉันใช้ตัวแปลงบั๊กหรือตัวควบคุมเชิงเส้น
- หากใช้ 5V0 MCU คุณอาจต้องใช้ตัวต้านทานแบบซีรีย์บนสาย MCU TX ไปยังสาย EBYTE RX และอาจเป็นสาย M0 และ M1 หน่วย Ebyte เหล่านี้ควรจะทนได้ 5 โวลต์ แต่ปลอดภัยกว่าขออภัย นอกจากนี้ยังสามารถเรียกร้อง MFG ได้ 4K7 pullups บนสาย MCU TX และ AUX ฉันใช้ตัวรับส่งสัญญาณเหล่านี้ใน Uno's, Mega's และ Nano's W/o ตัวต้านทานใด ๆ และทุกอย่างก็ดี ฉันมีกรณีหนึ่งที่นาโนไม่ทำงานกับตัวรับส่งสัญญาณเหล่านี้และต้องการการขับเคลื่อนแปลก ๆ
- หากคุณใช้หน่วย 1W (กำลังไฟ 30 เดซิเบล) ให้ใช้จ่ายหน่วยแยกจากแหล่งจ่ายไฟออนบอร์ดของ MCU การจับสลากในปัจจุบันอาจเกินคะแนนออนบอร์ดส่งผลให้ทำลาย MCU ฉันได้ทำลายตัวควบคุมแรงดันไฟฟ้าออนบอร์ดบนนาโนเมื่อพยายามใช้พลังงาน 1W หน่วย
- หากเครื่องส่งสัญญาณและตัวรับสัญญาณเป็น MCU ที่แตกต่างกัน (Arduino <-> Teensy) การส่งโครงสร้างข้อมูลจ่ายแพ็คแตกต่างกันโดยไม่คำนึงถึงชนิดข้อมูลโครงสร้าง นี่เป็นเพราะวิธีการโปรเซสเซอร์ 8 บิตและโปรเซสเซอร์ 32 บิตจัดการกระบวนการบรรจุ ตัวเลือกที่ 1) คือการใช้ Eastransfer Lib ฉันใช้ lib นี้และใช้งานได้ดี ตัวเลือก 2) ลองใช้แอตทริบิวต์ตัวแปร __attribute __ ((บรรจุ)) ตัวเลือกที่ 3) และอย่าหัวเราะ แต่ถ้าส่งลอยตัวพิจารณาการคูณการลอยตัวเป็น 100 (และกลับไปที่ INT) จากนั้นหารค่านั้นด้วย 100 ในตอนท้ายที่ได้รับ
- หากคุณดูเหมือนจะได้รับข้อมูลที่เสียหายจาก. printparameters ลอง addinng #include "avr/io.h" ไปที่โปรแกรม. ino ของคุณ
- หากคุณกำลังเปิดโมดูล eByte ของคุณจากแหล่งพลังงานแยกต่างหากตรวจสอบให้แน่ใจว่ามีการเชื่อมต่อบริเวณทั้งหมด