LoRa-1262 模块
LoRa1262Module 提供 Module13.2 LoRa-1262 无线电通信功能。该无线电模块使用模块的 M-Bus SPI 总线,并通过 I2C 上的 M5IOE1 控制器实现复位、天线开关和电源控制。
支持以下产品:
构造函数接受已初始化的 machine.I2C 总线。省略 i2c 时,模块使用 module.mbus.i2c1。M5IOE1 地址必须在 0x71 到 0x74 范围内。
备注
发射前请连接合适的天线。支持的 RF 频率范围为 850000–930000 kHz。
UiFlow2 应用示例
发送端
在 UiFlow2 中打开 cores3_lora1262_tx_example.m5f2 项目。该示例每秒发送一条消息,并显示消息和发送时间戳。
UiFlow2 代码块:
接收端
在 UiFlow2 中打开 cores3_lora1262_rx_example.m5f2 项目。该示例启动连续接收,并显示解码后的负载、RSSI、SNR 和接收时间戳。
UiFlow2 代码块:
MicroPython 应用示例
发送端
该示例使用默认的 M-Bus I2C 总线初始化 LoRa1262Module,每秒发送一条消息,并显示发送时间戳。
1import os, sys, io
2import M5
3from M5 import *
4from module import LoRa1262Module
5import time
6
7
8title0 = None
9label_t = None
10label_tx = None
11label_ts = None
12label_time = None
13lora1262_0 = None
14
15
16count = None
17message = None
18
19
20def setup():
21 global title0, label_t, label_tx, label_ts, label_time, lora1262_0, count, message
22
23 M5.begin()
24 Widgets.setRotation(1)
25 Widgets.fillScreen(0x222222)
26 title0 = Widgets.Title("LoRa1262 Module Tx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.Montserrat18)
27 label_t = Widgets.Label("Send:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
28 label_tx = Widgets.Label("hello", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
29 label_ts = Widgets.Label(
30 "timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18
31 )
32 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
33
34 count = 0
35 lora1262_0 = LoRa1262Module(pin_cs=0, pin_busy=2, pin_irq=14, address=0x74)
36
37
38def loop():
39 global title0, label_t, label_tx, label_ts, label_time, lora1262_0, count, message
40 M5.update()
41 message = str("Module LoRa1262 ") + str(count)
42 lora1262_0.send(message, None)
43 label_tx.setText(str(message))
44 label_time.setText(str(time.ticks_ms()))
45 count = count + 1
46 time.sleep(1)
47
48
49if __name__ == "__main__":
50 try:
51 setup()
52 while True:
53 loop()
54 except (Exception, KeyboardInterrupt) as e:
55 try:
56 from utility import print_error_msg
57
58 print_error_msg(e)
59 except ImportError:
60 print("please update to latest firmware")
接收端
该示例注册接收回调,启动连续接收,并显示解码后的负载、RSSI 和 SNR。
1import os, sys, io
2import M5
3from M5 import *
4from module import LoRa1262Module
5import time
6
7
8title0 = None
9label_r = None
10label_rx = None
11label_rssi = None
12label_rssi_v = None
13label_snr = None
14label_snr_v = None
15label_t = None
16label_time = None
17lora1262_0 = None
18
19
20lora1262_data = None
21rssi = None
22snr = None
23
24
25def lora1262_0_receive_event(received_data):
26 global \
27 title0, \
28 label_r, \
29 label_rx, \
30 label_rssi, \
31 label_rssi_v, \
32 label_snr, \
33 label_snr_v, \
34 label_t, \
35 label_time, \
36 lora1262_0, \
37 lora1262_data, \
38 rssi, \
39 snr
40 lora1262_data = received_data
41 label_rx.setText(str(lora1262_data.decode()))
42 rssi = lora1262_data.rssi
43 snr = (lora1262_data.snr) / 4
44 label_rssi_v.setText(str(rssi))
45 label_snr_v.setText(str(snr))
46 label_time.setText(str(time.ticks_ms()))
47
48
49def setup():
50 global \
51 title0, \
52 label_r, \
53 label_rx, \
54 label_rssi, \
55 label_rssi_v, \
56 label_snr, \
57 label_snr_v, \
58 label_t, \
59 label_time, \
60 lora1262_0, \
61 lora1262_data, \
62 rssi, \
63 snr
64
65 M5.begin()
66 Widgets.setRotation(1)
67 Widgets.fillScreen(0x222222)
68 title0 = Widgets.Title("LoRa1262 Module Rx", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.Montserrat18)
69 label_r = Widgets.Label("Recv:", 5, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
70 label_rx = Widgets.Label(" ", 65, 50, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
71 label_rssi = Widgets.Label("RSSI:", 5, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
72 label_rssi_v = Widgets.Label(" ", 65, 80, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
73 label_snr = Widgets.Label("SNR:", 5, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
74 label_snr_v = Widgets.Label(" ", 65, 108, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
75 label_t = Widgets.Label(
76 "timestamp:", 5, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18
77 )
78 label_time = Widgets.Label("1", 118, 150, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.Montserrat18)
79
80 lora1262_0 = LoRa1262Module(pin_cs=0, pin_busy=2, pin_irq=14, address=0x74)
81 lora1262_0.set_rx_callback(lora1262_0_receive_event)
82 lora1262_0.start_recv()
83
84
85def loop():
86 global \
87 title0, \
88 label_r, \
89 label_rx, \
90 label_rssi, \
91 label_rssi_v, \
92 label_snr, \
93 label_snr_v, \
94 label_t, \
95 label_time, \
96 lora1262_0, \
97 lora1262_data, \
98 rssi, \
99 snr
100 M5.update()
101
102
103if __name__ == "__main__":
104 try:
105 setup()
106 while True:
107 loop()
108 except (Exception, KeyboardInterrupt) as e:
109 try:
110 from utility import print_error_msg
111
112 print_error_msg(e)
113 except ImportError:
114 print("please update to latest firmware")
API参考
- class module.lora1262.LoRa1262Module(i2c=None, pin_cs=1, pin_irq=10, pin_busy=2, address=113, freq_khz=868000, bw='250', sf=8, coding_rate=8, preamble_len=12, syncword=18, output_power=10)
-
创建 Module13.2 LoRa-1262 对象。
模块使用 M-Bus SPI 总线和调用方提供的 I2C 总线。M5IOE1 控制器通过 G2 控制 SX1262 复位,通过 G3 控制天线开关,并通过 G5 控制 LoRa 电源。
- 参数:
i2c (machine.I2C) – 用于访问 M5IOE1 的已初始化 I2C 总线。
pin_cs (int) – SX1262 片选 MCU 引脚。
pin_irq (int) – SX1262 DIO1 MCU 引脚。
pin_busy (int) – SX1262 BUSY MCU 引脚。
address (int) – M5IOE1 I2C 地址,范围为 0x71 到 0x74。
freq_khz (int) – RF 频率,单位为 kHz,范围为 850000 到 930000。
bw (str) – LoRa 带宽,单位为 kHz。
sf (int) – 扩频因子,范围为 6 到 12。
coding_rate (int) – 编码率分母,范围为 5 到 8。
preamble_len (int) – 前导码长度,范围为 5 到 255 个符号。
syncword (int) – 同步字,范围为 1 到 255。
output_power (int) – 输出功率,单位为 dBm,范围为 -9 到 22。
UiFlow2 代码块:

MicroPython 代码块:
import M5 from module import LoRa1262Module, mbus M5.begin() lora1262 = LoRa1262Module(mbus.i2c1, address=0x71)
- set_freq(freq_khz=868000)
设置 RF 频率。
- 参数:
freq_khz (int) – RF 频率,单位为 kHz,范围为 850000 到 930000。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_freq(868000)
- set_sf(sf)
设置 LoRa 扩频因子。
- 参数:
sf (int) – 扩频因子,范围为 6 到 12。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_sf(8)
- set_bw(bw)
设置 LoRa 带宽。
- 参数:
bw (str) – 带宽,单位为 kHz。支持的值包括
"7.8"、"10.4"、"15.6"、"20.8"、"31.25"、"41.7"、"62.5"、"125"、"250"和"500"。- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_bw("250")
- set_coding_rate(coding_rate)
设置前向纠错编码率。
- 参数:
coding_rate (int) – 编码率分母,范围为 5 到 8。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_coding_rate(8)
- set_syncword(syncword)
设置 LoRa 同步字。
- 参数:
syncword (int) – 同步字,范围为 1 到 255。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_syncword(0x12)
- set_preamble_len(preamble_len)
设置 LoRa 前导码长度。
- 参数:
preamble_len (int) – 前导码长度,范围为 5 到 255 个符号。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_preamble_len(12)
- set_output_power(output_power)
设置 LoRa 输出功率。
- 参数:
output_power (int) – 输出功率,单位为 dBm,范围为 -9 到 22。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.set_output_power(10)
- send(packet, tx_at_ms=None)
发送 LoRa 数据包。
- 参数:
- 返回:
发送时间戳,单位为毫秒。
- 返回类型:
UiFlow2 代码块:



MicroPython 代码块:
timestamp = lora1262_0.send("Hello LoRa1262")
- recv(timeout_ms=None, rx_length=255, rx_packet=None)
接收一个 LoRa 数据包。
- 参数:
- 返回:
接收到的数据包;接收超时时返回
None。- 返回类型:
RxPacket | None
UiFlow2 代码块:


MicroPython 代码块:
packet = lora1262_0.recv()
- start_recv()
启动 LoRa 连续接收。
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.start_recv()
- 返回类型:
None
- set_tx_callback(callback)
注册发送完成回调。
- 参数:
callback (callable) – 数据包发送完成后调用的无参数函数。
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
def on_transmit(): print("transmitted") lora1262_0.set_tx_callback(on_transmit)
- set_rx_callback(callback)
注册接收数据包回调。
- 参数:
callback (callable) – 接收到有效数据包后调用的函数,该函数接收一个
RxPacket。- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
def on_receive(packet): print(packet.decode(), packet.rssi, packet.snr / 4) lora1262_0.set_rx_callback(on_receive)
- standby()
使 SX1262 进入待机模式。
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.standby()
- 返回类型:
None
- sleep()
使 SX1262 进入睡眠模式。
UiFlow2 代码块:

MicroPython 代码块:
lora1262_0.sleep()
- 返回类型:
None
- irq_triggered()
返回 SX1262 IRQ 是否已触发。
- 返回:
自上次开始发送或接收操作后触发过中断时返回
True。- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
interrupted = lora1262_0.irq_triggered()
- deinit()
使无线电进入睡眠状态并禁用模块电源控制。
MicroPython 代码块:
lora1262_0.deinit()
- 返回类型:
None


