

คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
LORA หรือ Telemetry ข้อมูลไร้สายระยะยาว เป็นเทคโนโลยีที่บุกเบิกโดย Semtech ที่ทำงานที่ความถี่ต่ำกว่า NRF24L01 (433 MHz, 868 MHz หรือ 916 MHz เทียบกับ 2.4 GHz สำหรับ NRF24L01)
Lora Smart Home (LLCC68) เป็นตัวรับส่งสัญญาณ Sub-GHz LORA® RF สำหรับการใช้งานในร่มและในร่มถึงกลางแจ้ง อินเทอร์เฟซ SPI Pin-to-Pin เข้ากันได้กับ SX1262 SX1261, SX1262, SX1268 และ LLCC68 ได้รับการออกแบบมาสำหรับอายุการใช้งานแบตเตอรี่ที่ยาวนานด้วยเพียง 4.2 Ma ของการบริโภคที่ได้รับการบริโภคในปัจจุบัน SX1261 สามารถส่งได้สูงสุดถึง +15 dBm และ SX1262, SX1268 และ LLCC68 สามารถส่งได้สูงสุด +22 dBm พร้อมแอมพลิฟายเออร์พลังงานแบบบูรณาการที่มีประสิทธิภาพสูง
อุปกรณ์เหล่านี้รองรับการมอดูเลต LORA สำหรับกรณีการใช้งาน LPWAN และ (g) การปรับ FSK สำหรับกรณีการใช้งานแบบดั้งเดิม อุปกรณ์สามารถกำหนดค่าได้สูงเพื่อตอบสนองความต้องการของแอปพลิเคชันที่แตกต่างกันสำหรับการใช้งานของผู้บริโภค อุปกรณ์ให้การปรับเปลี่ยน LORA เข้ากันได้กับเครื่องรับส่งสัญญาณ Semtech ที่ใช้โดยข้อกำหนดของLoRawan®ที่เปิดตัวโดย Lora Alliance® วิทยุเหมาะสำหรับระบบที่กำหนดเป้าหมายไปตามกฎระเบียบของวิทยุรวมถึง แต่ไม่ จำกัด เฉพาะ ETSI EN 300 220, FCC CFR 47 ตอนที่ 15, ข้อกำหนดด้านกฎระเบียบของจีนและ ARIB T-108 ของญี่ปุ่น การครอบคลุมความถี่อย่างต่อเนื่องจาก 150MHz ถึง 960MHz ช่วยให้การสนับสนุนของแถบ ISM ย่อย GHz ที่สำคัญทั้งหมดทั่วโลก
| LLCC68 | SX1278-SX1276 | |
|---|---|---|
| ระยะทาง | > 11km | 8km |
| อัตรา (Lora) | 1.76kbps - 62.5kbps | 0.3kbps - 19.2kbps |
| การใช้พลังงานการนอนหลับ | 2µa | 5µa |
คุณสามารถค้นหาห้องสมุดของฉันได้ที่นี่และมีอยู่ใน Arduino IDE Library Manager
เพื่อดาวน์โหลด
คลิกปุ่มดาวน์โหลดที่มุมขวาบนเปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด LORA_E220
ตรวจสอบว่าโฟลเดอร์ LORA_E220 มี LORA_E220.CPP และ LORA_E220.H
วางโฟลเดอร์ LORA_E220 ห้องสมุดใน / ห้องสมุด / โฟลเดอร์ของคุณ
คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นห้องสมุดแรกของคุณ
รีสตาร์ท IDE
| หมายเลขพิน | รายการพิน | ทิศทางพิน | แอปพลิเคชัน PIN |
|---|---|---|---|
| 1 | M0 | อินพุต (pull-up อ่อนแอ) | ทำงานกับ M1 และตัดสินใจเลือกโหมดการทำงานทั้งสี่ ไม่อนุญาตให้ลอยตัว; มันสามารถเป็นพื้นดิน |
| 2 | M1 | อินพุต (pull-up อ่อนแอ) | ทำงานกับ M0 และตัดสินใจเลือกโหมดการทำงานทั้งสี่ ไม่อนุญาตให้ลอยตัว; มันสามารถเป็นพื้นดิน |
| 3 | RXD | ป้อนข้อมูล | อินพุต TTL UART เชื่อมต่อกับพินเอาต์พุตภายนอก (MCU, PC) TXD มันสามารถกำหนดค่าเป็นแบบเปิดหรืออินพุตแบบดึงขึ้น |
| 4 | TXD | เอาท์พุท | เอาต์พุต TTL UART เชื่อมต่อกับพินอินพุต RXD (MCU, PC) ภายนอก สามารถกำหนดค่าเป็น Open-Drain หรือ Push-Pull Output |
5 | ออกมา | เอาท์พุท | เพื่อระบุสถานะการทำงานของโมดูลและปลุก MCU ภายนอก ในระหว่างขั้นตอนการเริ่มต้นการตรวจสอบตนเอง PIN จะส่งออกในระดับต่ำ มันสามารถกำหนดค่าเป็นเอาต์พุตแบบเปิด-ท่อหรือแบบพุชดึง (อนุญาตให้ลอยได้) |
| 6 | VCC | แหล่งจ่ายไฟ 3V ~ 5.5V DC | |
| 7 | gnd | พื้น |
อย่างที่คุณเห็นคุณสามารถตั้งค่าโหมดต่าง ๆ ผ่านหมุด M0 และ M1
| โหมด | M1 | M0 | คำอธิบาย |
|---|---|---|---|
| ปกติ | 0 | 0 | ช่อง UART และ Wireless เปิดอยู่และการส่งผ่านโปร่งใสเปิดอยู่ |
| เครื่องส่งสัญญาณ | 0 | 1 | เครื่องส่งสัญญาณ |
| ตัวรับสัญญาณ | 1 | 0 | WOR TEACIVER (รองรับตื่นขึ้นมาทางอากาศ) |
| โหมดสลีปลึก | 1 | 1 | โมดูลจะเข้าสู่การนอนหลับ (ตื่นขึ้นมาโดยอัตโนมัติเมื่อกำหนดค่าพารามิเตอร์) |
หมุดบางตัวสามารถใช้แบบคงที่ แต่ถ้าคุณเชื่อมต่อกับไมโครคอนโทรลเลอร์และกำหนดค่าไว้ในไลบรารีคุณจะได้รับประสิทธิภาพและสามารถควบคุมโหมดทั้งหมดผ่านซอฟต์แวร์ ถึงกระนั้นเราจะอธิบายได้ดีขึ้นต่อไป
อย่างที่ฉันได้กล่าวไปแล้วมันไม่จำเป็นที่จะต้องเชื่อมต่อหมุดทั้งหมดกับเอาต์พุตของไมโครคอนโทรลเลอร์ คุณสามารถใส่หมุด M0 และ M1 ให้สูงหรือต่ำเพื่อรับการกำหนดค่าที่ต้องการ หาก คุณไม่เชื่อมต่อ AUX ไลบรารีจะล่าช้าอย่างสมเหตุสมผลเพื่อให้แน่ใจว่าการดำเนินการเสร็จสมบูรณ์ ( หากคุณมีปัญหา กับ การแช่แข็ง ของอุปกรณ์ คุณต้องใส่ตัวต้านทาน 4.7K แบบดึงขึ้นหรือเชื่อมต่อกับอุปกรณ์ได้ดีกว่า )
เมื่อส่งข้อมูลสามารถใช้เพื่อปลุก MCU ภายนอกและส่งคืนการถ่ายโอนข้อมูลที่สูง
เมื่อได้รับ AUX จะต่ำและส่งกลับสูงเมื่อบัฟเฟอร์ว่างเปล่า
นอกจากนี้ยังใช้สำหรับการตรวจสอบตนเองเพื่อกู้คืนการทำงานปกติ (ในโหมด Power-On และ Sleep/Program)
SCHEMA การเชื่อมต่อ ESP8266 นั้นตรงไปตรงมามากขึ้นเนื่องจากทำงานได้ที่แรงดันไฟฟ้าเดียวกันของการสื่อสารเชิงตรรกะ (3.3V)
จำเป็นอย่างยิ่งที่จะต้องเพิ่มตัวต้านทานแบบดึงขึ้น (4,7kohm) เพื่อให้ได้ความมั่นคงที่ดี
| E22 | esp8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| TX | PIN D2 (pullup 4,7kΩ) |
| RX | PIN D3 (pullup 4,7kΩ) |
| ออกมา | PIN D5 (pullup 4,7kΩ) |
| VCC | 5V (แต่ทำงานด้วยพลังงานน้อยลงใน 3.3V) |
| gnd | gnd |
สคีมาการเชื่อมต่อที่คล้ายกันสำหรับ ESP32 แต่สำหรับ RX และ TX เราใช้ RX2 และ TX2 เพราะโดยค่าเริ่มต้น ESP32 ไม่มีซอฟต์แวร์ แต่มี 3 อนุกรม
| E22 | esp32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | PIN RX2 (pullup 4,7kΩ) |
| RX | PIN TX3 (pullup 4,7kΩ) |
| ออกมา | PIN D18 (Pullup 4,7KΩ) (D15 เพื่อตื่น) |
| VCC | 5V (แต่ทำงานด้วยพลังงานน้อยลงใน 3.3V) |
| gnd | gnd |
แรงดันไฟฟ้าที่ทำงานของ Arduino คือ 5V ดังนั้นเราจำเป็นต้องเพิ่มตัวแบ่งแรงดันไฟฟ้าบน Rx Pin M0 และ M1 ของโมดูล LORA เพื่อป้องกันความเสียหาย คุณสามารถรับข้อมูลเพิ่มเติมได้ที่นี่ตัวแบ่งแรงดันไฟฟ้า: เครื่องคิดเลขและแอปพลิเคชัน
คุณสามารถใช้ตัวต้านทาน 2KOHM เป็น GND และ 1KOHM จากสัญญาณจากนั้นนำเข้าด้วยกันบน RX
| M0 | 7 (ตัวแบ่งแรงดันไฟฟ้า) |
| M1 | 6 (ตัวแบ่งแรงดันไฟฟ้า) |
| TX | พิน 2 (pullup 4,7kΩ) |
| RX | PIN 3 (Pullup 4,7KΩ & Divider Voltage) |
| ออกมา | พิน 5 (pullup 4,7kΩ) |
| VCC | 5V |
| gnd | gnd |
| M0 | 2 (ตัวแบ่งแรงดันไฟฟ้า) |
| M1 | 3 (ตัวแบ่งแรงดันไฟฟ้า) |
| TX | PIN 14 TX (Pullup 4,7KΩ) |
| RX | PIN 13 RX (Pullup 4,7KΩ) |
| ออกมา | พิน 1 (pullup 4,7kΩ) |
| VCC | 5V |
| gnd | gnd |
ฉันสร้างชุดของตัวสร้างจำนวนมากเพราะเราสามารถมีตัวเลือกและสถานการณ์เพิ่มเติมในการจัดการ
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);
ชุดแรกของตัวสร้างถูกสร้างขึ้นเพื่อมอบหมายอนุกรมและพินอื่น ๆ ไปยังห้องสมุด
txE220pin และ rxE220pin เป็นพินที่เชื่อมต่อกับ UART พวกเขาเป็น ข้อบังคับauxPin เป็นพินที่ตรวจสอบการดำเนินการส่งและการรับสถานะ (เราจะอธิบายได้ดีขึ้นต่อไป) PIN นั้น ไม่จำเป็น หากคุณไม่ได้ตั้งค่าฉันใช้ความล่าช้าเพื่ออนุญาตให้การดำเนินการเสร็จสมบูรณ์ (ด้วยเวลาแฝง ฉันมีปัญหาเช่นอุปกรณ์แช่แข็งคุณต้องใส่ตัวต้านทาน 4.7k แบบดึงขึ้นหรือเชื่อมต่อกับอุปกรณ์ได้ดีกว่า )m0pin และ m1Pin เป็นพินที่จะเปลี่ยนโหมดการทำงาน (ดูตารางบน) ฉันคิดว่า หมุดนี้ใน“ การผลิต” กำลังจะเชื่อมต่อสูงหรือต่ำโดยตรง ถึงกระนั้นสำหรับการทดสอบพวกเขามีประโยชน์ในการจัดการโดยห้องสมุดbpsRate เป็นอัตราการรับส่งข้อมูลของซอฟต์วาเรียลโดยทั่วไปคือ 9600 (อัตราการรับส่งข้อมูลเพียงอย่างเดียวในโหมดการเขียนโปรแกรม/สลีป)ตัวอย่างง่ายๆคือ
#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
เราสามารถใช้ซอฟต์แวร์ได้โดยตรงกับตัวสร้างอื่น
lora_e220 (hardwareserial* อนุกรม, uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220 (hardwareserial* อนุกรม, byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220 (hardwareserial* อนุกรม, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
ตัวอย่างบนของตัวสร้างนี้สามารถทำได้เช่นนั้น
#include <softwareserial.h> #include "lora_e220.h"ซอฟต์แวร์ myserial (2, 3); // E220 TX E220 RX LORA_E220 E220TTL (& MySerial); // lora_e220 e220ttl (& myserial, 5, 7, 6);
ชุดสุดท้ายของตัวสร้างคือการอนุญาตให้ใช้ hardwareserial แทนซอฟต์แวร์
LORA_E220 (ซอฟต์วาเรียล* อนุกรม, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); LORA_E220 (ซอฟต์วาเรียล* อนุกรม, ไบต์ auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); LORA_E220 (ซอฟต์เวอเรียล* อนุกรม, ไบต์ auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
สำหรับ ESP32 คุณมีตัวสร้างเพิ่มเติมสามตัวเพื่ออนุญาตให้จัดการพินสำหรับฮาร์ดแวร์อนุกรม
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
คำสั่งเริ่มต้นใช้เพื่อเริ่มต้นอนุกรมและพินในโหมดอินพุตและเอาต์พุต
เป็นโมฆะเริ่มต้น ();
ในการดำเนินการคือ
// เริ่มต้นหมุดทั้งหมดและ uart e220ttl.begin ();
มีหลายวิธีในการจัดการการกำหนดค่าและรับข้อมูลเกี่ยวกับอุปกรณ์
ResponsEstructContainer getConfiguration (); Responsestatus setConfiguration (การกำหนดค่าการกำหนดค่า, program_command savetype = write_cfg_pwr_dwn_lose);ResponseStructContainer getModuleInformation(); void printParameters(struct Configuration configuration); ResponseStatus resetModule();
เพื่อลดความซับซ้อนของการจัดการการตอบสนองฉันได้สร้างชุดของคอนเทนเนอร์ซึ่งมีประโยชน์มากสำหรับการจัดการข้อผิดพลาดและการส่งคืนข้อมูลทั่วไป
ResponseStatus is a status container and has two จุดเข้าง่าย ๆ ด้วยสิ่งนี้คุณสามารถรับรหัสสถานะและคำอธิบายของรหัสสถานะ
serial.println (c.getResponsedescription ()); // คำอธิบายของรหัส serial.println (C.Code); // 1 ถ้าประสบความสำเร็จ
รหัสคือ
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
คอนเทนเนอร์นี้ถูกสร้างขึ้นเพื่อจัดการการตอบสนองของสตริงและมีสองจุดเข้า
data ที่มีสตริงที่ส่งคืนจากข้อความและ status เป็นอินสแตนซ์ของ RepsonseStatus
ResponseContainer RS = E220TTL.ReceiveMessage (); ข้อความสตริง = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message);
แต่คำสั่งนี้จะอ่านข้อมูลทั้งหมดในบัฟเฟอร์ หากคุณได้รับสามข้อความคุณจะอ่านโน้ตทั้งสามครั้งในครั้งเดียวและวิธีแก้ปัญหาง่าย ๆ ของฉันคือการใช้อักขระสุดท้ายเพื่อส่งในตอนท้ายของข้อความเพื่อเริ่มต้นฉันใช้ 0 (อักขระ null)
ResponseContainer RS = E220TTL.ReceiveMessageAntil ();
// คุณสามารถระบุตัวคั่นที่กำหนดเองได้เช่นกัน
// ResponseContainer RS = E220TTL.ReceiveMessageUntil ('|');
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);
อุปกรณ์รุ่นนี้รองรับ RSSI ด้วย หากต้องการอ่านพารามิเตอร์นั้น (หากคุณระบุในการกำหนดค่าที่คุณต้องการส่งด้วย) คุณสามารถใช้
Responsecontainer RC = E220TTL.ReceiveMessagersSi (); ข้อความสตริง = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message); Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
ResponseStructContainer เป็นภาชนะที่“ ซับซ้อน” มากขึ้น ฉันใช้สิ่งนี้เพื่อจัดการโครงสร้างมันมีจุดเข้าร่วมของ Responsecontainer เหมือนกัน แต่ข้อมูลเป็นตัวชี้โมฆะในการจัดการโครงสร้างที่ซับซ้อน
ResponseStructContainer C;
c = e220ttl.getConfiguration ();
// เป็นสิ่งสำคัญรับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด
การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า *) C.Data;
serial.println (c.status.getResponsedescription ());
serial.println (c.status.code);
c.close ();
หากคุณได้รับข้อความที่มีโครงสร้างด้วย RSSI คุณสามารถใช้งานได้
ResponsEstructContainer RSC = E220TTL.ReceiveMessagersSi (sizeof (ข้อความ));
serial.println (rsc.status.getResponsedescription ());
ข้อความ struct ข้อความ = *(ข้อความ *) rsc.data;
serial.println (message.type);
serial.println (message.message);
serial.println (*(float*) (message.temperature));
serial.print ("RSSI:"); serial.println (rsc.rssi, dec);
rsc.close ();
ทุกครั้งที่คุณใช้ ResponseStructContainer คุณต้องปิดด้วย close()
วิธีแรกคือ getConfiguration และคุณสามารถใช้เพื่อดึงข้อมูลทั้งหมดที่เก็บไว้ในอุปกรณ์
ResponsEstructContainer getConfiguration ();
นี่คือตัวอย่างการใช้งาน
ResponseStructContainer C;
c = e32ttl.getConfiguration ();
// เป็นสิ่งสำคัญรับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด
การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า *) C.Data;
serial.println (c.status.getResponsedescription ());
serial.println (c.status.code);
serial.println (configuration.sped.getuartbaudrate ());
c.close ();
โครงสร้างของการกำหนดค่ามีข้อมูลทั้งหมดของการตั้งค่าและฉันเพิ่มชุดของฟังก์ชั่นเพื่อรับคำอธิบายทั้งหมดของข้อมูลเดียว
configuration.addl = 0x03; // ส่วนแรกของที่อยู่ configuration.addh = 0x00; // ส่วนที่สอง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
คุณมีฟังก์ชั่นที่เทียบเท่าสำหรับแอตทริบิวต์ทั้งหมดเพื่อรับคำอธิบายทั้งหมด:
เป็นโมฆะ printParameters (การกำหนดค่าการกำหนดค่าโครงสร้าง) {
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("----------------------------------------");
-
ในทำนองเดียวกัน SetConfiguration ต้องการโครงสร้างการกำหนดค่าดังนั้นฉันคิดว่าวิธีที่ดีกว่าในการจัดการการกำหนดค่าคือการดึงข้อมูลปัจจุบันใช้การเปลี่ยนแปลงเพียงอย่างเดียวที่คุณต้องการและตั้งค่าอีกครั้ง
Responsestatus setConfiguration (การกำหนดค่าการกำหนดค่า, program_command savetype = write_cfg_pwr_dwn_lose);
configuration เป็นโครงสร้างที่แสดงก่อนหน้านี้ saveType อนุญาตให้คุณเลือกว่าการเปลี่ยนแปลงจะกลายเป็นถาวรหรือเฉพาะสำหรับเซสชันปัจจุบัน
ResponseStructContainer C; c = e32ttl100.getConfiguration (); // เป็นสิ่งสำคัญรับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า *) 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()
พารามิเตอร์ทั้งหมดได้รับการจัดการเป็นค่าคงที่:
| ชื่อ | คำอธิบาย | ที่อยู่ |
|---|---|---|
| การติดอันดับ | ไบต์ที่อยู่สูงของโมดูล (ค่าเริ่มต้น 00H) | 00H |
| addl | ไบต์ที่อยู่ต่ำของโมดูล (ค่าเริ่มต้น 00H) | 01h |
| ที่เร่งความเร็ว | ข้อมูลเกี่ยวกับอัตราความเท่าเทียมกันของอัตราข้อมูลและอัตราข้อมูลอากาศ | 02H |
| ตัวเลือก | ประเภทของการส่งขนาดแพ็คเก็ตอนุญาตข้อความพิเศษ | 03H |
| ชาน | ช่องทางการสื่อสาร (410M + Chan*1M), ค่าเริ่มต้น 17H (433MHz), ใช้ได้เฉพาะสำหรับอุปกรณ์ 433MHz ตรวจสอบด้านล่างเพื่อตรวจสอบความถี่ที่ถูกต้องของอุปกรณ์ของคุณ | 04H |
| ตัวเลือก | ประเภทของการส่งขนาดแพ็คเก็ตอนุญาตข้อความพิเศษ | 05H |
| transmission_mode | พารามิเตอร์จำนวนมากที่ระบุรูปแบบการส่งสัญญาณ | 06h |
| ห้องใต้ดิน | การเข้ารหัสเพื่อหลีกเลี่ยงการสกัดกั้น | 07h |
UART PARITY BIT: โหมด UART อาจแตกต่างกันระหว่างฝ่ายสื่อสาร
| UART PARITY BIT | ค่าคงที่ |
|---|---|
| 8N1 (ค่าเริ่มต้น) | mode_00_8n1 |
| 8o1 | mode_01_8o1 |
| 8E1 | mode_10_8e1 |
| 8N1 (เท่ากับ 00) | mode_11_8n1 |
UART Baud Rate: อัตราการรับส่งข้อมูล UART อาจแตกต่างกันระหว่างฝ่ายสื่อสาร (แต่ไม่ได้แนะนำ) อัตราการรับส่งข้อมูล UART ไม่มีส่วนเกี่ยวข้องกับพารามิเตอร์การส่งไร้สายและจะไม่ส่งผลกระทบต่อคุณสมบัติการส่ง/รับแบบไร้สาย
| TTL UART BAUD RATE (BPS) | ค่าคงที่ |
|---|---|
| 1200 | uart_bps_1200 |
| 2400 | uart_bps_2400 |
| 4800 | uart_bps_4800 |
| 9600 (ค่าเริ่มต้น) | uart_bps_9600 |
| 2463 | uart_bps_19200 |
| 38400 | uart_bps_38400 |
| 57600 | uart_bps_57600 |
| 115200 | uart_bps_115200 |
อัตราข้อมูลอากาศ: อัตราข้อมูลอากาศที่ต่ำลงเท่าไหร่ระยะการส่งสัญญาณที่ยาวขึ้นประสิทธิภาพการต่อต้านการแทรกแซงที่ดีขึ้นและเวลาในการส่งที่ยาวนานขึ้น อัตราข้อมูลอากาศจะต้องคงที่สำหรับฝ่ายสื่อสารทั้งสอง
| อัตราข้อมูลอากาศ (BPS) | ค่าคงที่ |
|---|---|
| 2.4K | air_data_rate_000_24 |
| 2.4K | air_data_rate_001_24 |
| 2.4K (ค่าเริ่มต้น) | 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 |
นี่คือความยาวสูงสุดของแพ็คเก็ต
เมื่อข้อมูลมีขนาดเล็กกว่าความยาวของแพ็คเก็ตย่อยเอาต์พุตอนุกรมของปลายรับจะเป็นเอาต์พุตอย่างต่อเนื่องอย่างต่อเนื่อง พอร์ตอนุกรมปลายทางที่ได้รับจะส่งออกแพ็คเก็ตย่อยเมื่อข้อมูลมีขนาดใหญ่กว่าความยาวของแพ็คเก็ตย่อย
| ขนาดแพ็คเก็ต | ค่าคงที่ |
|---|---|
| 200BYTES (ค่าเริ่มต้น) | SPS_200_00 |
| 128BYTES | SPS_128_01 |
| 64bytes | SPS_064_10 |
| 32bytes | SPS_032_11 |
คำสั่งนี้สามารถเปิด/ปิดใช้งานประเภทการจัดการของ RSSI และจำเป็นต้องจัดการการกำหนดค่าระยะไกล การให้ความสนใจไม่ใช่พารามิเตอร์ RSSI ในข้อความ
เมื่อเปิดใช้งานคำสั่ง C0, C1, C2, C3 สามารถส่งในโหมดการส่งสัญญาณหรือโหมดการส่งสัญญาณ WOR เพื่ออ่านการลงทะเบียน ลงทะเบียน 0x00: เสียงรบกวนรอบข้าง RSSI ลงทะเบียน 0x01: RSSI เมื่อได้รับข้อมูลครั้งล่าสุด
| เปิดเสียงรบกวนรอบข้าง RSSI | ค่าคงที่ |
|---|---|
| เปิดใช้งาน | rssi_ambient_noise_enabled |
| ปิดการใช้งาน (ค่าเริ่มต้น) | rssi_ambient_noise_disabled |
คุณสามารถเปลี่ยนค่าคงที่ชุดนี้ได้โดยใช้การกำหนดเช่น So:
#Define E220_22 // ค่าเริ่มต้นโดยไม่ต้องตั้งค่า
ใช้ได้กับ E220 ด้วย 22dBm เป็นกำลังสูงสุด
ไม่แนะนำให้ส่งพลังงานต่ำเนื่องจากประสิทธิภาพของแหล่งจ่ายไฟต่ำ
| กำลังการส่งสัญญาณ (การประมาณ) | ค่าคงที่ |
|---|---|
| 22dBm (ค่าเริ่มต้น) | Power_22 |
| 17dBM | Power_17 |
| 13dBm | Power_13 |
| 10dbm | Power_10 |
ใช้ได้กับ E220 ด้วย 30dbm เป็นพลังงานสูงสุด
ไม่แนะนำให้ส่งพลังงานต่ำเนื่องจากประสิทธิภาพของแหล่งจ่ายไฟต่ำ
#Define E220_30
| กำลังการส่งสัญญาณ (การประมาณ) | ค่าคงที่ |
|---|---|
| 30DBM (ค่าเริ่มต้น) | Power_30 |
| 27dBm | Power_27 |
| 24dBM | Power_24 |
| 21dBm | Power_21 |
คุณสามารถกำหนดค่าความถี่ของช่องได้ด้วยการกำหนดนี้:
// หนึ่งใน #define frequency_433 #define frequency_170 #define frequency_470 #define frequency_868 #define frequency_915
เมื่อเปิดใช้งานโมดูลจะได้รับข้อมูลไร้สายและจะเป็นไปตามไบต์ความแข็งแรงของ RSSI หลังจากเอาต์พุตผ่านพอร์ตอนุกรม TXD
| เปิดใช้งาน RSSI | ค่าคงที่ |
|---|---|
| เปิดใช้งาน | rssi_enabled |
| ปิดการใช้งาน (ค่าเริ่มต้น) | rssi_disabled |
โหมดการส่งสัญญาณ: สามไบต์แรกของเฟรมข้อมูลของผู้ใช้แต่ละคนสามารถใช้เป็นที่อยู่สูง/ต่ำและช่องในโหมดการส่งคงที่ โมดูลจะเปลี่ยนที่อยู่และช่องทางเมื่อส่ง และมันจะเปลี่ยนกลับไปใช้การตั้งค่าดั้งเดิมหลังจากเสร็จสิ้นกระบวนการ
| บิตการส่งสัญญาณคงที่ | ค่าคงที่ |
|---|---|
| โหมดการส่งสัญญาณคงที่ | ft_fixed_transmission |
| โหมดการส่งข้อมูลโปร่งใส (ค่าเริ่มต้น) | ft_transparent_transmission |
เมื่อเปิดใช้งานข้อมูลไร้สายจะได้รับการตรวจสอบก่อนที่จะถูกส่งไปหลีกเลี่ยงการรบกวนในระดับหนึ่ง แต่อาจทำให้ข้อมูลล่าช้า
| LBT เปิดใช้งานไบต์ | ค่าคงที่ |
|---|---|
| เปิดใช้งาน | lbt_enabled |
| ปิดการใช้งาน (ค่าเริ่มต้น) | lbt_disabled |
หาก WOR กำลังส่งสัญญาณ: หลังจากตัวรับสัญญาณ WOR ได้รับข้อมูลไร้สายและส่งออกผ่านพอร์ตอนุกรมมันจะรอ 1,000ms ก่อนที่จะป้อน WOR อีกครั้ง ผู้ใช้สามารถป้อนข้อมูลพอร์ตอนุกรมและส่งคืนผ่านทางไร้สายในช่วงเวลานี้ แต่ละไบต์อนุกรมจะได้รับการรีเฟรชเป็นเวลา 1,000 มม. ผู้ใช้จะต้องส่งไบต์แรกภายใน 1,000ms
| เวลาตื่นไร้สาย | ค่าคงที่ |
|---|---|
| 500ms | wake_up_500 |
| 1,000ms | wake_up_1000 |
| 1500ms | wake_up_1500 |
| 2000ms (ค่าเริ่มต้น) | wake_up_2000 |
| 2500ms | wake_up_2500 |
| 3000ms | wake_up_3000 |
| 3500ms | wake_up_3500 |
| 4000ms | wake_up_4000 |
ก่อนอื่นเราต้องแนะนำวิธีการที่ง่าย แต่ใช้งานได้จริงเพื่อตรวจสอบว่ามีบางอย่างอยู่ในบัฟเฟอร์ที่ได้รับหรือไม่
มีอยู่ ();
มันง่ายที่จะส่งคืนจำนวนไบต์ที่คุณมีในสตรีมปัจจุบัน
โหมดการส่งสัญญาณปกติ/โปร่งใสส่งข้อความไปยังอุปกรณ์ทั้งหมดที่มีที่อยู่และช่องทางเดียวกัน
มีวิธีการมากมายในการส่ง/รับข้อความและเราจะอธิบายรายละเอียด:
Responsestatus sendMessage (ข้อความสตริง const);
Responsecontainer รับ ();
วิธีแรกคือ SendMessage และใช้เพื่อส่งสตริงไปยังอุปกรณ์ใน โหมดปกติ
Responsestatus rs = e220ttl.sendMessage ("prova");
serial.println (rs.getResponsedescription ());
อุปกรณ์อื่น ๆ ก็ทำในลูป
if (e220ttl.available ()> 1) {
ResponseContainer RS = E220TTL.ReceiveMessage ();
ข้อความสตริง = rs.data; // เป็นครั้งแรกที่ได้รับข้อมูล
serial.println (rs.status.getResponsedescription ());
serial.println (ข้อความ);
-
ให้ความสนใจหากคุณได้รับข้อความหลายข้อความในบัฟเฟอร์และไม่ต้องการอ่านทั้งหมดในครั้งเดียว คุณต้องใช้ ResponseContainer rs = e220ttl.receiveMessageUntil(); ด้วยตัวคั่นที่สิ้นสุดการส่งข้อความ
หากคุณเปิดใช้งาน RSSI คุณต้องใช้ receiveMessageRSSI
หากคุณต้องการส่งโครงสร้างที่ซับซ้อนคุณสามารถใช้วิธีนี้ได้
Responsestatus sendMessage (const void *ข้อความ, const uint8_t ขนาด);
ResponsEstructContainer รับ (ขนาด const uint8_t);
มันใช้ในการส่งโครงสร้างตัวอย่างเช่น:
โครงสร้าง messaggione {
ประเภทถ่าน [5];
ข้อความถ่าน [8];
บูล Mitico;
-
struct messaggione messaggione = {"temp", "peple", true};
Responsestatus rs = e220ttl.sendmessage (& messaggione, sizeof (messaggione));
serial.println (rs.getResponsedescription ());
และอีกด้านหนึ่งคุณสามารถรับข้อความได้
ResponsEstructContainer RSC = E22TTL.ReceiveMessage (sizeof (messaggione));
struct messaggione messaggione = *(messaggione *) rsc.data;
serial.println (messaggione.message);
serial.println (messaggione.mitico);
rsc.close ();
หากคุณเปิดใช้งาน RSSI คุณต้องใช้ receiveMessageRSSI
หากคุณต้องการอ่านส่วนแรกของข้อความเพื่อจัดการโครงสร้างประเภทเพิ่มเติมคุณสามารถใช้วิธีนี้ได้
Responsecontainer รับ InitialMessage (ขนาด const uint8_t);
ฉันสร้างมันขึ้นมาเพื่อรับสตริงที่มีประเภทหรืออื่น ๆ เพื่อระบุโครงสร้างเพื่อโหลด
struct messaggione {// โครงสร้างบางส่วนที่ไม่มีประเภท
ข้อความถ่าน [8];
บูล 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();
ในทำนองเดียวกันฉันสร้างชุดของวิธีการที่จะใช้กับการส่งสัญญาณคงที่
คุณต้องเปลี่ยนเฉพาะวิธีการส่ง เนื่องจากอุปกรณ์ปลายทางไม่ได้ รับคำนำพร้อมที่อยู่และช่องทางเมื่อตั้งค่าโหมดคงที่
ดังนั้นสำหรับข้อความสตริงคุณมี
Responsestatus sendfixedMessage (Byte addh, byte addl, byte chan, ข้อความสตริง const);
Responsestatus sendbroadcastFixedMessage (Byte Chan, ข้อความสตริง const);
และสำหรับโครงสร้างคุณมี
Responsestatus sendfixedMessage (Byte addh, byte addl, byte chan, const void *ข้อความ, const uint8_t ขนาด);
Responsestatus sendbroadcastFixedMessage (Byte Chan, const void *ข้อความ, const uint8_t ขนาด);
นี่คือตัวอย่างง่ายๆ
Responsestatus rs = e220ttl.sendfixedMessage (0, 0, 0x17, & messaggione, sizeof (messaggione)); // Responsestatus rs = e220ttl.sendfixedMessage (0, 0, 0x17, "ciao");
การส่งสัญญาณคงที่มีสถานการณ์มากขึ้น
หากคุณส่งไปยังอุปกรณ์เฉพาะ (การส่งสัญญาณคงที่สถานการณ์ที่สอง) คุณต้องเพิ่ม Addl, Addh และ Chan เพื่อระบุโดยตรง
Responsestatus rs = e220ttl.sendfixedMessage (2, 2, 0x17, "ข้อความถึงอุปกรณ์");
หากคุณต้องการส่งข้อความไปยังอุปกรณ์ทั้งหมดในช่องที่ระบุคุณสามารถใช้วิธีนี้ได้
Responsestatus rs = e220ttl.sendbroadcastfixedMessage (0x17, "ข้อความไปยังอุปกรณ์ของช่อง");
หากคุณต้องการรับข้อความออกอากาศทั้งหมดในเครือข่ายคุณต้องตั้งค่า ADDH และ ADDL ด้วย BROADCAST_ADDRESS
ResponseStructContainer C; c = e220ttl.getConfiguration (); // เป็นสิ่งสำคัญรับตัวชี้การกำหนดค่าก่อนการดำเนินการอื่น ๆ ทั้งหมด การกำหนดค่าการกำหนดค่า = *(การกำหนดค่า *) 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();
ตอนนี้คุณมีข้อมูลทั้งหมดในการทำงานของคุณ แต่ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะแสดงตัวอย่างจริงเพื่อทำความเข้าใจความเป็นไปได้ทั้งหมดที่ดีขึ้น
ห้องสมุด GitHub