Site icon TAPIT

Giải pháp LoRa với vi điều khiển STM32 và module RFM95

Việc truyền nhận dữ liệu không dây sử dụng sóng RF LoRa từ các module LoRa như RFM95 trong các ứng dụng point – to – point được xem là các giải pháp LoRa. Trong bài viết này, mình sẽ hướng dẫn các bạn giao tiếp giữa vi điều khiển STM32 và module RFM95 để thực hiện một giải pháp LoRa.

I/ PHÂN BIỆT GIẢI PHÁP LORA VÀ GIẢI PHÁP LORAWAN
Trong mô hình mạng OSI 7 lớp, LoRa là lớp Physiscal (là lớp đầu tiên như hình 1), lớp cơ bản thứ hai là lớp Link Layer sẽ thực hiện việc định nghĩa cấu trúc của gói tin cho LoRa (bao gồm Preamble, Header, Header CRC, PHYPayload và tùy chọn CRC như hình 2. Cấu trúc gói tin LoRa này được định nghĩa bởi hãng Semtech và áp dụng cho các thiết bị truyền nhận dữ liệu sử dụng sóng RF LoRa. Và chúng ta có thể sử dụng các thiết bị này để truyền nhận dữ liệu point – point sử dụng sóng RF LoRa, chúng ta có thể sử dụng PHYPayload để thực hiện việc định nghĩa một giao thức riêng phục vụ cho việc truyền nhận các lệnh điều khiển và dữ liệu người dùng, một giải pháp như vậy được gọi là giải pháp LoRa (không phải là LoRaWAN). 

Hình 1: Mô hình mạng OSI 7 lớp

Một giải pháp LoRaWAN thì bên cạnh thiết bị truyền nhận dữ liệu LoRa còn cần thêm giao thức LoRaWAN (LoRaWAN Protocol stack). Giao thức này là một gói phần mềm (~50Kb) chạy trên thiết bị vi điều khiển giao tiếp với Module LoRa. LoRaWAN được xem là lớp Network Protocol (lớp thứ 3 trong mô hình mạng OSI 7 lớp). Lớp này sẽ tác động vào phần PHYPayload của lớp Link layer, và người sử dụng sẽ truyền nhận dữ liệu tuân thủ theo cấu trúc gói tin đã được định nghĩa sẵn theo giao thức LoRaWAN. Giao thức LoRaWAN được thiết kế cho những ứng dụng tiết kiệm năng lượng và khoảng cách truyền nhận xa. Đặc biệt, giao thức LoRaWAN cho phép kết nối mạng theo hình sao (star network) chứ không chỉ là point – to – point như khi sử dụng giải pháp LoRa thông thường để truyền nhận dữ liệu giữa hai thiết bị. 

Hình 2: Cấu trúc gói tin LoRa PHY Layer, LoRAWA MAC và các Frame

Tìm hiểu thêm bài viết: Tiếp cận với công nghệ truyền thông không dây LoRa

II/ PHẦN CỨNG SỬ DỤNG

1. Module RFM95
RFM95 là module truyền nhận dữ liệu sử dụng sóng LoRa được thiết kế bởi hãng Hope RF, module này có độ nhạy lên đến -148dBm đi kèm với bộ khuếch đại công suất +20dBm được thiết kế tích hợp. Module này sử dụng nguồn cung cấp từ 1.8VDC – 3.7VDC với dòng tiêu thụ cao nhất lúc truyền là 120mA.
Để giao tiếp với Module RFM95 chúng ta sử dụng giao thức SPI với các chân MOSI, MISO, SCK và các chân cấu hình khác gồm NSS, RESET, DIO0.

Để có thể truyền nhận dữ liệu các bạn cần sử dụng antenna phù hợp với tần số mà các bạn sử dụng. Thêm các thông tin chi tiết về moudle RFM95 các bạn có thể xem tại đây

2. Vi điều khiển STM32 Nucleo-L432KC:

Trong ví dụ này, mình sẽ sử dụng vi điều khiển STM32L432 trên board mạch thực hành Nulceo. Các bạn cũng có thể sử dụng một dòng vi điều khiển STM32 khác như STM32F103, F411, F303…vv… để thực hiện phần thực hành này, tuy nhiên khi triển khai thực tế các ứng dụng tiết kiệm năng lượng thì STM32 dòng L là một sự lựa chọn tối ưu. 

[HỌC ONLINE LẬP TRÌNH VI ĐIỀU KHIỂN STM32 – VI XỬ LÝ ARM CORTEX M TẠI TAPIT]

III/THỰC HÀNH
Trong phần thực hành này, chúng ta sẽ sử dụng phần mềm STM32CubeIDE, thư viện HAL và thư viện LoRa SX1278 cho vi điều khiển STM32, từ những hướng dẫn này các bạn cũng có thể thực hiện với Keil C IDE hoặc một phần mềm lập trình STM32 khác. 

Bước 1: Tạo project trên CubeIDE.

Ta bấm Next để qua cửa sổ khác.

Bước 2: Cấu hình chân nạp code.

Bước 3: Cấu hình giao tiếp SPI.

Ở phần Configuration ta chỉ thay đổi thông số Data Size ở thanh Parameter Settings, các phần khác các bạn để mặc định. 

Bước 4: Cấu hình UART.|
Chúng ta sử dụng UART2 để hiển thị dữ liệu truyền/nhận lên màn hình máy tính. Ở đây mình để tốc độ Baudrate thông dụng là 9600 và khung truyền 8N1.

Bước 5: Sinh code.

Bước 6: Thêm thư viện, các biến cho chương trình.

Các bạn import thư viện SX1278.h được tải về tại đây., thêm thư viện vào chương trình như hình bên dưới. Thư viện SX1278.h này tương thích với module RFM95.

Bước 7: Cấu hình các thông số cho LoRa.
– Các bạn sẽ cấu hình tần số theo nhu cầu và sự cho phép sử dụng theo các thông tư, quy định có liên quan, mình sẽ cấu hình sử dụng tần số 915MHz.
– Chân MODE sẽ cho phép chúng ta chọn chế độ Slave hay là Master. Chân này chúng ta sẽ nối với nút nhấn để chọn chế độ module LoRa.

Bước 8: Viết chương trình cho quá trình truyền và nhận của LoRa.
– Nếu ở chế độ Master thì ta sẽ cho thực hiện in sô chuỗi “Hello TAPIT” sau mỗi lần gói tin được truyền đi. Quá trình này sẽ thực hiện liên tục.
– Nếu ở chế độ Slave thì số chuỗi “Hello TAPIT” được nhận tương ứng với gói tin, đồng thời sẽ hiển thị độ lợi SF.

Bước 9: Kết nối phần cứng và nạp chương trình

– Để thực hiện các bạn cần 2 module RFM95, 2 MCU và 2 ANTEN nhé.
– Các bạn nối dây tương ứng với các Pin của module RMF95 với các chân của Vi điều khiển như đã cấu hình ở trên.

Bước 10: Xem kết quả.

Trong thực tế, việc nhận dữ liệu bị mất trong quá trình nhận còn tùy thuộc vào điều kiện khoảng cách, địa hình, chất lượng antenna và các thông số cấu hình. 

Kết luận: Qua bài viết này, chúng ta có thể phân biệt được sự khác nhau cơ bản của giải pháp LoRa và giải pháp LoRaWAN, đồng thời chúng ta đã hoàn thành việc thử nghiệm giao tiếp giữa 2 vi điều khiển STM32 thông qua sóng RF LoRa. Từ ví dụ đơn giản này, hi vọng sẽ giúp các bạn có nền tảng để phát triển cho các dự án, các ứng dụng Internet of Things sử dụng STM32, LoRa.

Chúc các bạn thành công!
– Sỹ SV – Nhóm TAPIT IPT LoRaWAN
Thuong Nguyen

Tài liệu tham khảo:
Migrating an Internet of Things (IoT) Sensor Design to LoRaWAN, SEMTECH

Tìm hiểu thêm:
Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32
Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community