

https://downloads.arduino.cc/libraries/logs/github.com/xreef/ebyte_lora_e22_series_library/
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
ฉันสร้างไลบรารีเพื่อจัดการอุปกรณ์ EBYTE E22 ของอุปกรณ์ LORA, อุปกรณ์ที่ทรงพลังมาก, อุปกรณ์ที่เรียบง่ายและราคาถูก
LORA หรือ Telemetry ข้อมูลไร้สายระยะยาวเป็นเทคโนโลยีที่บุกเบิกโดย Semtech ที่ทำงานที่ความถี่ต่ำกว่า NRF24L01 (433 MHz, 868 MHz หรือ 916 MHz อีกครั้ง 2.4 GHz สำหรับ NRF24L01)
Lora E22
คุณสามารถค้นหาได้ที่นี่ Aliexpress (433MHz 4km) - Aliexpress (433MHz 10km)
โปรดดูบทความของฉันเพื่อรับสคีมาอัปเดต
คุณสามารถค้นหาห้องสมุดของฉันได้ที่นี่
เพื่อดาวน์โหลด
คลิกปุ่มดาวน์โหลดที่มุมขวาบนเปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด LORA_E22
ตรวจสอบว่าโฟลเดอร์ LORA_E22 มี LORA_E22.CPP และ LORA_E22.H
วางโฟลเดอร์ LORA_E22 ห้องสมุดของคุณ / ไลบรารี / โฟลเดอร์
คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นห้องสมุดแรกของคุณ
รีสตาร์ท IDE
E22
| หมายเลขพิน | รายการพิน | ทิศทางพิน | แอปพลิเคชัน PIN |
|---|---|---|---|
| 1 | M0 | อินพุต (pull-up อ่อนแอ) | ทำงานกับ M1 และตัดสินใจเลือกโหมดการทำงานทั้งสี่ไม่อนุญาตให้มีการศึกษา |
| 2 | M1 | อินพุต (pull-up อ่อนแอ) | ทำงานกับ M0 และตัดสินใจเลือกโหมดการทำงานทั้งสี่ไม่อนุญาตให้มีการศึกษาแบบ floating |
| 3 | RXD | ป้อนข้อมูล | อินพุต TTL UART เชื่อมต่อกับภายนอก (MCU, PC) TXD outputpin สามารถกำหนดค่าเป็นแบบเปิดหรืออินพุตแบบดึงขึ้น |
| 4 | TXD | เอาท์พุท | เอาต์พุต TTL UART เชื่อมต่อกับ RXD ภายนอก (MCU, PC) InputPin สามารถกำหนดค่าเป็น Open-Drain หรือ Push-Pull Output |
5 | ออกมา | เอาท์พุท | ต่อ indicare lo stato di funzionamento del modulo e riattivare l'cu esterno Durante la procedura di inizializzazione di autocontrollo, il pin emette una bassa tensione può Essere configurato มา uscita open-drain o เอาท์พุท push-pull (èความยินยอมที่ไม่ใช่ metterlo a terra, ma se hai ปัญหา, โฆษณา esempio ti si freeze il dispositivo è priternibile mettere una restenza di pull-ligo meglo meglo |
| 6 | VCC | แหล่งจ่ายไฟ 2.3V ~ 5.5V DC | |
| 7 | gnd | พื้น |
อย่างที่คุณเห็นคุณสามารถตั้งค่าโหมดต่าง ๆ ผ่านหมุด M0 และ M1
| โหมด | M1 | M0 | คำอธิบาย |
|---|---|---|---|
| ปกติ | 0 | 0 | ช่อง UART และ Wireless เปิดใช้งานการส่งข้อมูลแบบโปร่งใสเปิดอยู่ (รองรับการกำหนดค่าเหนืออากาศผ่านคำสั่งพิเศษ) |
| โหมด WOR | 0 | 1 | สามารถนิยามได้ว่าเป็นเครื่องส่งสัญญาณและเครื่องรับสัญญาณ |
| โหมดกำหนดค่า | 1 | 0 | ผู้ใช้สามารถเข้าถึงการลงทะเบียนผ่านพอร์ตอนุกรมเพื่อควบคุมสถานะการทำงานของโมดูล |
| โหมดสลีปลึก | 1 | 1 | โหมดสลีป |
อย่างที่คุณเห็นมีหมุดบางตัวที่สามารถใช้งานได้อย่างต่อเนื่อง แต่ถ้าคุณเชื่อมต่อกับไลบรารีที่คุณได้รับจากประสิทธิภาพและคุณสามารถควบคุมโหมดทั้งหมดผ่านซอฟต์แวร์ได้ แต่เราจะอธิบายได้ดีขึ้นต่อไป
อย่างที่ฉันบอกไปแล้วว่ามันไม่สำคัญที่จะเชื่อมต่อ PIN ทั้งหมดกับเอาท์พุทของไมโครคอนโทรลเลอร์คุณสามารถใส่หมุด M0 และ M1 ให้สูงหรือต่ำเพื่อรับการกำหนดค่าที่ต้องการและ หากคุณไม่เชื่อมต่อ AUX ห้องสมุดตั้งค่าความล่าช้าที่สมเหตุสมผลเพื่อให้แน่ใจว่าการดำเนินการเสร็จสมบูรณ์
เมื่อส่งข้อมูลสามารถใช้เพื่อปลุก MCU ภายนอกและส่งคืนการถ่ายโอนข้อมูลที่สูง
lora e22 aux pin ในการส่งสัญญาณ
เมื่อได้รับ aux จะลดลงและกลับสูงเมื่อบัฟเฟอร์ว่างเปล่า
lora e22 aux pin บนแผนกต้อนรับ
นอกจากนี้ยังใช้สำหรับการตรวจสอบตนเองเพื่อกู้คืนการทำงานปกติ (ในโหมด Power-On และ Sleep/Program)
lora e22 aux pin ในการตรวจสอบตนเอง
SCHEMA การเชื่อมต่อ ESP8266 นั้นง่ายกว่าเพราะมันทำงานได้ที่แรงดันไฟฟ้าเดียวกันของการสื่อสารเชิงตรรกะ (3.3V)
Lora E22 TTL 100 WEMOS D1 เชื่อมต่ออย่างเต็มที่
สิ่งสำคัญคือการเพิ่มตัวต้านทานแบบดึงขึ้น (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 อนุกรม
EBYTE LORA E22 อุปกรณ์ ESP32 Dev Kit V1 Breadboard การเชื่อมต่อเต็มรูปแบบ
| E22 | esp32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | PIN RX2 (pullup 4,7kΩ) |
| RX | PIN TX3 (pullup 4,7kΩ) |
| ออกมา | PIN D18 (pullup 4,7kΩ) |
| VCC | 5V (แต่ทำงานด้วยพลังงานน้อยลงใน 3.3V) |
| gnd | gnd |
แรงดันไฟฟ้าที่ทำงานของ Arduino คือ 5V ดังนั้นเราจำเป็นต้องเพิ่มตัวแบ่งแรงดันไฟฟ้าใน Rx Pin M0 และ M1 ของโมดูล LORA เพื่อป้องกันความเสียหายคุณสามารถรับข้อมูลเพิ่มเติมได้ที่นี่ Divider แรงดันไฟฟ้า: เครื่องคิดเลขและแอปพลิเคชัน
คุณสามารถใช้ตัวต้านทาน 2KOHM ไปยัง GND และ 1KOHM จากสัญญาณได้มากกว่าการรวมกันบน RX
Lora E22 TTL 100 Arduino เชื่อมต่ออย่างเต็มที่
| 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 |
ฉันสร้างชุดของตัวสร้างค่อนข้างมากเพราะเราสามารถมีตัวเลือกและสถานการณ์เพิ่มเติมในการจัดการ
LoRa_E22 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);ชุดแรกของตัวสร้างถูกสร้างขึ้นเพื่อมอบหมายการจัดการของอนุกรมและพินอื่น ๆ ไปยังห้องสมุด
txE22pin และ rxE22pin เป็นพินที่เชื่อมต่อกับ UART และ จำเป็นต้องมีauxPin เป็นพินที่ตรวจสอบการดำเนินการส่งและสถานะการรับ (เราจะอธิบายได้ดีขึ้นต่อไป) PIN นั้น ไม่จำเป็น ถ้าคุณไม่ได้ตั้งค่าฉันใช้ความล่าช้าเพื่อให้การดำเนินการเสร็จสมบูรณ์ (พร้อมเวลาแฝง ฉันมีปัญหาเช่นอุปกรณ์แช่แข็งm0pin และ m1Pin เป็นพินเพื่อเปลี่ยนโหมดการทำงาน (ดูตารางบน) ฉันคิดว่า หมุดนี้ใน "การผลิต" จะเชื่อมต่อโดยตรงหรือต่ำ แต่สำหรับการทดสอบพวกเขาจะได้รับการจัดการโดยห้องสมุดbpsRate เป็น boudrate ของ softwareserial โดยปกติคือ 9600 (อัตราการรับส่งข้อมูลเพียงอย่างเดียวในโหมดโปรแกรม/สลีป)ตัวอย่างง่ายๆคือ
# include " LoRa_E22.h "
LoRa_E22 e22ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E22 e22ttl100(2, 3, 5, 6, 7); // RX, TXเราสามารถใช้ซอฟต์แวร์โดยตรงกับตัวสร้างอื่นได้โดยตรง
LoRa_E22 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);ตัวอย่างบนของตัวสร้างนี้สามารถทำได้เช่นนั้น
# include < SoftwareSerial.h >
# include " LoRa_E22.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E22 e22ttl100 (mySerial);
// LoRa_E22 e22ttl100(&mySerial, 5, 7, 6);ชุดสุดท้ายของตัวสร้างคืออนุญาตให้ใช้ hardwareserial แทน softwareserial
LoRa_E22 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);คำสั่งเริ่มต้นใช้เพื่อเริ่มต้นอนุกรมและพินในโหมดอินพุตและเอาต์พุต
void begin ();ในการดำเนินการคือ
// Startup all pins and UART
e22ttl100.begin();มีชุดของวิธีการจัดการการกำหนดค่าและรับข้อมูลของอุปกรณ์
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);เพื่อลดความซับซ้อนของการจัดการการตอบสนองฉันสร้างชุดคอนเทนเนอร์สำหรับฉันอย่างมีประโยชน์ในการจัดการข้อผิดพลาดและส่งคืนข้อมูลทั่วไป
นี่คือคอนเทนเนอร์สถานะและมี 2 จุดเข้าง่าย ๆ ด้วยสิ่งนี้คุณสามารถรับรหัสสถานะและคำอธิบายของรหัสสถานะ
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Successรหัสคือ
E22_SUCCESS = 1 ,
ERR_E22_UNKNOWN,
ERR_E22_NOT_SUPPORT,
ERR_E22_NOT_IMPLEMENT,
ERR_E22_NOT_INITIAL,
ERR_E22_INVALID_PARAM,
ERR_E22_DATA_SIZE_NOT_MATCH,
ERR_E22_BUF_TOO_SMALL,
ERR_E22_TIMEOUT,
ERR_E22_HARDWARE,
ERR_E22_HEAD_NOT_RECOGNIZEDคอนเทนเนอร์นี้ถูกสร้างขึ้นเพื่อจัดการการตอบสนองของสตริงและมี 2 จุดเข้า
data ที่มีสตริงที่ส่งคืนจากข้อความและ status เป็นอินสแตนซ์ของ RepsonseStatus
ResponseContainer rs = e22ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);นี่คือคอนเทนเนอร์ที่ซับซ้อนมากขึ้นฉันใช้สิ่งนี้เพื่อจัดการโครงสร้างมันมีจุดเข้าร่วมของ Responsecontainer เท่ากัน แต่ข้อมูลเป็นตัวชี้โมฆะในการจัดการโครงสร้างที่ซับซ้อน
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
c.close();วิธีแรกคือ getConfiguration คุณสามารถใช้เพื่อดึงข้อมูลทั้งหมดที่เก็บไว้ในอุปกรณ์
ResponseStructContainer getConfiguration ();นี่เป็นตัวอย่างการใช้งาน
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration.SPED.getUARTBaudRate());
c.close();โครงสร้างของการกำหนดค่ามีข้อมูลทั้งหมดของการตั้งค่าและฉันเพิ่มชุดของฟังก์ชั่นเพื่อรับคำอธิบายทั้งหมดของข้อมูลเดียว
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
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_240_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; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timingคุณมีฟังก์ชั่นที่เทียบเท่าเพื่อรับคำอธิบายทั้งหมด:
DEBUG_PRINT (F( " HEAD : " )); DEBUG_PRINT(configuration.COMMAND, HEX);DEBUG_PRINT( " " );DEBUG_PRINT(configuration.STARTING_ADDRESS, HEX);DEBUG_PRINT( " " );DEBUG_PRINTLN(configuration.LENGHT, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " AddH : " )); DEBUG_PRINTLN(configuration.ADDH, HEX);
DEBUG_PRINT (F( " AddL : " )); DEBUG_PRINTLN(configuration.ADDL, HEX);
DEBUG_PRINT (F( " NetID : " )); DEBUG_PRINTLN(configuration.NETID, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " Chan : " )); DEBUG_PRINT(configuration.CHAN, DEC); DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.getChannelDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " SpeedParityBit : " )); DEBUG_PRINT(configuration.SPED.uartParity, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTParityDescription());
DEBUG_PRINT (F( " SpeedUARTDatte : " )); DEBUG_PRINT(configuration.SPED.uartBaudRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTBaudRateDescription());
DEBUG_PRINT (F( " SpeedAirDataRate : " )); DEBUG_PRINT(configuration.SPED.airDataRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getAirDataRateDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " OptionSubPacketSett: " )); DEBUG_PRINT(configuration.OPTION.subPacketSetting, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getSubPacketSetting());
DEBUG_PRINT (F( " OptionTranPower : " )); DEBUG_PRINT(configuration.OPTION.transmissionPower, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getTransmissionPowerDescription());
DEBUG_PRINT (F( " OptionRSSIAmbientNo: " )); DEBUG_PRINT(configuration.OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getRSSIAmbientNoiseEnable());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " TransModeWORPeriod : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
DEBUG_PRINT (F( " TransModeTransContr: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORTransceiverControl, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORTransceiverControlDescription());
DEBUG_PRINT (F( " TransModeEnableLBT : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnableRSSI: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnabRepeat: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRepeater, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRepeaterModeEnableByteDescription());
DEBUG_PRINT (F( " TransModeFixedTrans: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());ในลักษณะเดียวกัน setConfiguration ต้องการ strucutre การกำหนดค่าดังนั้นฉันคิดว่าวิธีที่ดีกว่าในการจัดการการกำหนดค่าคือการดึงค่าปัจจุบันใช้การเปลี่ยนแปลงเพียงอย่างเดียวที่คุณต้องการและตั้งค่าอีกครั้ง
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration เป็น Strucutre previsiouly show, saveType อนุญาตให้คุณเลือก choiche หากการเปลี่ยนแปลงกลายเป็นอย่างถาวรสำหรับเซสชันปัจจุบันเท่านั้น
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) 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.NETID = 0x00 ; // NETID used for repeater function
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_240_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; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
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-FFH |
| addl | ไบต์ที่อยู่ต่ำของโมดูล (ค่าเริ่มต้น 00H) | 00H-FFH |
| ที่เร่งความเร็ว | ข้อมูลเกี่ยวกับอัตราความเท่าเทียมกันของอัตราข้อมูลและอัตราข้อมูลอากาศ | |
| ชาน | ช่องทางการสื่อสาร (410M + Chan*1M), ค่าเริ่มต้น 17H (433MHz), ใช้ได้เฉพาะสำหรับอุปกรณ์ 433MHz Chek ด้านล่างเพื่อตรวจสอบความถี่ที่ถูกต้องของอุปกรณ์ของคุณ | 00H-1FH |
| ตัวเลือก | ประเภทของการส่งขนาดแพ็คเก็ตอนุญาตข้อความพิเศษ | |
| transmission_mode | พารามิเตอร์จำนวนมากที่ระบุรูปแบบการส่งสัญญาณ |
ตัวเลือก
ประเภทของการส่งการตั้งค่าแบบดึงขึ้นเวลาปลุก FEC กำลังส่งกำลัง
UART PARITY BIT: โหมด UART อาจแตกต่างกันระหว่างฝ่ายสื่อสาร
| 4 | 3 | UART PARITY BIT | ค่าคงที่ |
| 0 | 0 | 8N1 (ค่าเริ่มต้น) | mode_00_8n1 |
| 0 | 1 | 8o1 | mode_01_8o1 |
| 1 | 0 | 8 E1 | mode_10_8e1 |
| 1 | 1 | 8N1 (เท่ากับ 00) | mode_11_8n1 |
UART Baud Rate: UART Baud Rate สามารถแตกต่างกันระหว่างฝ่ายสื่อสารอัตรา UART Baud ไม่มีส่วนเกี่ยวข้องกับพารามิเตอร์การส่งไร้สายและจะไม่ส่งผลกระทบต่อคุณสมบัติการส่ง / รับแบบไร้สาย
| 7 | 6 | 5 | TTL UART BAUD RATE (BPS) | ค่าคงที่ |
| 0 | 0 | 0 | 1200 | uart_bps_1200 |
| 0 | 0 | 1 | 2400 | uart_bps_2400 |
| 0 | 1 | 0 | 4800 | uart_bps_4800 |
| 0 | 1 | 1 | 9600 (ค่าเริ่มต้น) | uart_bps_9600 |
| 1 | 0 | 0 | 2463 | uart_bps_19200 |
| 1 | 0 | 1 | 38400 | uart_bps_38400 |
| 1 | 1 | 0 | 57600 | uart_bps_57600 |
| 1 | 1 | 1 | 115200 | uart_bps_115200 |
อัตราข้อมูลอากาศ: ยิ่งอัตราข้อมูลอากาศลดลงเท่าไหร่ระยะการส่งสัญญาณที่ยาวนานขึ้นประสิทธิภาพการต่อต้านการรบกวนที่ดีขึ้นและเวลาในการส่งสัญญาณที่ยาวนานขึ้นอัตราข้อมูลอากาศจะต้องรักษาเหมือนกันสำหรับทั้งสองฝ่ายสื่อสาร
| 2 | 1 | 0 | อัตราข้อมูลอากาศ (BPS) | ค่าคงที่ |
| 0 | 0 | 0 | 0.3K | air_data_rate_000_03 |
| 0 | 0 | 1 | 1.2K | air_data_rate_001_12 |
| 0 | 1 | 0 | 2.4K (ค่าเริ่มต้น) | air_data_rate_010_24 |
| 0 | 1 | 1 | 4.8K | air_data_rate_011_48 |
| 1 | 0 | 0 | 9.6K | air_data_rate_100_96 |
| 1 | 0 | 1 | 19.2K | air_data_rate_101_192 |
| 1 | 1 | 0 | 38.4K | air_data_rate_110_384 |
| 1 | 1 | 1 | 62.5K | air_data_rate_111_625 |
การตั้งค่าแพ็คเก็ตย่อย ####
นี่คือความยาวสูงสุดของแพ็คเก็ต
เมื่อข้อมูลมีขนาดเล็กกว่าความยาวแพ็คเก็ตย่อยเอาต์พุตอนุกรมของปลายรับจะเป็นเอาต์พุตอย่างต่อเนื่องอย่างต่อเนื่อง เมื่อข้อมูลมีขนาดใหญ่กว่าความยาวแพ็กเก็ตย่อยพอร์ตอนุกรมที่ได้รับจะส่งออกแพ็คเก็ตย่อย
| 7 | 6 | ขนาดแพ็คเก็ต | ค่าคงที่ |
| 0 | 0 | 240BYTES (ค่าเริ่มต้น) | SPS_240_00 |
| 0 | 1 | 128BYTES | SPS_128_01 |
| 1 | 0 | 64bytes | SPS_064_10 |
| 1 | 1 | 32bytes | SPS_032_11 |
เปิดใช้งานเสียงรบกวนรอบข้าง #### RSSI
คำสั่งนี้สามารถเปิด/ปิดใช้งานประเภทการจัดการของ RSSI เป็นสิ่งสำคัญในการจัดการการกำหนดค่าระยะไกลการให้ความสนใจไม่ใช่พารามิเตอร์ RSSI ในข้อความ
เมื่อเปิดใช้งานคำสั่ง C0 C1 C2 C3 สามารถส่งได้ในโหมดการส่งสัญญาณหรือโหมดการส่งสัญญาณ WOR เพื่ออ่านการลงทะเบียน ลงทะเบียน 0x00: เสียงรบกวนรอบข้าง RSSI ลงทะเบียน 0x01: RSSI เมื่อได้รับข้อมูลครั้งล่าสุด
| 5 | เปิดเสียงรบกวนรอบข้าง RSSI | ค่าคงที่ |
| 0 | เปิดใช้งาน | rssi_ambient_noise_enabled |
| 1 | ปิดการใช้งาน (ค่าเริ่มต้น) | rssi_ambient_noise_disabled |
#### กำลังส่งสัญญาณ
คุณสามารถเปลี่ยนชุดค่าคงที่นี้ได้โดยใช้ define เช่น So:
# define E22_22 // default value without set
# define E22_30คุณสามารถกำหนดค่าความถี่ของช่อง Olso ด้วยการกำหนดนี้:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915#### เปิดใช้งาน RSSI
เมื่อเปิดใช้งานโมดูลจะได้รับข้อมูลไร้สายและจะเป็นไปตามไบต์ความแข็งแรงของ RSSI หลังจากเอาต์พุตผ่านพอร์ตอนุกรม TXD
#### ประเภทการส่ง
โหมดการส่งสัญญาณ: ในโหมดการส่งสัญญาณคงที่สามไบต์แรกของเฟรมข้อมูลของผู้ใช้แต่ละคนสามารถใช้เป็นที่อยู่สูง/ต่ำและช่อง โมดูลจะเปลี่ยนที่อยู่และช่องสัญญาณเมื่อส่ง และมันจะเปลี่ยนกลับไปใช้การตั้งค่าดั้งเดิมหลังจากเสร็จสิ้นกระบวนการ
#### เปิดใช้งานฟังก์ชั่น Repeater
#### ตรวจสอบข้อมูลก่อนการส่ง
เมื่อเปิดใช้งานข้อมูลไร้สายจะได้รับการตรวจสอบก่อนที่จะถูกส่งซึ่งสามารถหลีกเลี่ยงการรบกวนในระดับหนึ่ง แต่อาจทำให้ข้อมูลล่าช้า
#### WOR
เครื่องส่งสัญญาณ WOR: ฟังก์ชั่นการรับและส่งโมดูลเปิดใช้งานและเพิ่มรหัสปลุกเมื่อส่งข้อมูล การรับจะเปิดอยู่
ตัวรับสัญญาณ WOR: โมดูลไม่สามารถส่งข้อมูลและทำงานในโหมดการตรวจสอบได้ ระยะเวลาการตรวจสอบมีดังนี้ (วัฏจักร WOR) ซึ่งสามารถประหยัดพลังงานได้มาก
#### วัฏจักร WOR
หาก WOR กำลังส่งสัญญาณ: หลังจากตัวรับสัญญาณ WOR ได้รับข้อมูลไร้สายและส่งออกผ่านพอร์ตอนุกรมมันจะรอ 1,000ms ก่อนที่จะป้อน WOR อีกครั้ง ผู้ใช้สามารถป้อนข้อมูลพอร์ตอนุกรมและส่งคืนผ่านสายไร้สายในช่วงเวลานี้ แต่ละไบต์อนุกรมจะได้รับการรีเฟรชเป็นเวลา 1,000 มม. ผู้ใช้จะต้องส่งไบต์แรกภายใน 1,000ms
ก่อนอื่นเราต้องแนะนำวิธีที่ง่าย แต่มีประโยชน์ในการตรวจสอบว่ามีบางอย่างอยู่ในบัฟเฟอร์รับ
int available ();มันเป็นเพียงการกลับมาจำนวนไบต์ที่คุณมีในสตรีมปัจจุบัน
โหมดการส่งสัญญาณปกติ/โปร่งใสใช้เพื่อส่งข้อความไปยังอุปกรณ์ทั้งหมดที่มีที่อยู่และช่องเดียวกัน
Lora E22 สถานการณ์การส่งสัญญาณเส้นเป็นช่องทาง
มีวิธีการส่ง/รับข้อความมากมายเราจะอธิบายรายละเอียด:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();วิธีแรกคือ SendMessage และใช้เพื่อส่งสตริงไปยังอุปกรณ์ใน โหมดปกติ
ResponseStatus rs = e22ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());อุปกรณ์อื่น ๆ ก็ทำบนห่วง
if (e22ttl.available() > 1 ){
ResponseContainer rs = e22ttl. receiveMessage ();
String message = rs. data ;` ` // First ever get the data
Serial. println (rs. status . getResponseDescription ());
Serial. println (message);
}หากคุณต้องการส่งสิ่งอำนวยความสะดวกที่ซับซ้อนคุณสามารถใช้วิธีนี้ได้
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);มันใช้ในการส่ง strucutre ตัวอย่างเช่น:
struct Messaggione {
char type[ 5 ];
char message[ 8 ];
bool mitico;
};
struct Messaggione messaggione = { " TEMP " , " Peple " , true };
ResponseStatus rs = e22ttl.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);หากคุณต้องการอ่านส่วนแรกของข้อความเพื่อจัดการประเภทของ strucutre มากขึ้นคุณสามารถใช้วิธีนี้ได้
ResponseContainer receiveInitialMessage ( const uint8_t size);ฉันสร้างมันขึ้นมาเพื่อรับสตริงที่มีประเภทหรืออื่น ๆ เพื่อระบุแรงบันดาลใจในการโหลด
struct Messaggione { // Partial strucutre without type
char message[ 8 ];
bool mitico;
};
char type[ 5 ]; // first part of structure
ResponseContainer rs = e22ttl.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 = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;ในทำนองเดียวกันฉันสร้างชุดของวิธีการที่จะใช้กับการส่งสัญญาณคงที่
คุณต้องเปลี่ยนเฉพาะวิธีการส่งเนื่องจากอุปกรณ์ปลายทางไม่ได้รับคำนำพร้อมที่อยู่และช่อง
ดังนั้นสำหรับข้อความสตริงที่คุณมี
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);และสำหรับโครงสร้างที่คุณมี
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size );นี่เป็นตัวอย่างง่ายๆ
ResponseStatus rs = e22ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e22ttl.sendFixedMessage(0, 0, 0x17, "Ciao");การส่งสัญญาณคงที่มีสถานการณ์มากขึ้น
Lora E22 สถานการณ์การส่งสัญญาณเส้นเป็นช่องทาง
หากคุณส่งไปยังอุปกรณ์เฉพาะ (สถานการณ์ที่สองคงที่) คุณต้องเพิ่ม Addl, Addh และ Chan เพื่อระบุโดยตรง
ResponseStatus rs = e22ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );หากคุณต้องการส่งข้อความไปยังอุปกรณ์ทั้งหมดในช่องที่ระบุคุณสามารถใช้วิธีนี้ได้
ResponseStatus rs = e22ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); หากคุณต้องการรับข้อความออกอากาศทั้งหมดในเครือข่ายคุณต้องตั้งค่า ADDH และ ADDL ด้วย BROADCAST_ADDRESS
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) 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 = e22ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close();### การกำหนดค่าไร้สาย
อุปกรณ์นี้รองรับการกำหนดค่าไร้สายด้วยคำสั่งก้านลำธาร แต่ดูเหมือนจะไม่ได้ผลฉันขอให้ eByte แต่ไม่ได้รับการตอบกลับ
ฉันใช้คำสั่งที่ส่งแพ็กเก็ตด้วยวิธีที่ถูกต้อง (ทดสอบด้วย analizer ตรรกะ) แต่ดูเหมือนว่าไม่ได้ผล
ก่อนที่คุณจะเปิดใช้งานสภาพแวดล้อมเสียงรบกวน RSSI มากกว่าที่คุณสามารถใช้คำสั่งได้เช่น:
Configuration configuration;
configuration.ADDL = 0x13 ;
configuration.ADDH = 0x13 ;
configuration.NETID = 0x00 ;
configuration.CHAN = 23 ;
configuration.SPED.uartBaudRate = UART_BPS_9600;
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
configuration.SPED.uartParity = MODE_00_8N1;
configuration.OPTION.subPacketSetting = SPS_240_00;
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower = POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;ตอนนี้คุณมีข้อมูลทั้งหมดในการทำงานของคุณ แต่ฉันคิดว่ามันสำคัญที่จะต้องแสดงตัวอย่างที่สมจริงเพื่อลดความเป็นไปได้ทั้งหมด
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: การตั้งค่าและการใช้งานพื้นฐาน
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: Library
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: การกำหนดค่า
อุปกรณ์ EBYTE LORA E22 สำหรับ Arduino, ESP32 หรือ ESP8266: การส่งสัญญาณคงที่และ RSSI
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: การประหยัดพลังงานและการส่งข้อมูลที่มีโครงสร้าง
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: โหมด Repeater และการตั้งค่าระยะไกล
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: Microcontroller และ Arduino Shield WOR WOR
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: Microcontroller และ WEMOS D1 Shield WOR WOR
อุปกรณ์ Ebyte Lora E22 สำหรับ Arduino, ESP32 หรือ ESP8266: Microcontroller และ ESP32 Dev V1 Shield