LoRa868 v1.2 Module
LoRa868 v1.2 模块是 M5Stack 可堆叠模块系列的一部分,它是一款工作在 900MHz 频段、基于 SX1262 芯片方案的 LoRa 通信模块。
支持以下产品:
UiFlow2 应用示例
备注
在使用以下示例之前,请先检查模块上的 DIP 开关,确保示例中使用的引脚与 DIP 开关的位置一致。有关具体配置,请参考产品说明页面。SPI 配置已在内部实现,用户无需额外设置。
发送端
在 UiFlow2 上打开 cores3_lora868_v12_tx_example.m5f2 项目。
该示例每秒发送一次数据。
UiFlow2 代码块:
示例输出:
无
接收端
在 UiFlow2 上打开 cores3_lora868_v12_rx_example.m5f2 项目。
示例接收并显示数据。
UiFlow2 代码块:
示例输出:
无
MicroPython 应用示例
备注
在使用以下示例之前,请先检查模块上的 DIP 开关,确保示例中使用的引脚与 DIP 开关的位置一致。有关具体配置,请参考产品说明页面。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 LoRa868V12Module 9import time 10 11 12title0 = None 13label_t = None 14label_time = None 15label_tx = None 16label_ts = None 17lora868v12_0 = None 18count = None 19last_time = None 20timestamp = None 21 22 23def setup(): 24 global \ 25 title0, \ 26 label_t, \ 27 label_time, \ 28 label_tx, \ 29 label_ts, \ 30 lora868v12_0, \ 31 count, \ 32 last_time, \ 33 timestamp 34 35 M5.begin() 36 Widgets.fillScreen(0x222222) 37 title0 = Widgets.Title("LoRa Module Tx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18) 38 label_t = Widgets.Label("Send:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 39 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 40 label_tx = Widgets.Label("hello", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 41 label_ts = Widgets.Label("timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 42 43 count = 0 44 lora868v12_0 = LoRa868V12Module( 45 pin_rst=5, 46 pin_cs=1, 47 pin_irq=10, 48 pin_busy=2, 49 freq_khz=868000, 50 bw="250", 51 sf=8, 52 coding_rate=8, 53 preamble_len=12, 54 syncword=0x12, 55 output_power=10, 56 ) 57 last_time = time.ticks_ms() 58 59 60def loop(): 61 global \ 62 title0, \ 63 label_t, \ 64 label_time, \ 65 label_tx, \ 66 label_ts, \ 67 lora868v12_0, \ 68 count, \ 69 last_time, \ 70 timestamp 71 M5.update() 72 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 73 last_time = time.ticks_ms() 74 count = count + 1 75 timestamp = lora868v12_0.send((str("hello M5 ") + str(count)), None) 76 label_tx.setText(str((str("hello M5 ") + str(count)))) 77 label_time.setText(str(last_time)) 78 79 80if __name__ == "__main__": 81 try: 82 setup() 83 while True: 84 loop() 85 except (Exception, KeyboardInterrupt) as e: 86 try: 87 from utility import print_error_msg 88 89 print_error_msg(e) 90 except ImportError: 91 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 LoRa868V12Module 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 22lora868v12_data = None 23rssi = None 24snr = None 25last_time = None 26 27 28def lora868v12_0_receive_event(received_data): 29 global \ 30 title0, \ 31 label_r, \ 32 label_rx, \ 33 label_t, \ 34 label_time, \ 35 label_rssi, \ 36 label_snr, \ 37 label_rssi_v, \ 38 label_snr_v, \ 39 lora868v12_0, \ 40 lora868v12_data, \ 41 rssi, \ 42 snr, \ 43 last_time 44 lora868v12_data = received_data 45 label_rx.setText(str(lora868v12_data.decode())) 46 rssi = lora868v12_data.rssi 47 snr = (lora868v12_data.snr) / 4 48 label_rssi_v.setText(str(rssi)) 49 label_snr_v.setText(str(snr)) 50 51 52def setup(): 53 global \ 54 title0, \ 55 label_r, \ 56 label_rx, \ 57 label_t, \ 58 label_time, \ 59 label_rssi, \ 60 label_snr, \ 61 label_rssi_v, \ 62 label_snr_v, \ 63 lora868v12_0, \ 64 lora868v12_data, \ 65 rssi, \ 66 snr, \ 67 last_time 68 69 M5.begin() 70 Widgets.fillScreen(0x222222) 71 title0 = Widgets.Title("LoRa Module Rx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18) 72 label_r = Widgets.Label("Recv:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 73 label_rx = Widgets.Label(" ", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 74 label_t = Widgets.Label("timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 75 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 76 label_rssi = Widgets.Label("RSSI: ", 5, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 77 label_snr = Widgets.Label("SNR: ", 5, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 78 label_rssi_v = Widgets.Label(" ", 65, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 79 label_snr_v = Widgets.Label(" ", 65, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 80 81 lora868v12_0 = LoRa868V12Module( 82 pin_rst=5, 83 pin_cs=1, 84 pin_irq=10, 85 pin_busy=2, 86 freq_khz=868000, 87 bw="250", 88 sf=8, 89 coding_rate=8, 90 preamble_len=12, 91 syncword=0x12, 92 output_power=10, 93 ) 94 lora868v12_0.set_irq_callback(lora868v12_0_receive_event) 95 lora868v12_0.start_recv() 96 last_time = time.ticks_ms() 97 98 99def loop(): 100 global \ 101 title0, \ 102 label_r, \ 103 label_rx, \ 104 label_t, \ 105 label_time, \ 106 label_rssi, \ 107 label_snr, \ 108 label_rssi_v, \ 109 label_snr_v, \ 110 lora868v12_0, \ 111 lora868v12_data, \ 112 rssi, \ 113 snr, \ 114 last_time 115 M5.update() 116 if (time.ticks_diff((time.ticks_ms()), last_time)) >= 1000: 117 last_time = time.ticks_ms() 118 label_time.setText(str(last_time)) 119 120 121if __name__ == "__main__": 122 try: 123 setup() 124 while True: 125 loop() 126 except (Exception, KeyboardInterrupt) as e: 127 try: 128 from utility import print_error_msg 129 130 print_error_msg(e) 131 except ImportError: 132 print("please update to latest firmware")
示例输出:
无
API应用
class LoRa868V12Module
- class module.lora868_v12.LoRa868V12Module(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)
创建一个 LoRa868V12Module 对象
- 参数:
pin_rst (int) – 复位引脚
pin_cs (int) – 片选引脚
pin_irq (int) – 中断引脚
pin_busy (int) – 忙信号输出引脚
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 KHzsf (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 LoRa868V12Module module_lora868v12_0 = LoRa868V12Module(5, 1, 10, 2, 868000, '250', 8, 8, 12, 0x12, 10)
- set_freq(freq_khz)
设置频率(单位:kHz)
- 参数:
freq_khz (int) – 频率(单位:kHz),默认值 868000 (kHz)。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_freq(freq_khz)
- set_sf(sf)
设置扩频因子。
- 参数:
sf (int) – 扩频因子(7~12)。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_sf(sf)
- set_bw(bw)
设置带宽。
- 参数:
bw (str) – 带宽(以 kHz 表示的字符串)。必须是以下值之一:’7.8’、’10.4’、’15.6’、’20.8’、’31.25’、’41.7’、’62.5’、’125’、’250’、’500’。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_bw(bw)
- set_coding_rate(coding_rate)
设置编码率。
- 参数:
coding_rate (int) – 编码率 (5 ~ 8)。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_coding_rate(coding_rate)
- set_syncword(syncword)
设置同步字。
- 参数:
syncword (int) – 同步字 (0 ~ 0xFF)
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_syncword(syncword)
- set_preamble_len(preamble_len)
设置前导符长度。
- 参数:
preamble_len (int) – 前导符长度,范围:0~255。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_preamble_len(preamble_len)
- set_output_power(output_power)
设置输出功率(单位:dBm) 。
- 参数:
output_power (int) – 输出功率(单位:dBm),范围:-9 ~ 22。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_output_power(output_power)
- set_irq_callback(callback)
设置在中断请求(IRQ)发生时执行的中断回调函数。
- 参数:
callback – 当中断触发时调用的回调函数。该回调函数不应接受任何参数,且不应有返回值。
调用 start_recv() 开始接收数据。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.set_irq_callback()
- start_recv()
开始接收数据。
此方法启动接收数据的过程。
UiFlow2 代码块:

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

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

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

MicroPython 代码块:
module_lora868v12_0.standby()
- sleep()
将 LoRa 模块置于睡眠模式
通过将模块置于深度睡眠模式来减少功耗。
UiFlow2 代码块:

MicroPython 代码块:
module_lora868v12_0.sleep()



