ห้องสมุด Arduino Lora-RF ที่ใช้สำหรับการส่งและรับข้อมูลโดยใช้โมดูล LORA ด้วยซีรีส์ Semtech SX126X, SX127X Series หรือ LLCC68 ห้องสมุดทำงานโดยการเชื่อมต่อพอร์ต SPI และหมุด I/O บางตัว รองรับการกำหนดค่าความถี่พารามิเตอร์การมอดูเลต, ส่งกำลังส่ง, รับอัตราขยายและพารามิเตอร์ RF อื่น ๆ ทั้งในการปรับทั้ง LORA และ FSK ยังรองรับการจัดการการส่งและรับโดยใช้สัญญาณขัดจังหวะ
readme นี้เขียนขึ้นสำหรับคู่มือเริ่มต้นอย่างรวดเร็ว เยี่ยมชมลิงค์นี้สำหรับเอกสารที่สมบูรณ์
ในทางทฤษฎีโมดูล LORA ทั้งหมดโดยใช้ SX126X Series (SX1261, SX1262, SX1268), ซีรีย์ SX127X (SX1272, SX1276, SX1277, SX1278, SX1279) คณะกรรมการพัฒนา Arduino Lora ซึ่งเชื่อมต่อกับ SPI กับโมดูล LORA ยังเข้ากันได้กับทฤษฎี
โมดูล LORA บางตัวที่ทดสอบแล้วและยืนยันได้แล้วคือ:
โปรดทราบว่าโมดูล LORA ใช้ 3.3V สำหรับแหล่งจ่ายไฟและพอร์ต I/O ฉันต้องใช้ความระมัดระวังในการเชื่อมต่อโมดูล 5V Arduino กับ Lora
Sketch -> Include Library -> Manage Libraries...LoRaRF ลงในช่องค้นหาLoRaRF โดย Chandra WijayaInstall เพื่อติดตั้งไลบรารี เปิดเทอร์มินัล, git bash หรือพรอมต์คำสั่งในโฟลเดอร์ Arduino Library จากนั้นเรียกใช้คำสั่งต่อไปนี้ โฟลเดอร์ไลบรารีเริ่มต้นสำหรับ Windows คือ C:Users{username}DocumentsArduino และสำหรับ Linux คือ ~/Documents/Arduino/libraries/
git clone https://github.com/chandrawi/LoRaRF-Arduino.git ในการทำงานกับไลบรารีก่อนอื่นคุณต้องรวมส่วนหัว SX126x หรือส่วนหัว SX127x ขึ้นอยู่กับโมดูล LORA ที่คุณใช้ สำหรับ LLCC68 มีส่วนหัว SX126X จากนั้นเริ่มต้นคลาสในส่วนหัวโดยการสร้างวัตถุ
// for SX126x series or LLCC68
# include < SX126x.h >
SX126x LoRa;
// for SX127x series
# include < SX127x.h >
SX127x LoRa; ก่อนที่จะเรียกใช้วิธีการกำหนดค่าใด ๆ ให้ทำการส่งหรือรับการดำเนินการคุณต้องเรียกวิธีการ begin() คุณสามารถเรียกใช้วิธีการ begin() ภายในฟังก์ชั่น Arduino setup()
void setup () {
LoRa. begin ();
// configuration code goes here
}
void loop () {
// transmit and receive operation goes here
} พินพลังงานหมุด SPI และพิน RESET จะต้องเชื่อมต่อระหว่างโมดูล Arduino และ Lora สำหรับซีรี่ส์ SX126X และ LLCC68 ต้องเชื่อมต่อกับ PIN BUSY หากคุณต้องการใช้การดำเนินการขัดจังหวะคุณสามารถเชื่อมต่อ DIO0 สำหรับซีรี่ส์ SX127X และหนึ่งใน DIO1 , DIO2 หรือ DIO3 PIN สำหรับซีรี่ส์ SX126X คุณควรเชื่อมต่อหมุด TXEN และ RXEN หากโมดูล LORA ของคุณมีพินเหล่านั้น
หมุด Arduino เริ่มต้นที่ใช้สำหรับการเชื่อมต่อกับ SX126X และ SX127X มีดังนี้
| Semtech SX126X | Semtech SX127X | Arduino |
|---|---|---|
| VCC | VCC | 3.3V |
| gnd | gnd | gnd |
| SCK | SCK | SCK |
| มิโซะ | มิโซะ | มิโซะ |
| Mosi | Mosi | Mosi |
| NSS | NSS | 10 |
| รีเซ็ต | รีเซ็ต | 9 |
| ยุ่ง | 4 | |
| DiO1 | DiO0 | -1 (ไม่ได้ใช้) |
| txen | txen | -1 (ไม่ได้ใช้) |
| rxen | rxen | -1 (ไม่ได้ใช้) |
ในการเปลี่ยนพอร์ต SPI เริ่มต้นของ Arduino หรือวิธีการเรียกความถี่ SPI setSPI() ก่อนที่จะ begin() เมธอด
LoRa.setSPI(SPI2, 16000000 );
LoRa.begin(); ในการกำหนดค่าพิน I/O (NSS, รีเซ็ต, ไม่ว่าง, IRQ, TXEN, RXEN PIN) setPins() ก่อน begin() วิธีการ
// set NSS->10, RESET->9, BUSY->4, DIO1->2, TXEN->8, RXEN->7 for SX126x series
LoRa.setPins( 10 , 9 , 2 , 4 , 8 , 7 );
// set NSS->10, RESET->9, DIO0->2, TXEN->8, RXEN->7 for SX127x series
LoRa.setPins( 10 , 9 , 2 , 8 , 7 );
LoRa.begin();ก่อนส่งหรือรับการดำเนินการคุณสามารถกำหนดค่ากำลังส่งและรับอัตราขยายหรือความถี่ที่ตรงกันพารามิเตอร์การมอดูเลตพารามิเตอร์แพ็คเก็ตและการซิงโครไนซ์คำกับอุปกรณ์ LORA อื่น ๆ ที่คุณต้องการสื่อสาร
// set transmit power to +22 dBm for SX1262
LoRa.setTxPower( 22 , SX126X_TX_POWER_SX1262);
// set transmit power to +20 dBm for SX127x series using boost pin
LoRa.setTxPower( 20 , SX127X_TX_POWER_PA_BOOST); // set receive gain to power saving
LoRa.setRxGain(LORA_RX_GAIN_POWER_SAVING);
// set receive gain to boosted and AGC on for SX127x series
LoRa.setRxGain(LORA_RX_GAIN_BOOSTED, true ); // Set frequency to 915 Mhz
LoRa.setFrequency( 915000000 ); // set spreading factor 8, bandwidth 125 kHz, coding rate 4/5, and low data rate optimization off
LoRa.setLoRaModulation( 8 , 125000 , 5 , false ); // set explicit header mode, preamble length 12, payload length 15, CRC on and no invert IQ operation
LoRa.setLoRaPacket(LORA_HEADER_EXPLICIT, 12 , 15 , true , false ); // Set syncronize word for public network (0x3444)
LoRa.setSyncWord( 0x3444 ); การส่งผ่านเริ่มต้นด้วยวิธีการเรียก beginPacket() วิธีการต่อไปนี้โดยวิธี write() เพื่อเขียนแพ็คเกจเพื่อให้ได้วิธีการแทนและจบลงด้วยวิธีการโทร endPacket() ตัวอย่างเช่นเพื่อส่ง "Helora World!" ข้อความและตัวนับเพิ่มคุณสามารถใช้รหัสต่อไปนี้
// message and counter to transmit
char message[] = " HeLoRa World! " ;
uint8_t counter = 0 ;
LoRa.beginPacket();
LoRa.write(message, sizeof (message)); // write multiple bytes
LoRa.write(counter++); // write single byte
LoRa.endPacket();
LoRa.wait();สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการดำเนินการส่งข้อมูลกรุณาเยี่ยมชมลิงค์นี้
รับการดำเนินการเริ่มต้นด้วยวิธี request() วิธีการต่อไปนี้โดยวิธี read() เพื่ออ่านแพ็คเกจที่ได้รับ สามารถใช้ available() วิธีการที่จะได้รับความยาวของแพ็คเกจที่เหลือ ตัวอย่างเช่นการรับข้อความและตัวนับในไบต์ล่าสุดคุณสามารถใช้รหัสต่อไปนี้
LoRa.request();
LoRa.wait();
// get message and counter in last byte
const uint8_t length = LoRa.available() - 1 ;
char message[length];
uint8_t i= 0 ;
while (LoRa.available() > 1 ){
message[i++] = LoRa. read (); // read multiple bytes
}
uint8_t counter = LoRa.read(); // read single byteสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการรับการดำเนินการกรุณาเยี่ยมชมลิงค์นี้
ดูตัวอย่างสำหรับการใช้งาน SX126X, SX127X และการใช้งานเครือข่ายอย่างง่าย
Chandra Wijaya Sentosa <[email protected]>