ภาพรวม
- SX1276 เป็นโมเด็ม LORA ที่สามารถส่งและรับข้อมูลในระยะทางไกล (ห่างออกไปหนึ่งกิโลเมตร) ในวิธีที่มีประสิทธิภาพ
- repo นี้คือการช่วยให้ผู้เริ่มต้นเรียนรู้วิธีการใช้งานชิป SX1276 (ทำการส่งพื้นฐาน/TX และการรับ/RX)
- repo นี้เกือบจะเขียนใหม่ของ Martynwheeler/u-lora ด้วยคำอธิบายประกอบที่กว้างขวาง
- รหัสเข้ากันได้กับ jgromes/radiolib (ห้องสมุด Arduino Lora ยอดนิยม)
จะหา SX1276 ได้ที่ไหน
- บอร์ดพัฒนา LORA ESP32 จำนวนมาก (Heltec Wifi Lora 32 V2, TTGO T-Beam V1.1) ใช้ SX1276
- Adafruit สร้างการฝ่าวงล้อมแบบสแตนด์อโลนโดยใช้ SX1276: Adafruit RFM95W
- ไม่ว่าจะด้วยวิธีใด MCU พูดคุยกับชิป SX1276 ผ่านอินเตอร์เฟส SPI
repo สำหรับการใช้งานการผลิต
- Mac Link Layer ถูกนำไปใช้ใน repo อื่น
- ที่อยู่
- การออกอากาศ
- ขอรับทราบ
- การกระโดดความถี่จะถูกนำไปใช้กับแพ็คเก็ตขนาดใหญ่ tranmit เนื่องจากเราปฏิบัติตาม FCC 15.247: อย่าติดขัดหนึ่งความถี่
ดูสายไฟ
สายไฟ RFM95W พร้อม Pico
- เราตัดสินใจว่า GPIO ใดที่เราต้องการใช้
# RFM95W Pico GPIO
LoRa_MISO_Pin = 16
LoRa_CS_Pin = 17
LoRa_SCK_Pin = 18
LoRa_MOSI_Pin = 19
LoRa_G0_Pin = 20 # DIO0_Pin
LoRa_EN_Pin = 21
LoRa_RST_Pin = 22
SPI_CH = 0

Heltec Wifi Lora 32 V2
- กำหนดไว้ล่วงหน้า (ดู pinout)
LoRa_MISO_Pin = 19
LoRa_MOSI_Pin = 27
LoRa_SCK_Pin = 5
LoRa_CS_Pin = 18
LoRa_RST_Pin = 14
LoRa_DIO0_Pin = 26
LoRa_DIO1_Pin = 35
LoRa_DIO2_Pin = 34
SPI_CH = 1

ttgo t-beam v1.1
- กำหนดไว้ล่วงหน้า (ดู pinout)
LoRa_MISO_Pin = 19
LoRa_MOSI_Pin = 27
LoRa_SCK_Pin = 5
LoRa_CS_Pin = 18
LoRa_RST_Pin = 23
LoRa_DIO0_Pin = 26

วิธีใช้ SX1276
- เปิดใช้งาน Adafruit RFM95W ก่อนการใช้งาน (ไม่เปิดใช้งาน PIN บนกระดานพัฒนา ESP32 อื่น ๆ เพื่อให้สามารถเปิดใช้งานได้เสมอ)
- กำหนดค่าการสื่อสาร SPI เพื่อควบคุมโมเด็ม LORA
- เลือกโหมด LORA แทนโหมด FSK/OOK
- ตั้งค่าพารามิเตอร์: แบนด์วิดท์ (BW), อัตราการเข้ารหัส (CR), โหมดส่วนหัว, ปัจจัยการแพร่กระจาย (SF), syncword, ความยาวคำนำ, ความถี่, เครื่องขยายเสียง
- การติดตามไดอะแกรมน้ำตกเป็นสิ่งที่สัญญาณจากโมเด็ม Lora ดูเหมือนฉันอาจให้บทช่วยสอนเกี่ยวกับพารามิเตอร์ในอนาคต
- ตั้งค่าบริการรูทีนอินเตอร์รัปต์ (IRS) เพื่ออ่านข้อความขาเข้าและตรวจสอบสถานะการทำงานของโมเด็ม
- เมื่อได้รับข้อความในระหว่าง RX IRS จะถูกทริกเกอร์และเราอ่านบัฟเฟอร์ข้อมูล FIFO เราเขียนบัฟเฟอร์ข้อมูล FIFO ก่อนที่ข้อความจะถูกส่งและจากนั้น IRS จะถูกทริกเกอร์ระหว่าง TX
โครงสร้างแพ็คเก็ต
- แผนภาพน้ำตกที่แสดงการแสดงทางกายภาพของสัญญาณมอดูเลต

- ส่วนหัว (มีอยู่ในโหมดที่ชัดเจน): ความยาวของน้ำหนักบรรทุกอัตราการเข้ารหัสของเพย์โหลด
- อัตราการเข้ารหัสของส่วนหัวที่ชัดเจนคือ 4/8 และ Payload อาจแตกต่างกัน (TX บอก RX ว่า CR TX ใช้)
- SF สำหรับแพ็คเก็ตทั้งหมด

4.1.2. อินเทอร์เฟซดิจิตอล LORA ®
- โมเด็ม LORA ®ประกอบด้วยอินเทอร์เฟซดิจิตอลสามประเภท
- ลงทะเบียนการกำหนดค่าแบบคงที่
- การลงทะเบียนสถานะ
- บัฟเฟอร์ข้อมูล FIFO ที่ผู้ใช้กำหนด 256 ไบต์
- เราควบคุมโมเด็มผ่านอินเทอร์เฟซดิจิตอลนี้
- ในทางปฏิบัติเราอ่าน/เขียนการลงทะเบียนของโมเด็มผ่านโปรโตคอล SPI เพื่อให้เราสามารถกำหนดค่าพารามิเตอร์ (ลงทะเบียนการกำหนดค่าแบบคงที่) สถานะการสืบค้นส่งหรือรับข้อมูล (บัฟเฟอร์ลงทะเบียน)
บัฟเฟอร์ FIFO

- เพื่อที่จะเขียนข้อมูลแพ็คเก็ตลงในผู้ใช้ FIFO ควร:
- ตั้งค่าเนื้อหาของ Register RegFifoaddrptr เป็น *regFifoTxBaseaddr (ลงทะเบียนเนื้อหาของ RegFifoTxBaseaddr)
- เขียน *regpayloadlength bytes ไปยัง FIFO (regfifo)
- เพื่ออ่านข้อมูลแพ็คเก็ตจากผู้ใช้ FIFO ควร:
- ตั้งค่า regfifoaddrptr เป็น *regfiforxcurrentaddr
- อ่าน regrxnbbytes จาก regfifo
ศัพท์แสงในแผ่นข้อมูล
- RF: ความถี่วิทยุ
- RFI: อินพุต RF
- RFO: เอาต์พุต RF
- {ความถี่สูง: {Band 1: ~ 915MHz}, lf: {Band 2: ~ 433MHz, Band 3: ~ 150MHz}}
- PA: แอมพลิฟายเออร์พลังงาน
- แอมพลิฟายเออร์สามตัว: RFO_LF, RFO_HF, PA_BOOST
- PA_HP: พลังงานสูง
- PA_HF และ PA_LF เป็นเครื่องขยายเสียงที่มีประสิทธิภาพสูง
- AFC: การแก้ไขความถี่อัตโนมัติ
- RFOP: พลังงานเอาต์พุต RF
ลำดับการส่งข้อมูล (แผ่นข้อมูลรูปที่ 9)
- เปลี่ยนเป็นโหมดสแตนด์บายเพื่อให้โมเด็มเริ่มต้นทุกอย่าง
- เริ่ม TX Loop
- เตรียมน้ำหนักบรรทุกถึง TX
- เติมเต็มบัฟเฟอร์ข้อมูล FIFO ด้วยน้ำหนักบรรทุก
- เปลี่ยนเป็นโหมด TX
- รอ txdone irq
- ใน ISR ทำอะไรบางอย่างและชัดเจนว่าธง IRQ
- ย้อนกลับไปที่โหมดสแตนด์บายโดยอัตโนมัติ
ลำดับการรับข้อมูลโหมดต่อเนื่อง (รูปที่ 10)
- เปลี่ยนเป็นโหมดสแตนด์บายเพื่อให้โมเด็มเริ่มต้นทุกอย่าง
- เปลี่ยนเป็นโหมดต่อเนื่อง RX
- รอ IRQ (RXDONE และ ValidHeader/Payloadcrcerror)
- ใน ISR อ่านบัฟเฟอร์ข้อมูล FIFO เพื่อรับน้ำหนักบรรทุก
- Next IRQ และ FIFO Next Reading
ติดตามรหัสคำอธิบายประกอบเพื่อเรียนรู้ SX1276
- ใช้ Rasberry Pi Pico และ Adafruit RFM95W เป็นแพลตฟอร์มการเรียนรู้
- วิธีเรียกใช้ micropython บน pico
- รหัส Micropython TX และ RX ได้รับการแสดงความคิดเห็นอย่างกว้างขวางสำหรับการเรียนรู้
- พวกเขาเข้ากันได้กับห้องสมุด Radiolib
- ขอบคุณ Martynwheeler/U-Lora และ JGromes