Pembaruan 8/10/2024, Fixed upaya iterator jika koneksi tidak dibuat
Transceiver ebyte
Perpustakaan ini dimaksudkan untuk digunakan dengan Transceiver EART Tipe Ebyte (E44-TTL-100 misalnya), unit nirkabel kecil untuk MCU seperti Teensy dan Arduino. Perpustakaan ini memungkinkan pengguna memprogram parameter operasi dan keduanya mengirim dan menerima data. Perusahaan ini membuat beberapa modul dengan kemampuan yang berbeda, tetapi sebagian besar #Defines di sini harus kompatibel dengan mereka semua konstanta diekstraksi dari beberapa lembar data dan terdaftar dalam biner karena itulah cara lembar data mewakili setiap pengaturan. Mudah -mudahan, setiap perubahan atau penambahan ke konstanta dapat menjadi masalah menyalin konstanta lembar data langsung ke #defines. Penggunaan perpustakaan ini mengkonsumsi sekitar 970 byte.
Anda hanya benar -benar membutuhkan perpustakaan ini untuk memprogram unit -unit Ebyte ini.
Untuk membaca struktur data, Anda dapat memanggil metode ReadBytes secara langsung pada objek serial EBYTE:
Eserial.readbytes ((uint8_t*) & mydata, (uint8_t) sizeof (mydata));
Untuk menulis struktur data, Anda dapat memanggil metode penulisan langsung pada objek serial EBYTE
Eserial.write ((uint8_t*) & mydata, (uint8_t) sizeof (mydata));
EBYTE Model numbers (only a partial list shown) Old model number scheme E30-TTL-100,E30-490T20D, E31-TTL-100, E32-TTL-100, E32-TTL-500, E32-TTL-1W, E41-TTL-100, E41-TTL-100, E44-TTL-100, E44-TTL-500, E44-TTL-1W, E50-TTL-100, E50-TTL-500, E51-TTL-100, E51-TTL-500, E51-TTL-1W
Skema Nomor Model Baru E22-900T22S, E22-230T22S, E22-400T22S, E22-230T30S, E22-400T30S, E22-900T30S, E30-433T20S3, E30-170T20D, E30-170-433T20S3, E30-170T20D, E30-1777D, E3030S3, E30-70D20D, E30-777D, E303, E303, E30-20S3, E30.780D20D, E30-170S3, E30-170S3, E30-170D20 E30-868T20D, E30-915T20D, E30-490T20D, E30-433T20S, E30-433T20D, E30-915T20S, E30-490T20S, E31-433T30S, E31-4333T17S3, E31-433T30S, E31-43333, E31-433T30S, E31-4333T17S3, E31-433T30S, E31-433, E31-433T30S, E31-433, E31-230T27D, E31-433T17S, E31-433T17D, E31-433T27D, E31-433T30D, E31-433T33D, E32-433T20DC, E32-433T20S, E32-433T20S2T, E32-433T27D, E32-433T30D, E32-433T30S, E32-868T20D, E32-868T20S, E32-868T30D, E32-868T30S, E32-915T20D, E32-915T20S, E32-915t20d, E32-915T20S, E32-915.92D, E32-915T20S, E32-915.92D, E32-915T20S, E32-91515.92D, E32-915T20S, E32-9152D, E32-915T20S, E32-9152D E32-170T30D, E32-400T20S
Catatan: Periksa situs web EBYTE untuk memastikan modul yang dipilih mendukung komunikasi UART, beberapa modul hanya SPI.
Berikut ini adalah video YouTube tentang Penggunaan Perpustakaan: https://youtu.be/hmjarkgucfa
Koneksi modul
Modul Deskripsi MCU
- Mo pin digital apa pun* pin untuk mengontrol mode kerja/program
- M1 pin digital apa pun* pin untuk mengontrol mode kerja/program
- Rx pin digital apa pun* pin ke pin mcu tx (modul transmit ke mcu, maka mcu harus menerima data dari modul
- Tx pin digital apa pun* pin ke pin mcu rx (modul transmit ke mcu, maka mcu harus menerima data dari modul
- Aux setiap pin digital pin untuk menunjukkan kapan operasi selesai (rendah sibuk, tinggi selesai) (Anda dapat menghilangkan -1, tetapi waktu pemulihan tetap yang digunakan dan mungkin tidak cukup lama untuk menyelesaikan operasi)
- VCC +3V3 atau 5V0, perhatikan unitnya mungkin berjalan lebih hangat dengan 5v0 dan mengkonsumsi lebih banyak daya
- Tanah VCC harus umum untuk modul dan MCU
catatan
- Perhatian dalam menghubungkan ke arduino pin 0 dan 1 karena pin tersebut untuk koneksi USB ke PC sehingga Anda tidak dapat menghubungkan EBYTE selama pemrograman. Saya sarankan untuk tidak menggunakan pin Arduino 0 dan 1
- Garis sinyal untuk unit -unit ini adalah 3V3 tetapi toleran 5 volt, namun 5 volt dapat mengakibatkan kegagalan komunikasi. Jika menggunakan MCU 5 volt seperti Arduino, Anda mungkin perlu melakukan hal berikut. A) Anda mungkin memerlukan pullup 4K7-10K ke Rx dan aux pin (mungkin TX) jika menggunakan dan Arduino b) jika menggunakan Arduino Anda mungkin memerlukan resistor seri 4K7 antara MCU TX dan transceiver RX.
- Dalam beberapa aplikasi saya, saya tidak memiliki cukup pin digital untuk menghubungkan pin aux. Jangan khawatir (cukup lulus -1 dalam daftar argumen dalam kode Buat Objek). Perpustakaan memiliki penundaan bawaan untuk memberikan penundaan yang tepat untuk membiarkan transmisi selesai-Anda mungkin harus bereksperimen dengan jumlahnya.
- Pin serial untuk koneksi tergantung pada MCU, Teensy 3.2 misalnya: serial1 adalah rx = 0, tx = 1, serial2 rx = 9, tx = 10, serial3 rx = 7, tx = 8. Arduino dapat berupa sebagian besar pin serial menggunakan softwareserial (mcu_rx_pin, mcu_tx_pin), kecuali pin 0 dan 1 karena itu untuk penggunaan USB
- Beberapa MCU seperti Teensy, dan ESP32 tidak mengizinkan penggunaan softwareserial untuk membuat port komunikasi. Jangan khawatir, cukup kawat ebtye yang keras ke port UART khusus (pin 0 dan pin 1 pada Teensy 3.2 untuk serial1.
Situs web produsen
http://www.ebyte.com/en/ Modul Contoh Perpustakaan ini dimaksudkan untuk digunakan dengan http://www.ebyte.com/en/product-view-news.aspx?id=174
Penggunaan Kode Umum
- Buat Objek Serial
- Buat objek Ebyte yang menggunakan objek serial
- Mulailah objek serial
- init () Objek Ebyte
- Setel parameter (opsional tetapi diperlukan jika pengirim dan penerima berbeda)
- Kirim atau dengarkan data terkirim (byte tunggal) atau buat dan kirim struktur data
Tips tentang penggunaan
Untuk kisaran terbaik:
- Lembar data menunjukkan hasil terbaik adalah dengan antena 2 meter dari tanah
- Garis pandang ideal, tetapi pengujian pribadi saya, transmisi masih berhasil dengan beberapa halangan
- Laju data udara yang lambat dapat meningkatkan jangkauan, tetapi karena waktu transmisi yang lebih lama, seberapa sering data dapat dikirim akan dikorbankan
- Pertimbangkan antena gain tinggi (dapat dibeli dari pabrikan) lihat situs web mereka untuk detailnya
- Lembar data mengatakan untuk rentang maks, daya unit dengan 5,0 volt (simpan 3v3 pada garis sinyal). Saya pribadi menemukan sedikit perbedaan dengan tegangan suplai yang lebih tinggi
- Lembar data mengatakan untuk rentang maks, atur laju data udara menjadi 2,4 bps. Saya pribadi menemukan sedikit perbedaan dengan kecepatan data yang rendah, dan kecepatan data yang rendah dapat membatasi seberapa sering Anda dapat mengirim data.
Paket transmisi data
- Perpustakaan ini memiliki metode untuk mengirim byte tunggal tetapi jika lebih banyak data yang akan dikirim, buat struktur data dan kirim struktur data menggunakan metode Librarys SendStruct (& struct, sizeof (struct)). Catatan Lulus oleh Ref Jadi Sertakan & Sebelum Nama Struktur
- Sekali lagi laju data lambat memakan waktu lebih lama, Anda perlu bereksperimen dengan rentang tingkat data udara yang ideal berdasarkan ukuran data
- Jika Anda perlu mengirim data menggunakan struct antara perubahan MCU yang berbeda tentang bagaimana setiap paket prosesor mungkin akan berbeda. Jika Anda mendapatkan data yang rusak pada akhir yang diterima, ada cara untuk memaksa kompiler untuk tidak mengoptimalkan pengemasan struct-saya belum membuatnya bekerja. Yang berhasil bagi saya adalah menggunakan perpustakaan yang menciptakan penyangga dan menangani pengiriman. Lihat EasyTransfer.h (Google It dan dapatkan penulis favorit Anda). Dalam LIBS ini Anda akan menggunakan metode mereka untuk mengirim dan mendapatkan struct (ada perangkat keras dan perangkat lunak LIBS, menggunakannya. Artinya Anda dapat menggunakan perpustakaan ini untuk memprogram dan mengelola pengaturan tetapi menggunakan EasyTransfer untuk menangani pengiriman data melalui garis serial yang akan digunakan oleh Ebyte. SendStruct Lib.
Debugging
- Jika modul nirkabel Anda mengembalikan semua 0 untuk metode printParameters () atau hanya model dan Anda menggunakan serial perangkat keras dan Anda menggunakan ESP32, pastikan Anda menggunakan definisi serial lengkap di pernyataan BEGIN (): seperti ini
#include <hardwareserial.h>
#define Serial_0 Serial2
Serial_0.Begin (9600, Serial_8n1, 16, 17);
- Jika modul nirkabel Anda mengembalikan semua 0 untuk metode printParameters (), pastikan kabel Anda benar dan berfungsi, MCU RX perlu menghubungkan ke Ebyte TX dan sebaliknya. Pastikan juga M0, M0, dan AUX terhubung ke port digital yang valid. Sebagian besar masalah disebabkan oleh koneksi jalur data yang salah
- Jika modul nirkabel Anda mengembalikan semua 0 untuk metode printParameters (), dan Anda yakin kabel Anda benar, modul Anda mungkin lambat bereaksi terhadap perubahan pinmode yang dilakukan selama perubahan mode. Data -lembar mengatakan penundaan 2 ms diperlukan, tetapi saya telah menemukan 10 ms lebih dapat diandalkan. Dengan beberapa unit, bahkan lebih banyak waktu diperlukan. Default perpustakaan adalah 50 ms, tetapi tingkatkan ini di file .h jika parameter tidak dibaca dengan benar.
- Jika modul nirkabel Anda mengembalikan semua 0 untuk metode printParameters (), dan Anda yakin kabel Anda benar dan MCU Anda 5V0, Anda mungkin harus menambahkan pembagi tegangan pada saluran MXU TX dan AUX. Modul -modul ini bisa rewel jika sinyal 5V0 dikirim ke sana. Saya mendapatkan hasil yang sangat dapat diandalkan saat menyalakan modul dengan catu daya 3V3 yang terpisah. Saya biasanya menggunakan konverter buck atau regulator linier.
- Jika menggunakan MCU 5V0, Anda mungkin hanya perlu resistor seri pada garis MCU TX ke garis Ebyte RX dan mungkin garis M0 dan M1. Unit Ebyte ini seharusnya toleran 5 volt, tetapi lebih baik aman daripada menyesal. MFG juga mengklaim pullup 4K7 dapat diperlukan pada MCU TX Line dan Aux. Saya telah menggunakan transceiver ini pada uno, mega, dan nano dengan resistor dan semuanya baik -baik saja. Saya memang memiliki satu kasus di mana nano tidak bekerja dengan transceiver ini dan membutuhkan daya yang aneh.
- Jika Anda menggunakan unit 1W mereka (output daya 30 dB), daya unit secara terpisah dari catu daya onboard MCU. Undian saat ini dapat melebihi peringkat onboard yang mengakibatkan menghancurkan MCU. Saya telah menghancurkan regulator tegangan onboard pada nano ketika mencoba menyalakan unit 1W.
- Jika pemancar dan penerima berbeda MCU (Arduino <-> Teensy), mengirim Struktur Data Membayar Paket secara berbeda, terlepas dari tipe data struktur. Ini karena bagaimana prosesor 8-bit dan prosesor 32-bit menangani proses pengemasan. Opsi 1) adalah menggunakan lib eastransfer. Saya menggunakan lib ini dan berfungsi dengan baik. Opsi 2) Coba atribut variabel __attribute __ ((dikemas)). Opsi 3) Dan jangan tertawa, tetapi jika mengirim float mempertimbangkan mengalikan pelampung hingga 100 (dan menyusun kembali ke int), maka bagi nilai itu dengan 100 di ujung penerima (menyusun kembali ke float)
- Jika Anda tampaknya mendapatkan data korup dari .printparameters, coba tambahkan #include "avr/io.h" ke program .ino Anda
- Jika Anda menyalakan modul Ebyte Anda dari sumber daya yang terpisah, pastikan semua lahan terhubung