Truyền dữ liệu qua Lora với module LoraEasy

Internet-of-Things-Protocols

Xin chào, trong bài viết trước, chúng ta giới thiệu và thảo luận về việc sử dụng công nghệ LoRa trong các ứng dụng yêu cầu truyền dữ liệu cảm biến hoặc tín hiệu điều khiển trên khoảng cách lên đến hàng km. Trong bài viết này, chúng ta sẽ demo truyền dữ liệu qua LoRa với module LoRaEasy được phát triển bởi HT Electronics.

1/ Giới thiệu về module LoRa Easy

Được phát triển để giúp người dùng có thể truyền dữ liệu qua mạng LoRa mà không cần tốn thời gian để tìm hiểu phương thức hoạt động, đọc datasheet của LoRa chipset và làm mạch phần cứng, board LoRaEasy có thể được sử dụng như 1 module xử lý lớp LoRa link và người dùng chỉ cần gửi lệnh hoặc Tx/Rx dữ liệu qua giao tiếp qua UART hoặc USB-UART.

Về phần cứng, board LoRaEasy sử dụng chipset SX1276 và MCU STM32F103 để quản lý phần LoRa link và giao tiếp với board ứng dụng ngoài qua UART hoặc USB-UART

LoraEasy_usb_view             LoraEasy_uart_view

LoRaEasy giao tiếp qua USB-UART                             LoRaEasy giao tiếp qua UART

Nhờ giao tiếp bằng AT command dạng ký tự nên chúng ta có thể làm việc với board LoRaEasy khá dễ dàng từ Terminal trên máy tính, từ board embedded khác sử dụng MCU của STM32, MSP430, hoặc Raspberry Pi board hoặc board Arduino

Thông tin chi tiết về phần cứng có thể tham khảo ở:
https://htelectronics.vn/san-pham/lora-easy-usb-module-sx1276-giao-tiep-bang-at-command/
https://htelectronics.vn/san-pham/lora-easy-uart-module-sx1276-giao-tiep-bang-at-command/

Tài liệu tham khảo:

2/ Demo sử dụng board LoRa Easy

Sau khi cấp nguồn, firmware của board LoRa Easy sẽ khởi động chipset SX1276 và cấu hình LoRa setting mặc định để sẵn sàng truyền nhận dữ liệu. Do đó chúng ta có thể dễ dàng kiểm tra hoạt động bằng cách gửi lệnh để gửi dữ liệu giữa 2 board LoRa Easy mà không cần phải setup gì cả. Sau đây chúng ta sẽ demo truyền dữ liệu giữa 2 máy tính, và giữa 2 board Arduino với board LoRa Easy.

  • Demo gửi dữ liệu giữa 2 máy tính qua mạng LoRa

Để test demo dễ dàng, chúng ta có thể kết nối 2 board LoRa Easy USB vào 2 port USB của 1 máy tính mà không cần phải sử dụng 2 máy tính như ứng dụng thực tế.

Demo10s

Board LoRa Easy USB sẽ hiện ra như 1 cổng COM ảo, nên chúng ta có thể mở 2 chương trình Terminal để gửi lệnh dạng text qua cổng COM ảo này.

Cấu hình COM port như sau cho 2 chương trình Terminal:

COM_Setup

 

 

 

 

 

 

 

 

 

Mặc định board LoRa Easy sẽ ở trạng thái Stanby sau khi khởi động. Để bắt đầu trạng thái Rx, chúng ta sẽ dùng lệnh “AT+RECV=<time_out>“. Giá trị <time_out> chính là thời gian board LoRa Easy sẽ ở trong trạng thái Rx trước khi trở lại trạng thái Standby. Nếu cần,  chúng ta có thể gửi giá trị binary FFFF để board luôn Rx

Do trên Terminal chúng ta chỉ có thể gửi text dạng ascii nên chúng ta sẽ sử dụng giá trị binary của 1 ký tự ASCII để làm Rx timeout. Do đó chúng ta có thể gửi chuỗi “AT+RECV=ZZ” xuống 1 board LoRa Easy để làm vào chế độ Rx trong 23s (Ký tự ‘Z’ có giá trị ASCII là 0x5A, do đó giá trị timeout của “ZZ” là 0x5A5A ( = 23130ms) )

Phía Tx chúng sẽ sử dụng lệnh “AT+SEND=<len><data>” để bắt đầu trạng thái Tx và gửi dữ liệu qua LoRa. <len> là giá trị binary cho số byte dữ liệu cần gửi, và <data> là chuỗi binary dữ liệu cần gửi. Tương tự trên Terminal chỉ gửi được chuỗi ASCII nên chúng ta sẽ gửi chuỗi “AT+SEND=0Hello! Day la demo 10s de test board LoraEasy OK” (ký tự 0 sau dấu ‘=’ có giá trị binary là 48 nên dữ liệu theo sau sẽ có 48 ký tự)

Demo truyền nhận như hình dưới:

Ketqua_demo
Terminal bên Rx                                                                       Terminal bên Tx

Có thể thấy, chúng ta có thể truyền nhận dữ liệu qua mạng LoRa với board LoRa Easy mà chưa cần tìm hiểu datasheet của chipset SX1276 cũng như chưa cần lập trình gì cả.

  • Demo truyền nhận LoRa giữa máy tính và board Arduino

Trong demo này, chúng ta sẽ gửi dữ liệu giữa máy tính và board Arduino Mega 2560 sử dụng board LoRaEasy UART. Tuy sử dụng nguồn 3.3V nhưng board LoRa Easy UART có thể giao tiếp tốt với cả tín hiệu 5V hoặc 3.3V. Do đó chúng ta có thể sử dụng board Arduino Mega2560 truyền nhận UART trực tiếp với board LoRa Easy UART như hình sau

Arduino_Lora

Tín hiệu kết nối bao gồm: 3.3V, GND, TX1, RX1, và DIO2 điều khiển chân Reset của LoRa Easy

Arduino sketch của demo có thể download ở đây

Sketch demo hoạt động như 1 chương trình Terminal, chúng ta có thể mở cửa sổ COM Monitor trong Arduino IDE để gửi lệnh AT command tương tự như demo giao tiếp với máy tính ở trên.

demo_arduino

Tương tự như demo trước, chúng ta chỉ cần sử dụng lệnh “AT+RECV” và “AT+SEND” là có thể truyền nhận dữ liệu giữa board Arduino Mega2560 và máy tính 1 cách dễ dàng. Để test khoảng cách, chúng ta có thể di chuyển board Arduino ra xa máy tính và kiểm tra việc gửi dữ liệu

3/ Sử dụng các chế độ truyền LoRa

Chúng ta có thể chọn 1 trong các mode LoRa được định nghĩa sẵn bởi firmware của board LoRa Easy cho phù hợp với yêu cầu khoảng cách truyền, tốc độ gửi dữ liệu của từng ứng dụng thực tế

Các chế độ LoRa được định nghĩa như bảng sau:

lora_modes

Tương ứng với mỗi chế độ LoRa, firmware của board LoRa Easy sẽ cấu hình các thông số radio của SX1276 như bảng trên. Mode càng lớn thì khoảng cách truyền càng xa; ngược lại, mode càng nhỏ thì tốc độ gửi dữ liệu càng cao. Tổng cộng chúng ta có 10 mode trong đó mode 9 là do người dùng tự cấu hình SX1276 nếu muốn.

Để chọn LoRa mode, chúng ta sẽ dùng lệnh “AT+LRMODE=<mode>“. Trong đó <mode> là ký tự từ 0 đến 9 để có thể chọn mode ngay trong chương trình Terminal trên máy tính. Ví dụ: “AT+LRMODE=1” để chọn mode 1

4/ Sử dụng filter trong trạng thái RX

Người dùng có thể xác lập địa chỉ 32-bit cho board LoRa Easy để khi TX, board sẽ gửi địa chỉ này kèm theo dữ liệu cần truyền. Phía board Rx thì chỉ cần xác lập danh sách địa chỉ board muốn nhận thì sau đó firmware bên trong board LoRa Easy sẽ tự động filter dữ liệu từ các board không có trong danh sách

Để xác lập địa chỉ board, chúng ta có thể dùng lệnh “AT+DEVADDR=<addr>“. Trong đó <addr> là giá trị binary 32-bit.

Để xác lập danh sách địa chỉ để nhận, chúng ta dùng lệnh “AT+ADRFILTER=<len><adr1>…<adr5>“. Với <len> là tổng số byte của tất cả địa chỉ theo sau. Chúng ta có thể set tối đa 5 địa chỉ trong danh sách.

5/ Truyền dữ liệu với FSK mode

FSK là 1 công nghệ truyền dữ liệu không dây ra đời trước LoRa. Với FSK, tốc độ gửi dữ liệu rất nhanh so với LoRa nhưng bù lại khoảng cách tryền thì ngắn hơn nhiều. Do đó có thể nói FSK và LoRa đều có ưu điểm riêng để phù hợp cho từng ứng dụng thực tế.

Firmware của board LoRaEasy hỗ trợ truyền dữ liệu với FSK mode. Người dùng có thể dùng lệnh “AT+TRANSMODE=<mode>” để chuyển đổi giữa FSK và LoRa mode. Trong đó <mode> là ký tự 0 cho LoRa mode và là ký tự 1 cho FSK mode.

Sau khi chọn chế độ truyền với lệnh “AT+TRANSMODE”, chúng ta có thể thực hiện việc truyền nhận như các demo trên với lệnh “AT+SEND” và “AT+RECV”

Tương tự bên LoRa, board LoRa Easy cũng hỗ trợ các chế độ FSK để người dụng dễ dàng sử dụng mà không cần phải tìm hiểu và tự cấu hình các thông số của FSK.

fsk_mode

Lệnh để chọn các chế độ FSK là “AT+FSK=<mode>” tương tự như bên LoRa

The End

Bài viết đến đây là hết rồi. Qua bài viết này, chúng ta đã giới thiệu và demo ứng dụng truyền nhận dữ liệu qua LoRa với board LoRa Easy hết sức dễ dàng và nhanh chóng mà chưa cần đọc hiểu datasheet của chipset Lora, lập trình điều khiển và thiết kế phần cứng. Tất cả công việc phức tạp và tốn thời gian đo đã được hỗ trợ bởi board LoRa Easy. Thông qua tập lệnh AT command, chúng ta có thể chọn các chế độ LoRa được lập trình sẵn để tối ưu khoảng cách truyền, tốc độ dữ liệu, v.v… để phù hợp với ứng dụng cụ thể của mình. Các bạn có thể tham khảo thêm từ hướng dẫn sử dụng của board LoRa Easy để tìm hiểu đầy đủ các lệnh AT command cho các tính năng được hỗ trợ