

Arduino Uno Shield
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
Wemos D1 Shield
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
ESP32 Shield
คุณสามารถสั่งซื้อ PCB ได้ที่นี่
วิดีโอคำแนะนำและแอสเซมบลีใน 6 ส่วนของคู่มือ
ฉันสร้างไลบรารีเพื่อจัดการอุปกรณ์ EBYTE E32 ของอุปกรณ์ LORA, อุปกรณ์ที่ทรงพลังมาก, อุปกรณ์ที่เรียบง่ายและราคาถูก
Lora E32-TTL-100
คุณสามารถค้นหาได้ที่นี่ ALIEXPRESS (อุปกรณ์ 3 กม.) ALIEXPRESS (อุปกรณ์ 8 กม.)
พวกเขาสามารถทำงานได้ระยะทาง 3000m ถึง 8000m และมีคุณสมบัติและพารามิเตอร์มากมาย
ดังนั้นฉันจึงสร้างไลบรารีนี้เพื่อทำให้การใช้งานง่ายขึ้น
โปรดดูบทความของฉันเพื่อรับสคีมาอัปเดต
คุณสามารถค้นหาห้องสมุดของฉันได้ที่นี่
เพื่อดาวน์โหลด
คลิกปุ่มดาวน์โหลดที่มุมขวาบนเปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด LORA_E32
ตรวจสอบว่าโฟลเดอร์ LORA_E32 มี LORA_E32.CPP และ LORA_E32.H
วางโฟลเดอร์ LORA_E32 ห้องสมุดของคุณ / ไลบรารี / โฟลเดอร์
คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นห้องสมุดแรกของคุณ
รีสตาร์ท IDE
E32 TTL 100
คุณสามารถซื้อได้ที่นี่ Aliexpress
| หมายเลขพิน | รายการพิน | ทิศทางพิน | แอปพลิเคชัน 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 | ออกมา | เอาท์พุท | เพื่อระบุสถานะการทำงานของโมดูลและตื่นขึ้น MCU ภายนอก ในระหว่างขั้นตอนของการเริ่มต้นการตรวจสอบตนเอง PIN จะส่งออกระดับต่ำ สามารถกำหนดค่าเป็นเอาต์พุต Open-Drain Orpush-Pull เอาต์พุต (อนุญาตให้ลอยได้) |
| 6 | VCC | แหล่งจ่ายไฟ 2.3V ~ 5.5V DC | |
| 7 | gnd | พื้น | อย่างที่คุณเห็นคุณสามารถตั้งค่าโหมดต่าง ๆ ผ่านหมุด M0 และ M1 |
| โหมด | M1 | M0 | คำอธิบาย |
|---|---|---|---|
| ปกติ | 0 | 0 | Uart และ Wireless Channel เป็นไปได้ดี |
| wke-up | 0 | 1 | เช่นเดียวกับปกติ แต่มีการเพิ่มรหัสคำนำลงในข้อมูลที่ส่งเพื่อปลุกตัวรับสัญญาณ |
| การประหยัดพลังงาน | 1 | 0 | UART ปิดการใช้งานและไร้สายอยู่ในโหมด WOR (Wake on Radio) ซึ่งหมายความว่าอุปกรณ์จะเปิดเมื่อมีข้อมูลที่จะได้รับ ไม่อนุญาตให้ส่งสัญญาณ |
| นอน | 1 | 1 | ใช้ในการตั้งค่าพารามิเตอร์ การส่งและรับปิดใช้งาน |
อย่างที่คุณเห็นมีหมุดบางตัวที่สามารถใช้งานได้อย่างต่อเนื่อง แต่ถ้าคุณเชื่อมต่อกับไลบรารีที่คุณได้รับจากประสิทธิภาพและคุณสามารถควบคุมโหมดทั้งหมดผ่านซอฟต์แวร์ได้ แต่เราจะอธิบายได้ดีขึ้นต่อไป
อย่างที่ฉันบอกไปแล้วว่ามันไม่สำคัญที่จะเชื่อมต่อ PIN ทั้งหมดกับเอาท์พุทของไมโครคอนโทรลเลอร์คุณสามารถใส่หมุด M0 และ M1 ให้สูงหรือต่ำเพื่อรับการกำหนดค่าที่ต้องการและ หากคุณไม่เชื่อมต่อ AUX ห้องสมุดตั้งค่าความล่าช้าที่สมเหตุสมผลเพื่อให้แน่ใจว่าการดำเนินการเสร็จสมบูรณ์
เมื่อส่งข้อมูลสามารถใช้เพื่อปลุก MCU ภายนอกและส่งคืนการถ่ายโอนข้อมูลที่สูง
lora e32 aux pin ในการส่งสัญญาณ
เมื่อได้รับ aux จะลดลงและกลับสูงเมื่อบัฟเฟอร์ว่างเปล่า
lora e32 aux pin บนแผนกต้อนรับ
นอกจากนี้ยังใช้สำหรับการตรวจสอบตนเองเพื่อกู้คืนการทำงานปกติ (ในโหมด Power-On และ Sleep/Program)
lora e32 aux pin ในการตรวจสอบตนเอง
SCHEMA การเชื่อมต่อ ESP8266 นั้นง่ายกว่าเพราะมันทำงานได้ที่แรงดันไฟฟ้าเดียวกันของการสื่อสารเชิงตรรกะ (3.3V)
Lora E32 TTL 100 WEMOS D1 เชื่อมต่ออย่างเต็มที่
สิ่งสำคัญคือการเพิ่มตัวต้านทานแบบดึงขึ้น (4,7kohm) เพื่อให้ได้ความมั่นคงที่ดี
| M0 | D7 |
|---|---|
| M1 | D6 |
| RX | PIN D2 (pullup 4,7kΩ) |
| TX | PIN D3 (pullup 4,7kΩ) |
| ออกมา | D5 (อินพุต) |
| 3.3V | gnd |
แรงดันไฟฟ้าที่ทำงานของ Arduino คือ 5V ดังนั้นเราจำเป็นต้องเพิ่มตัวแบ่งแรงดันไฟฟ้าใน Rx Pin M0 และ M1 ของโมดูล LORA เพื่อป้องกันความเสียหายคุณสามารถรับข้อมูลเพิ่มเติมได้ที่นี่ Divider แรงดันไฟฟ้า: เครื่องคิดเลขและแอปพลิเคชัน
คุณสามารถใช้ตัวต้านทาน 2KOHM ไปยัง GND และ 1KOHM จากสัญญาณได้มากกว่าการรวมกันบน RX
Lora E32 TTL 100 Arduino เชื่อมต่ออย่างเต็มที่
| M0 | 7 (ตัวแบ่งแรงดันไฟฟ้า) |
|---|---|
| M1 | 6 (ตัวแบ่งแรงดันไฟฟ้า) |
| RX | PIN D2 (Pullup 4,7KΩ & Divider Voltage) |
| TX | PIN D3 (pullup 4,7kΩ) |
| ออกมา | 5 (อินพุต) |
| VCC | 3.3V |
| gnd | gnd |
ฉันสร้างชุดของตัวสร้างค่อนข้างมากเพราะเราสามารถมีตัวเลือกและสถานการณ์เพิ่มเติมในการจัดการ
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);ชุดแรกของตัวสร้างถูกสร้างขึ้นเพื่อมอบหมายการจัดการของอนุกรมและพินอื่น ๆ ไปยังห้องสมุด
rxPin และ txPin เป็น PIN ในการเชื่อมต่อกับ UART และเป็น ข้อบังคับ
auxPin เป็นพินที่ตรวจสอบการดำเนินการส่งและสถานะการรับ (เราจะอธิบายได้ดีขึ้นต่อไป) PIN นั้น ไม่จำเป็น ถ้าคุณไม่ได้ตั้งค่าฉันใช้ความล่าช้าเพื่อให้การดำเนินการเสร็จสมบูรณ์ (พร้อมเวลาแฝง)
m0pin และ m1Pin เป็นพินเพื่อเปลี่ยนโหมดการทำงาน (ดูตารางบน) ฉันคิดว่า หมุดนี้ใน "การผลิต" จะเชื่อมต่อโดยตรงหรือต่ำ แต่สำหรับการทดสอบพวกเขาจะได้รับการจัดการโดยห้องสมุด
bpsRate เป็น boudrate ของ softwareserial โดยปกติคือ 9600 (อัตราการรับส่งข้อมูลเพียงอย่างเดียวในโหมดโปรแกรม/สลีป)
ตัวอย่างง่ายๆคือ
# include " LoRa_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TXเราสามารถใช้ซอฟต์แวร์โดยตรงกับตัวสร้างอื่นได้โดยตรง
LoRa_E32 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);ตัวอย่างบนของตัวสร้างนี้สามารถทำได้เช่นนั้น
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);ชุดสุดท้ายของตัวสร้างคืออนุญาตให้ใช้ hardwareserial แทน softwareserial
LoRa_E32 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);คำสั่งเริ่มต้นใช้เพื่อเริ่มต้นอนุกรมและพินในโหมดอินพุตและเอาต์พุต
void begin ();ในการดำเนินการคือ
// Startup all pins and UART
e32ttl100.begin();มีชุดของวิธีการจัดการการกำหนดค่าและรับข้อมูลของอุปกรณ์
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);
ResponseStatus resetModule ();เพื่อลดความซับซ้อนของการจัดการการตอบสนองฉันสร้างชุดคอนเทนเนอร์สำหรับฉันอย่างมีประโยชน์ในการจัดการข้อผิดพลาดและส่งคืนข้อมูลทั่วไป
นี่คือคอนเทนเนอร์สถานะและมี 2 จุดเข้าง่าย ๆ ด้วยสิ่งนี้คุณสามารถรับรหัสสถานะและคำอธิบายของรหัสสถานะ
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Successรหัสคือ
E32_SUCCESS = 1 ,
ERR_E32_UNKNOWN,
ERR_E32_NOT_SUPPORT,
ERR_E32_NOT_IMPLEMENT,
ERR_E32_NOT_INITIAL,
ERR_E32_INVALID_PARAM,
ERR_E32_DATA_SIZE_NOT_MATCH,
ERR_E32_BUF_TOO_SMALL,
ERR_E32_TIMEOUT,
ERR_E32_HARDWARE,
ERR_E32_HEAD_NOT_RECOGNIZEDคอนเทนเนอร์นี้ถูกสร้างขึ้นเพื่อจัดการการตอบสนองของสตริงและมี 2 จุดเข้า
data ที่มีสตริงที่ส่งคืนจากข้อความและ status เป็นอินสแตนซ์ของ RepsonseStatus
ResponseContainer rs = e32ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);นี่คือคอนเทนเนอร์ที่ซับซ้อนมากขึ้นฉันใช้สิ่งนี้เพื่อจัดการโครงสร้างมันมีจุดเข้าร่วมของ Responsecontainer เท่ากัน แต่ข้อมูลเป็นตัวชี้โมฆะในการจัดการโครงสร้างที่ซับซ้อน
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);วิธีแรกคือ getConfiguration คุณสามารถใช้เพื่อดึงข้อมูลทั้งหมดที่เก็บไว้ในอุปกรณ์
ResponseStructContainer getConfiguration ();นี่เป็นตัวอย่างการใช้งาน
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);
Serial.println(configuration.SPED.getUARTBaudRate());โครงสร้างของการกำหนดค่ามีข้อมูลทั้งหมดของการตั้งค่าและฉันเพิ่มชุดของฟังก์ชั่นเพื่อรับคำอธิบายทั้งหมดของข้อมูลเดียว
configuration.ADDL = 0x0 ; // First part of address
configuration.ADDH = 0x1 ; // Second part of address
configuration.CHAN = 0x19 ; // Channel
configuration.OPTION.fec = FEC_0_OFF; // Forward error correction switch
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission mode
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management
configuration.OPTION.transmissionPower = POWER_17; // dBm transmission power
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250; // Wait time for wake up
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48; // Air data rate
configuration.SPED.uartBaudRate = UART_BPS_115200; // Communication baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bitคุณมีฟังก์ชั่นที่เทียบเท่าเพื่อรับคำอธิบายทั้งหมด:
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.getUARTBaudRate());
Serial.print(F( " SpeedAirDataRate : " )); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print( " -> " ); Serial.println(configuration.SPED.getAirDataRate());
Serial.print(F( " OptionTrans : " )); Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F( " OptionPullup : " )); Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F( " OptionWakeup : " )); Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F( " OptionFEC : " )); Serial.print(configuration.OPTION.fec, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F( " OptionPower : " )); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getTransmissionPowerDescription());ในลักษณะเดียวกัน 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 = 0x0 ;
configuration.ADDH = 0x1 ;
configuration.CHAN = 0x19 ;
configuration.OPTION.fec = FEC_0_OFF;
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;
configuration.OPTION.transmissionPower = POWER_17;
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250;
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48;
configuration.SPED.uartBaudRate = UART_BPS_115200;
configuration.SPED.uartParity = MODE_00_8N1;
// 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);พารามิเตอร์ทั้งหมดได้รับการจัดการเป็นค่าคงที่:
| การติดอันดับ | ไบต์ที่อยู่สูงของโมดูล (ค่าเริ่มต้น 00H) | 00H-FFH |
|---|---|---|
| addl | ไบต์ที่อยู่ต่ำของโมดูล (ค่าเริ่มต้น 00H) | 00H-FFH |
| ที่เร่งความเร็ว | ข้อมูลเกี่ยวกับอัตราความเท่าเทียมกันของอัตราข้อมูลและอัตราข้อมูลอากาศ | ชาน |
| ช่องทางการสื่อสาร (410M + Chan*1M), ค่าเริ่มต้น 17H (433MHz), ใช้ได้เฉพาะสำหรับอุปกรณ์ 433MHz เท่านั้น | 00H-1FH |
|---|
ตัวเลือก
ประเภทของการส่งการตั้งค่าแบบดึงขึ้นเวลาปลุก FEC กำลังส่งกำลัง
UART PARITY BIT: โหมด _UART อาจแตกต่างกันระหว่างฝ่ายสื่อสาร
| 7 | 6 | UART PARITY BIT | ค่า const | - | 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 ไม่มีส่วนเกี่ยวข้องกับพารามิเตอร์การส่งไร้สายและจะไม่ส่งผลกระทบต่อคุณสมบัติการส่ง / รับแบบไร้สาย
| 5 | 43 | TTL UART BAUD RATE (BPS) | ค่าคงที่ |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600 (ค่าเริ่มต้น) |
| 1 | 0 | 0 | 2463 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 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 | 19.2K (เหมือนกับ 101) | air_data_rate_110_192 |
| 1 | 1 | 1 | 19.2K (เหมือนกับ 101) | air_data_rate_111_192 |
โหมดการส่งสัญญาณ: ในโหมดการส่งสัญญาณคงที่สามไบต์แรกของเฟรมข้อมูลของผู้ใช้แต่ละคนสามารถใช้เป็นที่อยู่สูง/ต่ำและช่อง โมดูลจะเปลี่ยนที่อยู่และช่องสัญญาณเมื่อส่ง และมันจะเปลี่ยนกลับไปใช้การตั้งค่าดั้งเดิมหลังจากเสร็จสิ้นกระบวนการ
| 7 | การส่งสัญญาณคงที่บิต (คล้ายกับ modbus) | ค่าคงที่ |
|---|---|---|
| 0 | โหมดการส่งข้อมูลโปร่งใส | ft_transparent_transmission |
| 1 | โหมดการส่งสัญญาณคงที่ | ft_fixed_transmission |
โหมดไดรฟ์ IO: บิตนี้ใช้กับตัวต้านทานการดึงภายในโมดูล นอกจากนี้ยังเพิ่มความสามารถในการปรับระดับของระดับในกรณีที่เปิดท่อระบายน้ำ แต่ในบางกรณีอาจต้องมีการดึงภายนอก
ตัวต้านทาน
| 6 | โหมดไดรฟ์ IO (ค่าเริ่มต้น 1) | ค่าคงที่ |
|---|---|---|
| 1 | TXD และ AUX push-pull outputs, rxd pull-up อินพุต | io_d_mode_push_pulls_pull_ups |
| 0 | TXD、 AUX Open-Collector Outputs, RXD Open-Collector Inputs | IO_D_MODE_OPEN_COLLECTOR |
เวลาปลุกแบบไร้สาย: โมดูลการส่งและรับทำงานในโหมด 0 ซึ่งเวลาหน่วงเวลาไม่ถูกต้อง & สามารถเป็นค่าโดยพลการเครื่องส่งสัญญาณทำงานในโหมด 1 สามารถส่งรหัสคำนำของเวลาที่สอดคล้องกันอย่างต่อเนื่องเมื่อตัวรับสัญญาณทำงานในโหมด 2 เวลาหมายถึงช่วงเวลาการตรวจสอบ เฉพาะข้อมูลจากเครื่องส่งสัญญาณที่ใช้งานได้ในโหมด 1 เท่านั้น
ได้รับ.
| 5 | 4 | 3 | เวลาตื่นไร้สาย | ค่าคงที่ |
|---|---|---|---|---|
| 0 | 0 | 0 | 250ms (ค่าเริ่มต้น) | wake_up_250 |
| 0 | 0 | 1 | 500ms | wake_up_500 |
| 0 | 1 | 0 | 750ms | wake_up_750 |
| 0 | 1 | 1 | 1,000ms | wake_up_1000 |
| 1 | 0 | 0 | 1250ms | wake_up_1250 |
| 1 | 0 | 1 | 1500ms | wake_up_1500 |
| 1 | 1 | 0 | 1750ms | wake_up_1750 |
| 1 | 1 | 1 | 2000ms | wake_up_2000 |
FEC: หลังจากปิด FEC อัตราการส่งข้อมูลจริงจะเพิ่มขึ้นในขณะที่ความสามารถในการต่อต้านการรบกวนลดลง นอกจากนี้ระยะการส่งสัญญาณยังค่อนข้างสั้นฝ่ายสื่อสารทั้งสองจะต้องอยู่ในหน้าเดียวกันเกี่ยวกับเทิร์นออนออนหรือปิดปิด FEC
| 2 | สวิตช์ FEC | ค่าคงที่ |
|---|---|---|
| 0 | ปิด FEC | fec_0_off |
| 1 | เปิด FEC (ค่าเริ่มต้น) | fec_1_on |
กำลังการส่งสัญญาณ
คุณสามารถเปลี่ยนชุดค่าคงที่นี้ได้โดยใช้ define เช่น So:
# define E32_TTL_100 // default value without set ใช้ได้กับ E32-TTL-100, E32-TTL-100S1, E32-T100S2
พลังงานภายนอกจะต้องตรวจสอบให้แน่ใจว่าความสามารถของเอาต์พุตปัจจุบันมากกว่า 250mA และตรวจสอบให้แน่ใจว่าระลอกคลื่นไฟฟ้าภายใน 100mV
ไม่แนะนำให้ส่งพลังงานต่ำเนื่องจากแหล่งจ่ายไฟต่ำ
ประสิทธิภาพ.
# define E32_TTL_100 // default value without set| 1 | 0 | กำลังการส่งสัญญาณ (การประมาณ) | ค่าคงที่ |
|---|---|---|---|
| 0 | 0 | 20DBM (ค่าเริ่มต้น) | Power_20 |
| 0 | 1 | 17dBM | Power_17 |
| 1 | 0 | 14dBm | Power_14 |
| 1 | 1 | 10dbm | Power_10 |
ใช้ได้กับ E32-TTL-500 。
พลังงานภายนอกจะต้องตรวจสอบให้แน่ใจว่าความสามารถของเอาต์พุตปัจจุบันมากกว่า 700mA และตรวจสอบให้แน่ใจว่าระลอกคลื่นไฟฟ้าภายใน 100mV
ไม่แนะนำให้ส่งพลังงานต่ำเนื่องจากประสิทธิภาพของแหล่งจ่ายไฟต่ำ
# define E32_TTL_500| 1 | 0 | กำลังการส่งสัญญาณ (การประมาณ) | ค่าคงที่ |
|---|---|---|---|
| 0 | 0 | 27dBm (ค่าเริ่มต้น) | Power_27 |
| 0 | 1 | 24dBM | Power_24 |
| 1 | 0 | 21dBm | Power_21 |
| 1 | 1 | 18dBM | Power_18 |
ใช้ได้กับ E32-TTL-1W, E32 (433T30S), E32 (868T30S), E32 (915T30S)
พลังงานภายนอกจะต้องตรวจสอบให้แน่ใจว่าความสามารถของเอาต์พุตปัจจุบันมากกว่า 1a และตรวจสอบให้แน่ใจว่าแหล่งจ่ายไฟระลอกคลื่นภายใน 100mV
ไม่แนะนำให้ส่งพลังงานต่ำเนื่องจากแหล่งจ่ายไฟต่ำ
ประสิทธิภาพ.
# define E32_TTL_1W| 1 | 0 | กำลังการส่งสัญญาณ (การประมาณ) | ค่าคงที่ |
|---|---|---|---|
| 0 | 0 | 30DBM (ค่าเริ่มต้น) | Power_30 |
| 0 | 1 | 27dBm | Power_27 |
| 1 | 0 | 24dBM | Power_24 |
| 1 | 1 | 21dBm | Power_21 |
คุณสามารถกำหนดค่าความถี่ของช่อง Olso ด้วยการกำหนดนี้:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915ก่อนอื่นเราต้องแนะนำวิธีที่ง่าย แต่มีประโยชน์ในการตรวจสอบว่ามีบางอย่างอยู่ในบัฟเฟอร์รับ
int available ();มันเป็นเพียงการกลับมาจำนวนไบต์ที่คุณมีในสตรีมปัจจุบัน
โหมดการส่งสัญญาณปกติ/โปร่งใสใช้เพื่อส่งข้อความไปยังอุปกรณ์ทั้งหมดที่มีที่อยู่และช่องเดียวกัน
Lora E32 สถานการณ์การส่งสัญญาณเส้นเป็นช่องทาง
มีวิธีการส่ง/รับข้อความมากมายเราจะอธิบายรายละเอียด:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();วิธีแรกคือ SendMessage และใช้เพื่อส่งสตริงไปยังอุปกรณ์ใน โหมดปกติ
ResponseStatus rs = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());อุปกรณ์อื่น ๆ ก็ทำบนห่วง
if (e32ttl.available() > 1 ){
ResponseContainer rs = e32ttl. 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 = e32ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());และอีกด้านหนึ่งคุณสามารถรับข้อความได้
ResponseStructContainer rsc = e32ttl.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 = e32ttl.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 = e32ttl.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 = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");การส่งสัญญาณคงที่มีสถานการณ์มากขึ้น
Lora E32 สถานการณ์การส่งสัญญาณเส้นเป็นช่องทาง
หากคุณส่งไปยังอุปกรณ์เฉพาะ (สถานการณ์ที่สองคงที่) คุณต้องเพิ่ม Addl, Addh และ Chan เพื่อระบุโดยตรง
ResponseStatus rs = e32ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );หากคุณต้องการส่งข้อความไปยังอุปกรณ์ทั้งหมดในช่องที่ระบุคุณสามารถใช้วิธีนี้ได้
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); หากคุณต้องการรับข้อความออกอากาศทั้งหมดในเครือข่ายคุณต้องตั้งค่า ADDH และ ADDL ด้วย BROADCAST_ADDRESS
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 = 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);