LoRa868 v1.2 Module
LoRa868 v1.2 模块是 M5Stack 堆叠模块系列的一部分,属于 LoRa 通信模块,工作在 900MHz 频率,采用 SX1262 芯片解决方案。
支持以下产品:
UiFlow2 应用示例:
备注
在使用以下示例之前,请检查模块上的拨码开关,以确保示例中使用的引脚与拨码开关的位置相匹配。有关具体配置,请参考产品手册页面。SPI 配置已在内部实现。
发送端
在 UiFlow2 上打开 cores3_lora_sx1262_tx_example.m5f2 项目。
此示例每秒发送一次数据。
UiFlow2 代码块:
示例输出:
无
接收端
在 UiFlow2 上打开 cores3_lora_sx1262_rx_example.m5f2 项目。
此示例接收并显示数据。
UiFlow2 代码块:
示例输出:
无
MicroPython 应用示例:
备注
在使用以下示例之前,请检查模块上的拨码开关,以确保示例中使用的引脚与拨码开关的位置相匹配。有关具体配置,请参考产品手册页面。SPI 配置已在内部实现。
发送端
此示例每秒发送一次数据。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from module import LoRaSx1262Module 9import time 10 11 12title0 = None 13label_t = None 14label_time = None 15label_tx = None 16label_ts = None 17lora868v12_0 = None 18 19 20count = None 21last_time = None 22timestamp = None 23 24 25def setup(): 26 global \ 27 title0, \ 28 label_t, \ 29 label_time, \ 30 label_tx, \ 31 label_ts, \ 32 lora868v12_0, \ 33 count, \ 34 last_time, \ 35 timestamp 36 37 M5.begin() 38 Widgets.fillScreen(0x222222) 39 title0 = Widgets.Title("LoRa Module Tx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18) 40 label_t = Widgets.Label("Send:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 41 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 42 label_tx = Widgets.Label("hello", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 43 label_ts = Widgets.Label("timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 44 45 lora868v12_0 = LoRaSx1262Module(5, 1, 10, 2, 868000, "250", 8, 8, 12, 0x12, 10) 46 count = 0 47 last_time = time.ticks_ms() 48 49 50def loop(): 51 global \ 52 title0, \ 53 label_t, \ 54 label_time, \ 55 label_tx, \ 56 label_ts, \ 57 lora868v12_0, \ 58 count, \ 59 last_time, \ 60 timestamp 61 M5.update() 62 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 63 last_time = time.ticks_ms() 64 count = count + 1 65 timestamp = lora868v12_0.send((str("hello M5 ") + str(count)), None) 66 label_tx.setText(str((str("hello M5 ") + str(count)))) 67 label_time.setText(str(last_time)) 68 69 70if __name__ == "__main__": 71 try: 72 setup() 73 while True: 74 loop() 75 except (Exception, KeyboardInterrupt) as e: 76 try: 77 from utility import print_error_msg 78 79 print_error_msg(e) 80 except ImportError: 81 print("please update to latest firmware")
示例输出:
无
接收端
此示例接收并显示数据。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8from module import LoRaSx1262Module 9import time 10 11 12title0 = None 13label_r = None 14label_rx = None 15label_t = None 16label_time = None 17label_rssi = None 18label_snr = None 19label_rssi_v = None 20label_snr_v = None 21lora868v12_0 = None 22 23 24lora868v12_data = None 25rssi = None 26snr = None 27last_time = None 28 29 30def lora868v12_0_receive_event(received_data): 31 global \ 32 title0, \ 33 label_r, \ 34 label_rx, \ 35 label_t, \ 36 label_time, \ 37 label_rssi, \ 38 label_snr, \ 39 label_rssi_v, \ 40 label_snr_v, \ 41 lora868v12_0, \ 42 lora868v12_data, \ 43 rssi, \ 44 snr, \ 45 last_time 46 lora868v12_data = received_data 47 label_rx.setText(str(lora868v12_data.decode())) 48 rssi = lora868v12_data.rssi 49 snr = lora868v12_data.snr 50 label_rssi_v.setText(str(rssi)) 51 label_snr_v.setText(str(snr)) 52 53 54def setup(): 55 global \ 56 title0, \ 57 label_r, \ 58 label_rx, \ 59 label_t, \ 60 label_time, \ 61 label_rssi, \ 62 label_snr, \ 63 label_rssi_v, \ 64 label_snr_v, \ 65 lora868v12_0, \ 66 lora868v12_data, \ 67 rssi, \ 68 snr, \ 69 last_time 70 71 M5.begin() 72 Widgets.fillScreen(0x222222) 73 title0 = Widgets.Title("LoRa Module Rx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18) 74 label_r = Widgets.Label("Recv:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 75 label_rx = Widgets.Label(" ", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 76 label_t = Widgets.Label("timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 77 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 78 label_rssi = Widgets.Label("RSSI: ", 5, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 79 label_snr = Widgets.Label("SNR: ", 5, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 80 label_rssi_v = Widgets.Label(" ", 65, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 81 label_snr_v = Widgets.Label(" ", 65, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 82 83 lora868v12_0 = LoRaSx1262Module(5, 1, 10, 2, 868000, "250", 8, 8, 12, 0x12, 10) 84 lora868v12_0.set_irq_callback(lora868v12_0_receive_event) 85 lora868v12_0.start_recv() 86 last_time = time.ticks_ms() 87 88 89def loop(): 90 global \ 91 title0, \ 92 label_r, \ 93 label_rx, \ 94 label_t, \ 95 label_time, \ 96 label_rssi, \ 97 label_snr, \ 98 label_rssi_v, \ 99 label_snr_v, \ 100 lora868v12_0, \ 101 lora868v12_data, \ 102 rssi, \ 103 snr, \ 104 last_time 105 M5.update() 106 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 107 last_time = time.ticks_ms() 108 label_time.setText(str(last_time)) 109 110 111if __name__ == "__main__": 112 try: 113 setup() 114 while True: 115 loop() 116 except (Exception, KeyboardInterrupt) as e: 117 try: 118 from utility import print_error_msg 119 120 print_error_msg(e) 121 except ImportError: 122 print("please update to latest firmware")
示例输出:
无
API参考
class LoRaSx1262Module
- class module.lora_sx1262.LoRaSx1262Module(pin_rst=5, pin_cs=1, pin_irq=10, pin_busy=2, freq_khz=868000, bw='250', sf=8, coding_rate=8, reamble_len=12, syncword=0x12, output_power=10)
创建一个 LoRaSx1262Module 对象。
- 参数:
timer_id (int) – 定时器 ID,范围:0~3,默认为 0。
pin_rst (int) – (RST) 复位引脚号。
pin_cs (int) – (NSS) 片选引脚号。
pin_irq (int) – (IRQ) 中断引脚号。
pin_busy (int) – (BUSY) 忙检查引脚号。
freq_khz (int) – LoRa 射频通信频率,单位 kHz,范围:850000 KHz ~ 930000 KHz。
bw (str) –
带宽,包括如下:
"7.8": 7.8 KHz"10.4": 10.4 KHz"15.6": 15.6 KHz"20.8": 20.8 KHz"31.25": 31.25 KHz"41.7": 41.7 KHz"62.5": 62.5 KHz"125": 125 KHz"250": 250 KHz"500": 500 KHz
sf (int) – 扩频因子,范围从 7 到 12。较高的扩展因子可以接收较弱的信号,但数据传输速率较慢。
coding_rate (int) – 前向纠错(FEC)编码率以 4/N 的形式表示,范围从 5 到 8。
preamble_len (int) – 前导符长度,范围 0~255。
syncword (int) – 同步字,用于标记数据帧的开始,默认值是 0x12。
output_power (int) – 输出功率以 dBm 为单位,范围从 -9 到 22。
UiFlow2 代码块:

MicroPython 代码块:
from module import LoRaSx1262Module lora868v12_0 = LoRaSx1262Module(5, 1, 10, 2, 868000, '250', 8, 8, 12, 0x12, 10)
- set_irq_callback(callback)
设置中断回调函数。
- 参数:
callback – 当中断触发时调用的回调函数。回调函数不应接受任何参数,并且不应返回任何值。
调用 start_recv() 开始接收数据。
UiFlow2 代码块:

MicroPython 代码块:
lora868v12_0.set_irq_callback()
- start_recv()
开始接收数据。
该方法启动接收数据。
UiFlow2 代码块:

MicroPython 代码块:
lora868v12_0.start_recv()
- recv(self, timeout_ms, rx_length, rx_packet)
接收数据。
- 参数:
- 返回:
接收数据实例。
- 返回类型:
尝试接收一个 LoRa 数据包。如果发生超时,则返回 None,否则返回接收到的数据包实例。
UiFlow2 代码块:

MicroPython 代码块:
data = lora868v12_0.recv()
- send(buf, tx_at_ms=None)
发送数据。
- 参数:
- 返回:
返回一个时间戳(time.ticks_ms() 的结果),表示数据包发送的时间。
- 返回类型:
发送一个数据包并返回数据包发送后的时间戳。
UiFlow2 代码块:

MicroPython 代码块:
lora868v12_0.send()
- standby()
设置模块为待机模式。
设置 LoRa 模块为待机模式,降低功耗。
UiFlow2 代码块:

MicroPython 代码块:
lora868v12_0.standby()
- sleep()
设置模块为休眠模式。
通过将模块置于休眠模式来降低功耗。
UiFlow2 代码块:

MicroPython 代码块:
lora868v12_0.sleep()



