

Anda dapat memesan PCB di sini
Video Instruksi dan Perakitan di 6 bagian dari panduan ini
Anda dapat memesan PCB di sini
Video Instruksi dan Perakitan di 6 bagian dari panduan ini
Telemetri data nirkabel Lora atau jarak jauh adalah teknologi yang dipelopori oleh Semtech yang beroperasi pada frekuensi yang lebih rendah daripada NRF24L01 (433 MHz, 868 MHz, atau 916 MHz terhadap 2,4 GHz untuk NRF24L01) tetapi pada jarak tiga kali (dari 5000m hingga 11000m).
Lora Smart Home (LLCC68) adalah transceiver RF Sub-GHZ Lora® untuk aplikasi nirkabel indoor dan indoor ke luar ruangan. Antarmuka SPI. Pin-to-pin kompatibel dengan SX1262. SX1261, SX1262, SX1268, dan LLCC68 dirancang untuk masa pakai baterai yang lama dengan hanya 4,2 mA dari konsumsi penerimaan aktif saat ini. SX1261 dapat mentransmisikan hingga +15 dBm, dan SX1262, SX1268, dan LLCC68 dapat mentransmisikan hingga +22 dBm dengan amplifier daya terintegrasi yang sangat efisien.
Perangkat ini mendukung modulasi LORA untuk kasus penggunaan LPWAN dan (g) modulasi FSK untuk kasus penggunaan lama. Perangkat sangat dapat dikonfigurasi untuk memenuhi persyaratan aplikasi yang berbeda untuk penggunaan konsumen. Perangkat ini memberikan modulasi LORA yang kompatibel dengan transceiver semtech yang digunakan oleh spesifikasi Lorawan® yang dirilis oleh Lora Alliance®. Radio ini cocok untuk sistem yang menargetkan kepatuhan dengan peraturan radio, termasuk tetapi tidak terbatas pada ETSI EN 300 220, FCC CFR 47 Bagian 15, persyaratan peraturan China, dan ARIB T-108 Jepang. Cakupan frekuensi berkelanjutan dari 150MHz hingga 960MHz memungkinkan dukungan dari semua pita ISM sub-GHz utama di seluruh dunia.
| Llcc68 | SX1278-SX1276 | |
|---|---|---|
| Jarak | > 11km | 8km |
| Tarif (lora) | 1.76kbps - 62.5kbps | 0.3kbps - 19.2kbps |
| Konsumsi daya tidur | 2μA | 5μA |
Anda dapat menemukan perpustakaan saya di sini, dan tersedia di Arduino IDE Library Manager.
Untuk mengunduh.
Klik tombol Unduhan di sudut kanan atas, ganti nama folder Lora_E220 yang tidak terkompresi.
Periksa bahwa folder LORA_E220 berisi lora_e220.cpp dan lora_e220.h.
Tempatkan folder perpustakaan lora_e220 di / pustaka / folder Anda.
Anda mungkin perlu membuat subfolder perpustakaan jika itu perpustakaan pertama Anda.
Mulai ulang IDE.
| Pin No. | Item pin | Arah pin | Aplikasi pin |
|---|---|---|---|
| 1 | M0 | Input (pull-up lemah) | Bekerja dengan M1 & Tentukan Empat Mode Operasi. Mengambang tidak diperbolehkan; itu bisa menjadi tanah. |
| 2 | M1 | Input (pull-up lemah) | Bekerja dengan M0 & Tentukan Empat Mode Operasi. Mengambang tidak diperbolehkan; itu bisa menjadi tanah. |
| 3 | Rxd | Masukan | Input UART TTL Sambungkan ke pin output TXD Eksternal (MCU, PC). Ini dapat dikonfigurasi sebagai input drain terbuka atau pull-up. |
| 4 | Txd | Keluaran | Output TTL UART Sambungkan ke pin input RXD (MCU, PC) eksternal. Dapat dikonfigurasi sebagai output terbuka atau tarik-tarik |
5 | Aux | Keluaran | Untuk menunjukkan status kerja modul & membangunkan MCU eksternal. Selama prosedur inisialisasi periksa sendiri, pin menghasilkan level rendah. Ini dapat dikonfigurasi sebagai output drain terbuka atau tarik-tarik (diizinkan diizinkan). |
| 6 | Vcc | Catu Daya 3V ~ 5.5V DC | |
| 7 | Gnd | Tanah |
Seperti yang Anda lihat, Anda dapat mengatur berbagai mode melalui pin M0 dan M1.
| Mode | M1 | M0 | Penjelasan |
|---|---|---|---|
| Normal | 0 | 0 | Saluran UART dan nirkabel terbuka, dan transmisi transparan aktif |
| Pemancar wor | 0 | 1 | Pemancar wor |
| Wor Wor | 1 | 0 | Wor Receiver (dukungan bangun di udara) |
| Mode tidur yang dalam | 1 | 1 | Modul menjadi tidur (secara otomatis bangun saat mengkonfigurasi parameter) |
Beberapa pin dapat digunakan secara statis, tetapi jika Anda menghubungkannya ke mikrokontroler dan mengonfigurasinya di perpustakaan, Anda mendapatkan kinerja dan dapat mengontrol semua mode melalui perangkat lunak. Namun, kami akan menjelaskan lebih baik berikutnya.
Seperti yang sudah saya katakan, tidak penting untuk menghubungkan semua pin ke output mikrokontroler; Anda dapat menempatkan pin M0 dan M1 ke tinggi atau rendah untuk mendapatkan konfigurasi yang diinginkan. Jika Anda tidak menghubungkan AUX, perpustakaan menetapkan penundaan yang masuk akal untuk memastikan bahwa operasi selesai ( jika Anda memiliki masalah dengan pembekuan perangkat, Anda harus meletakkan resistor 4.7K pull-up atau lebih baik terhubung ke perangkat. ).
Saat mentransmisikan data dapat digunakan untuk membangunkan MCU eksternal dan kembali tinggi pada finish transfer data.
Saat menerima, Aux menjadi rendah dan kembali tinggi saat buffer kosong.
Ini juga digunakan untuk memeriksa sendiri untuk memulihkan operasi reguler (pada mode power-on dan sleep/program).
Skema koneksi ESP8266 lebih mudah karena bekerja pada tegangan komunikasi logis yang sama (3.3V).
Sangat penting untuk menambahkan resistor pull-up (4,7kohm) untuk mendapatkan stabilitas yang baik.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| Tx | Pin D2 (pullup 4,7kΩ) |
| Rx | Pin D3 (pullup 4,7kΩ) |
| Aux | Pin D5 (pullup 4,7kΩ) |
| Vcc | 5V (tetapi bekerja dengan lebih sedikit kekuatan dalam 3.3V) |
| Gnd | Gnd |
Skema koneksi yang serupa untuk ESP32, tetapi untuk RX dan TX, kami menggunakan RX2 dan TX2 karena, secara default, ESP32 tidak memiliki softwareserial tetapi memiliki 3 serial.
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| Tx | Pin RX2 (pullup 4,7kΩ) |
| Rx | Pin TX3 (pullup 4,7kΩ) |
| Aux | Pin D18 (pullup 4,7kΩ) (D15 untuk bangun) |
| Vcc | 5V (tetapi bekerja dengan lebih sedikit kekuatan dalam 3.3V) |
| Gnd | Gnd |
Tegangan kerja Arduino adalah 5V, jadi kita perlu menambahkan pembagi tegangan pada RX Pin M0 dan M1 dari modul LORA untuk mencegah kerusakan; Anda bisa mendapatkan informasi lebih lanjut di sini pembagi tegangan: kalkulator dan aplikasi.
Anda dapat menggunakan resistor 2kohm ke GND dan 1kohm dari sinyal, lalu menyatukannya di RX.
| M0 | 7 (pembagi tegangan) |
| M1 | 6 (pembagi tegangan) |
| Tx | Pin 2 (pullup 4,7kΩ) |
| Rx | Pin 3 (pullup 4,7kΩ & pembagi tegangan) |
| Aux | Pin 5 (pullup 4,7kΩ) |
| Vcc | 5v |
| Gnd | Gnd |
| M0 | 2 (pembagi tegangan) |
| M1 | 3 (pembagi tegangan) |
| Tx | Pin 14 TX (pullup 4,7kΩ) |
| Rx | Pin 13 Rx (pullup 4,7kΩ) |
| Aux | Pin 1 (pullup 4,7kΩ) |
| Vcc | 5v |
| Gnd | Gnd |
Saya membuat serangkaian banyak konstruktor karena kami dapat memiliki lebih banyak pilihan dan situasi untuk dikelola.
Lora_e220 (byte txe220pin, byte rxe220pin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (byte txe220pin, byte rxe220pin, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (byte txe220pin, byte rxe220pin, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
Set konstruktor pertama dibuat untuk mendelegasikan pin serial dan lainnya ke perpustakaan.
txE220pin dan rxE220pin adalah pin untuk terhubung ke UART. Mereka wajib .auxPin adalah pin yang memeriksa operasi, transmisi, dan status penerima (kami akan menjelaskan lebih baik berikutnya), pin itu tidak wajib ; Jika Anda tidak mengaturnya, saya menerapkan penundaan untuk mengizinkan operasi untuk menyelesaikan dirinya sendiri (dengan latensi, saya memiliki masalah, seperti perangkat beku, Anda harus meletakkan resistor 4.7K pull-up atau lebih baik terhubung ke perangkat ).m0pin dan m1Pin adalah pin untuk mengubah mode operasi (lihat tabel atas), saya pikir pin ini dalam "produksi" akan terhubung langsung atau rendah . Namun, untuk tes, mereka membantu dikelola oleh perpustakaan.bpsRate adalah laju baud softwareserial biasanya 9600 (satu -satunya laju baud dalam mode pemrograman/tidur)Contoh sederhana adalah
#include "lora_e220.h"Lora_e32 e220ttl (2, 3); // E22 TX E22 RX // lora_e32 e32ttl (2, 3, 5, 6, 7); // E22 TX E22 RX
Kita dapat menggunakan softwareserial secara langsung dengan konstruktor lain
Lora_e220 (hardwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (hardwareserial* serial, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (hardwareserial* serial, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
Contoh atas dengan konstruktor ini dapat dilakukan seperti itu.
#include <softwareserial.h> #include "lora_e220.h"Softwareserial myserial (2, 3); // E220 TX E220 RX Lora_e220 e220ttl (& myserial); // lora_e220 e220ttl (& myserial, 5, 7, 6);
Set konstruktor terakhir adalah untuk mengizinkan hardwareserial, bukan softwareserial.
Lora_e220 (softwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (softwareserial* serial, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); Lora_e220 (softwareserial* serial, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
Untuk ESP32, Anda memiliki tiga konstruktor tambahan untuk mengizinkan mengelola pin untuk serial perangkat keras.
Lora_e220 (byte txe220pin, byte rxe220pin, hardwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600, uint32_t serialconfig = serial_8n1); Lora_e220 (byte txe220pin, byte rxe220pin, hardwareserial* serial, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600, uint32_t serialconfig = serial_8n1); LoRa_E220(byte txE220pin, byte rxE220pin, HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600, uint32_t serialConfig = SERIAL_8N1);
Perintah awal digunakan untuk memulai serial dan pin dalam mode input dan output.
void begin ();
dalam eksekusi adalah
// startup semua pin dan uart e220ttl.begin ();
Ada banyak metode untuk mengelola konfigurasi dan mendapatkan informasi tentang perangkat.
ResponseStructContainer getConfiguration (); ResponseStatus setConfiguration (Konfigurasi Konfigurasi, Program_Command Savetype = write_cfg_pwr_dwn_lose);ResponseStructContainer getModuleInformation(); void printParameters(struct Configuration configuration); ResponseStatus resetModule();
Untuk menyederhanakan manajemen respons, saya membuat serangkaian kontainer, yang sangat berguna untuk mengelola kesalahan dan mengembalikan data generik.
ResponseStatus is a status container and has two titik masuk sederhana, dengan ini Anda bisa mendapatkan kode status dan deskripsi kode status
Serial.println (C.GetResponsedescription ()); // Deskripsi kode Serial.println (c.code); // 1 jika sukses
Kodenya
E220_success = 1, Err_e220_unknown, Err_e220_not_support, Err_e220_not_implement, Err_e220_not_initial, Err_e220_invalid_param, Err_e220_data_size_not_match, Err_e220_buf_too_small, Err_e220_timeout, Err_e220_hardware, Err_e220_head_not_recognized
Wadah ini dibuat untuk mengelola respons string dan memiliki dua titik masuk.
data dengan string yang dikembalikan dari pesan dan status instance RepsonseStatus .
ResponseContainer rs = e220ttl.receivemessage (); String message = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message);
Tetapi perintah ini digunakan untuk membaca semua data di buffer. Jika Anda menerima tiga pesan, Anda akan membaca ketiga catatan sekaligus, dan solusi sederhana saya adalah menggunakan karakter akhir untuk dikirim di akhir pesan, untuk default saya menggunakan 0 (karakter nol)
ResponseContainer rs = e220ttl.receivemessageuntil ();
// Anda juga dapat menentukan pembatas khusus
// responseContainer rs = e220ttl.receivemessageuntil ('|');
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);
Versi perangkat ini juga mendukung RSSI. Untuk membaca parameter itu (jika Anda menentukan dalam konfigurasi yang ingin Anda kirim juga itu), Anda dapat menggunakan
ResponseContainer rc = e220ttl.receivemessagerssi (); String message = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message); Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
ResponseStructContainer adalah wadah yang lebih "kompleks". Saya menggunakan ini untuk mengelola struktur, ia memiliki titik masuk yang sama dari responseContainer, tetapi data adalah pointer void untuk mengelola struktur yang kompleks.
ResponseStructContainer C;
c = e220ttl.getConfiguration ();
// penting mendapatkan penunjuk konfigurasi sebelum semua operasi lainnya
Konfigurasi konfigurasi = *(konfigurasi *) c.data;
Serial.println (c.status.getResponsedescription ());
Serial.println (c.status.code);
c.close ();
Jika Anda menerima pesan terstruktur dengan RSSI, Anda dapat menggunakan
ResponseStructContainer rsc = e220ttl.receivemessagerssi (sizeof (pesan));
Serial.println (rsc.status.getResponsedescription ());
pesan pesan struct = *(pesan *) rsc.data;
Serial.println (message.type);
Serial.println (message.message);
Serial.println (*(float*) (pesan.temperature));
Serial.print ("rssi:"); Serial.println (rsc.rssi, dec);
rsc.close ();
Setiap kali Anda menggunakan ResponseStructContainer , Anda harus menutupnya dengan close()
Metode pertama adalah GetConfiguration, dan Anda dapat menggunakannya untuk mengambil semua data yang disimpan di perangkat.
ResponseStructContainer getConfiguration ();
Ini adalah contoh penggunaan.
ResponseStructContainer C;
c = e32ttl.getConfiguration ();
// penting mendapatkan penunjuk konfigurasi sebelum semua operasi lainnya
Konfigurasi konfigurasi = *(konfigurasi *) c.data;
Serial.println (c.status.getResponsedescription ());
Serial.println (c.status.code);
Serial.println (configuration.sped.getUartbaudrate ());
c.close ();
Struktur konfigurasi memiliki semua data pengaturan, dan saya menambahkan serangkaian fungsi untuk mendapatkan semua deskripsi data tunggal.
configuration.addl = 0x03; // Bagian pertama dari alamat configuration.addh = 0x00; // Bagian keduaconfiguration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
Anda memiliki fungsi yang setara untuk semua atribut untuk mendapatkan semua deskripsi:
void printParameters (Konfigurasi Konfigurasi Struct) {
Serial.println ("----------------------------------------");
Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX);
Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX);
Serial.println(F(" "));
Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription());
Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription());
Serial.println(F(" "));
Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting());
Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable());
Serial.println(F(" "));
Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());
Serial.println("----------------------------------------");
}
Dengan cara yang sama, SetConfiguration menginginkan struktur konfigurasi, jadi saya pikir cara yang lebih baik untuk mengelola konfigurasi adalah dengan mengambil yang saat ini, menerapkan satu -satunya perubahan yang Anda butuhkan dan atur lagi.
ResponseStatus setConfiguration (Konfigurasi Konfigurasi, Program_Command Savetype = write_cfg_pwr_dwn_lose);
configuration adalah struktur yang ditampilkan sebelumnya, saveType mengizinkan Anda untuk memilih jika perubahan menjadi permanen atau hanya untuk sesi saat ini.
ResponseStructContainer C; c = e32ttl100.getConfiguration (); // penting mendapatkan penunjuk konfigurasi sebelum semua operasi lainnya Konfigurasi konfigurasi = *(konfigurasi *) c.data; Serial.println (c.status.getResponsedescription ()); Serial.println (c.status.code);printParameters(configuration); configuration.ADDL = 0x03; // First part of address configuration.ADDH = 0x00; // Second part configuration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close()
Parameter semuanya dikelola sebagai konstan:
| Nama | Keterangan | Alamat |
|---|---|---|
| Addh | Byte alamat tinggi modul (default 00h) | 00h |
| Addl | Byte alamat rendah dari modul (default 00h) | 01h |
| Melaju | Informasi tentang bit paritas data laju dan tingkat data udara | 02H |
| PILIHAN | Jenis transmisi, ukuran paket, izinkan pesan khusus | 03H |
| Chan | Saluran Komunikasi (410m + Chan*1M), default 17h (433MHz), hanya berlaku untuk perangkat 433MHz pemeriksaan di bawah ini untuk memeriksa frekuensi perangkat Anda yang benar | 04H |
| PILIHAN | Jenis transmisi, ukuran paket, izinkan pesan khusus | 05h |
| Transmisi_mode | Banyak parameter yang menentukan modalitas transmisi | 06H |
| RUANG BAWAH TANAH | Enkripsi untuk menghindari intersepsi | 07H |
UART Parity Bit: Mode UART dapat berbeda antara pihak komunikasi
| UART parity bit | Nilai konstan |
|---|---|
| 8n1 (default) | Mode_00_8n1 |
| 8o1 | Mode_01_8o1 |
| 8e1 | Mode_10_8e1 |
| 8n1 (sama dengan 00) | Mode_11_8n1 |
UART Baud Rate: UART Baud Rate dapat berbeda antara partai komunikasi (tetapi tidak direkomendasikan). UART Baud Rate tidak ada hubungannya dengan parameter transmisi nirkabel & tidak akan mempengaruhi fitur transmit/menerima nirkabel.
| Ttl uart baud rate (bps) | Nilai konstan |
|---|---|
| 1200 | UART_BPS_1200 |
| 2400 | UART_BPS_2400 |
| 4800 | UART_BPS_4800 |
| 9600 (default) | UART_BPS_9600 |
| 19200 | UART_BPS_19200 |
| 38400 | UART_BPS_38400 |
| 57600 | UART_BPS_57600 |
| 115200 | UART_BPS_115200 |
Laju Data Udara: Semakin rendah laju data udara, semakin lama jarak transmisi, kinerja anti-interferensi yang lebih baik, dan waktu transmisi lebih lama; Laju data udara harus konstan untuk kedua pihak komunikasi.
| Laju data udara (bps) | Nilai konstan |
|---|---|
| 2.4k | AIR_DATA_RATE_000_24 |
| 2.4k | AIR_DATA_RATE_001_24 |
| 2.4k (default) | AIR_DATA_RATE_010_24 |
| 4.8k | AIR_DATA_RATE_011_48 |
| 9.6k | AIR_DATA_RATE_100_96 |
| 19.2k | AIR_DATA_RATE_101_192 |
| 38.4k | AIR_DATA_RATE_110_384 |
| 62.5k | AIR_DATA_RATE_111_625 |
Ini adalah panjang maksimum paket.
Ketika data lebih kecil dari panjang subpacket, output serial dari ujung penerima adalah output kontinu yang tidak terputus. Port serial end penerima akan mengeluarkan subpacket ketika data lebih besar dari panjang subpacket.
| Ukuran paket | Nilai konstan |
|---|---|
| 200bytes (default) | SPS_200_00 |
| 128bytes | SPS_128_01 |
| 64bytes | SPS_064_10 |
| 32bytes | SPS_032_11 |
Perintah ini dapat mengaktifkan/menonaktifkan jenis manajemen RSSI, dan penting untuk mengelola konfigurasi jarak jauh. Perhatikan bukan parameter RSSI dalam pesan.
Saat diaktifkan, perintah C0, C1, C2, C3 dapat dikirim dalam mode transmisi atau mode transmisi WOR untuk membaca register. Daftar 0x00: Noise ambient saat ini RSSI Register 0x01: RSSI Saat data diterima terakhir kali.
| RSSI Ambient Noise Enable | Nilai konstan |
|---|---|
| Memungkinkan | Rssi_ambient_noise_enabled |
| Nonaktifkan (default) | Rssi_ambient_noise_disabled |
Anda dapat mengubah rangkaian konstanta ini dengan menerapkan define seperti demikian:
#define E220_22 // Nilai default tanpa set
Berlaku untuk E220 dengan 22dBm sebagai Max Power.
Transmisi daya rendah tidak dianjurkan karena efisiensi catu daya yang rendah.
| Daya transmisi (perkiraan) | Nilai konstan |
|---|---|
| 22dbm (default) | Power_22 |
| 17dbm | Power_17 |
| 13dbm | Power_13 |
| 10dbm | Power_10 |
Berlaku untuk E220 dengan 30dBm sebagai Max Power.
Transmisi daya rendah tidak dianjurkan karena efisiensi catu daya yang rendah.
#define E220_30
| Daya transmisi (perkiraan) | Nilai konstan |
|---|---|
| 30dbm (default) | Power_30 |
| 27dbm | Power_27 |
| 24dbm | Power_24 |
| 21DBM | Power_21 |
Anda dapat mengonfigurasi frekuensi saluran juga dengan define ini:
// salah satunya #define frekuensi_433 #define frekuensi_170 #define frekuensi_470 #define frekuensi_868 #define frekuensi_915
Saat diaktifkan, modul menerima data nirkabel, dan akan mengikuti byte kekuatan RSSI setelah output melalui port serial TXD
| Aktifkan RSSI | Nilai konstan |
|---|---|
| Memungkinkan | Rssi_enabled |
| Nonaktifkan (default) | Rssi_disabled |
Mode Transmisi: Tiga byte pertama dari bingkai data masing -masing pengguna dapat digunakan sebagai alamat tinggi/rendah dan saluran dalam mode transmisi tetap. Modul mengubah alamat dan salurannya saat ditransmisikan. Dan itu akan kembali ke pengaturan asli setelah menyelesaikan proses.
| Memperbaiki bit pengaktifan transmisi | Nilai konstan |
|---|---|
| Memperbaiki mode transmisi | Ft_fixed_transmission |
| Mode transmisi transparan (default) | Ft_transparent_transmission |
Saat diaktifkan, data nirkabel akan dipantau sebelum ditransmisikan, menghindari gangguan sampai batas tertentu, tetapi dapat menyebabkan penundaan data.
| LBT mengaktifkan byte | Nilai konstan |
|---|---|
| Memungkinkan | Lbt_enabled |
| Nonaktifkan (default) | Lbt_disabled |
Jika Wor sedang mentransmisikan: Setelah penerima WOR menerima data nirkabel dan mengeluarkannya melalui port serial, ia akan menunggu 1000ms sebelum memasukkan Wor lagi. Pengguna dapat memasukkan data port serial dan mengembalikannya melalui nirkabel selama periode ini. Setiap byte serial akan disegarkan untuk 1000ms. Pengguna harus mengirimkan byte pertama dalam 1000ms.
| Waktu bangun nirkabel | Nilai konstan |
|---|---|
| 500ms | Wake_up_500 |
| 1000ms | Wake_Up_1000 |
| 1500ms | Wake_Up_1500 |
| 2000ms (default) | Wake_Up_2000 |
| 2500ms | Wake_Up_2500 |
| 3000ms | Wake_Up_3000 |
| 3500ms | Wake_Up_3500 |
| 4000ms | Wake_Up_4000 |
Pertama, kita harus memperkenalkan metode sederhana namun praktis untuk memeriksa apakah ada sesuatu yang ada di buffer penerima.
int tersedia ();
Sederhana untuk mengembalikan berapa banyak byte yang Anda miliki di aliran saat ini.
Mode transmisi normal/transparan mengirim pesan ke semua perangkat dengan alamat dan saluran yang sama.
Ada banyak metode untuk mengirim/menerima pesan, dan kami akan menjelaskan secara rinci:
ResponseStatus sendmessage (pesan string const);
ResponseContainer Receivemessage ();
Metode pertama adalah SendMessage dan digunakan untuk mengirim string ke perangkat dalam mode normal .
ResponseStatus rs = e220ttl.sendMessage ("prova");
Serial.println (rs.getResponsedescription ());
Perangkat lain hanya di loop.
if (e220ttl.available ()> 1) {
ResponseContainer rs = e220ttl.receivemessage ();
String message = rs.data; // Pertama dapatkan data
Serial.println (rs.status.getResponsedescription ());
Serial.println (pesan);
}
Perhatikan jika Anda menerima beberapa pesan di buffer dan tidak ingin membacanya semuanya sekaligus. Anda harus menggunakan ResponseContainer rs = e220ttl.receiveMessageUntil(); dengan pembatas yang dimasukkan pada akhir mengirim pesan.
Jika Anda mengaktifkan RSSI, Anda harus menggunakan receiveMessageRSSI .
Jika Anda ingin mengirim struktur yang kompleks, Anda dapat menggunakan metode ini
ResponseStatus sendmessage (pesan const void *, ukuran const uint8_t);
ResponseStructContainer Receivemessage (ukuran konstan uint8_t);
Ini digunakan untuk mengirim struktur, misalnya:
struct messaggione {
tipe char [5];
Pesan Char [8];
Bool Mitico;
};
struct messaggione messaggione = {"temp", "peple", true};
ResponseStatus rs = e220ttl.sendMessage (& Messaggione, sizeof (Messaggione));
Serial.println (rs.getResponsedescription ());
dan sisi lain Anda dapat menerima pesannya
ResponseStructContainer rsc = e22ttl.receivemessage (sizeof (messaggione));
struct messaggione messaggione = *(messaggione *) rsc.data;
Serial.println (Messaggione.Message);
Serial.println (Messaggione.mitico);
rsc.close ();
Jika Anda mengaktifkan RSSI, Anda harus menggunakan receiveMessageRSSI .
Jika Anda ingin membaca bagian pertama dari pesan untuk mengelola lebih banyak jenis struktur, Anda dapat menggunakan metode ini.
ResponseContainer ReceCTInitialMessage (ukuran Const UInt8_t);
Saya membuatnya untuk menerima string dengan jenis atau lainnya untuk mengidentifikasi struktur yang dimuat.
struct messaggione {// struktur parsial tanpa tipe
Pesan Char [8];
Bool Mitico;
};
char type[5]; // first part of structure
ResponseContainer rs = e220ttl.receiveInitialMessage(sizeof(type));
// Put string in a char array (not needed)
memcpy ( type, rs.data.c_str(), sizeof(type) );
Serial.println("READ TYPE: ");
Serial.println(rs.status.getResponseDescription());
Serial.println(type);
// Read the rest of structure
ResponseStructContainer rsc = e220ttl.receiveMessage(sizeof(Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
rsc.close();
Demikian pula, saya membuat serangkaian metode untuk digunakan dengan transmisi tetap.
Anda hanya perlu mengubah metode pengiriman karena perangkat tujuan tidak menerima pembukaan dengan alamat dan saluran saat mengatur mode tetap.
Jadi untuk pesan string, Anda punya
ResponseStatus sendFixedMessage (byte addh, byte addl, byte chan, const string pesan);
ResponseStatus sendbroadcastFixedMessage (byte chan, const string pesan);
Dan untuk strukturnya, Anda punya
ResponseStatus sendFixedMessage (byte addh, byte addl, byte chan, const void *pesan, ukuran const uint8_t);
ResponseStatus sendbroadcastFixedMessage (byte chan, const void *pesan, ukuran const uint8_t);
Berikut adalah contoh sederhana
ResponseStatus rs = e220ttl.sendfixedMessage (0, 0, 0x17, & Messaggione, sizeof (Messaggione)); // responseStatus rs = e220ttl.sendfixedMessage (0, 0, 0x17, "ciao");
Pemasangan transmisi memiliki lebih banyak skenario
Jika Anda mengirim ke perangkat tertentu (skenario kedua transmisi tetap), Anda harus menambahkan addl, addh, dan chan untuk mengidentifikasinya secara langsung.
ResponseStatus rs = e220ttl.sendFixedMessage (2, 2, 0x17, "pesan ke perangkat");
Jika Anda ingin mengirim pesan ke semua perangkat di saluran yang ditentukan, Anda dapat menggunakan metode ini.
ResponseStatus rs = e220ttl.sendbroadcastFixedMessage (0x17, "pesan ke perangkat saluran");
Jika Anda ingin menerima semua pesan siaran di jaringan, Anda harus mengatur ADDH dan ADDL Anda dengan BROADCAST_ADDRESS .
ResponseStructContainer C; c = e220ttl.getConfiguration (); // penting mendapatkan penunjuk konfigurasi sebelum semua operasi lainnya Konfigurasi konfigurasi = *(konfigurasi *) c.data; Serial.println (c.status.getResponsedescription ()); Serial.println (c.status.code);printParameters(configuration); configuration.ADDL = BROADCAST_ADDRESS; configuration.ADDH = BROADCAST_ADDRESS; // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close();
Sekarang Anda memiliki semua informasi untuk melakukan pekerjaan Anda, tetapi saya pikir penting untuk menunjukkan beberapa contoh nyata untuk memahami semua kemungkinan yang lebih baik.
Perpustakaan GitHub