LoRaWAN868 模块

COM.LoRaWAN 是 M5Stack 可堆叠模块系列中的 LoRaWAN 通信模块,支持节点到节点或 LoRaWAN 通信。

支持以下产品:

LoRaWAN868Module

MicroPython TX 应用示例:

 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 LoRaWAN868Module
 9import time
10
11
12lorawan868_0 = None
13
14
15def setup():
16    global lorawan868_0
17
18    M5.begin()
19    Widgets.fillScreen(0x222222)
20
21    lorawan868_0 = LoRaWAN868Module(1, (17, 16))
22    lorawan868_0.wake_up()
23    lorawan868_0.set_parameters(0, 0, 5, 0, 1, 8, 0, 0, 0)
24    lorawan868_0.set_auto_low_power(False)
25    print(lorawan868_0.query_chip_id())
26    print(lorawan868_0.query_lorawan_mode())
27    print(lorawan868_0.any())
28    lorawan868_0.set_mode(LoRaWAN868Module.MODE_LORA)
29
30
31def loop():
32    global lorawan868_0
33    M5.update()
34    lorawan868_0.send_hex("Hello Lora!")
35    time.sleep(1)
36
37
38if __name__ == "__main__":
39    try:
40        setup()
41        while True:
42            loop()
43    except (Exception, KeyboardInterrupt) as e:
44        try:
45            from utility import print_error_msg
46
47            print_error_msg(e)
48        except ImportError:
49            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 LoRaWAN868Module
 9
10
11lorawan868_0 = None
12
13
14def setup():
15    global lorawan868_0
16
17    M5.begin()
18    Widgets.fillScreen(0x222222)
19
20    lorawan868_0 = LoRaWAN868Module(1, (17, 16))
21    lorawan868_0.wake_up()
22    lorawan868_0.set_parameters(0, 0, 5, 0, 1, 8, 0, 0, 0)
23    lorawan868_0.set_auto_low_power(False)
24    print(lorawan868_0.query_chip_id())
25    print(lorawan868_0.query_lorawan_mode())
26    print(lorawan868_0.any())
27    lorawan868_0.set_mode(LoRaWAN868Module.MODE_LORA)
28    lorawan868_0.enable_rx(0)
29
30
31def loop():
32    global lorawan868_0
33    M5.update()
34    if lorawan868_0.any():
35        print(lorawan868_0.receive_data())
36        lorawan868_0.enable_rx(0)
37
38
39if __name__ == "__main__":
40    try:
41        setup()
42        while True:
43            loop()
44    except (Exception, KeyboardInterrupt) as e:
45        try:
46            from utility import print_error_msg
47
48            print_error_msg(e)
49        except ImportError:
50            print("please update to latest firmware")

UIFLOW2 TX 应用示例:

tx_example.png

UiFlow2 RX 应用示例:

rx_example.png

lorawan868_example_tx.m5f2

lorawan868_example_rx.m5f2

class LoRaWAN868Module

Constructors

class LoRaWAN868Module(id, port, band)

初始化 LoRaWANModule。

参数:
  • id (int) – 用于通信的 UART ID。

  • port – 用于通信的 UART 端口,以 (rx, tx) 引脚的元组形式指定。

  • band – 用于 LoRa 通信的频率。

UiFlow2:

init.png

Methods

LoRaWAN868Module.set_mode(mode)

设置 LoRaWAN 模块的模式。

参数:

mode – 要设置的模式。

UiFlow2:

set_mode.png

LoRaWAN868Module.set_parameters(freq, power, sf, bw, cr, preamble, crc, iq_inv, save)

设置 LoRaWAN 模块的参数。

参数:
  • freq – 设置 LoRa 监听/发送频率,单位为 Hz。

  • power – LoRa 信号输出功率(单位:dBm);

  • sf – 扩频因子,范围为 5~12。

  • bw – 带宽 0 – 125K、1 – 250K、2 – 500K;

  • cr – 1 – 4/5,2 – 4/6,3 – 4/7,4 – 4/8;

  • preamble – 前导码长度为 8 ~ 65535 bit;

  • crc – 0 – 禁用 CRC 校验,1 – 启用 CRC 校验;

  • iq_inv – 0 – 未反转,1 – 已反转;

  • save – 将参数保存到 FLASH,0 – 不保存,1 – 保存。

UiFlow2:

set_parameters.png

LoRaWAN868Module.wake_up()

通过串口中断唤醒设备。复位后,设备处于睡眠状态。理论上,通过串口发送任意数据都可以触发中断并唤醒设备。

UiFlow2:

wake_up.png

LoRaWAN868Module.sleep()

将设备置于低功耗模式。

UiFlow2:

sleep.png

LoRaWAN868Module.reset()

重置设备。

UiFlow2:

reset.png

LoRaWAN868Module.restore_factory_settings()

将设备恢复为出厂设置。参数将重置,并且设备将在响应结束后进入睡眠模式。

UiFlow2:

restore_factory_settings.png

在启动加载程序模式开始时,启用或禁用版权信息打印。默认启用。

参数:

enable (bool) – 设置为 True 以启用,设置为 False 以禁用。

UiFlow2:

set_copyright.png

LoRaWAN868Module.set_auto_low_power(enable)

启用或禁用自动低功耗模式。默认为启用。

参数:

enable (bool) – 设置为 True 以启用,设置为 False 以禁用。

UiFlow2:

set_auto_low_power.png

LoRaWAN868Module.query_chip_id()

查询芯片的唯一 ID,可用于查询对应的序列号。

UiFlow2:

query_chip_id.png

LoRaWAN868Module.enable_rx(timeout)

启用 LoRaWAN 模块以接收数据。

参数:

timeout (int) – 接收操作的超时时间。

UiFlow2:

enable_rx.png

LoRaWAN868Module.set_deveui(deveui)

设置或查询 DevEui。DevEui 必须为 16 个十六进制字符(0-9、A-F)。

参数:

deveui – 要设置的 DevEui。如果为 None,则查询当前 DevEui。

UiFlow2:

set_deveui.png

LoRaWAN868Module.set_appeui(appeui)

设置或查询 AppEui。AppEui 必须为 16 个十六进制字符(0-9、A-F)。

参数:

appeui – 要设置的 AppEui。如果为 None,则查询当前 AppEui。

UiFlow2:

set_appeui.png

LoRaWAN868Module.set_appkey(appkey)

设置或查询 AppKey。AppKey 必须为 32 个十六进制字符(0-9、A-F)。

参数:

appkey – 要设置的 AppKey。如果为 None,则查询当前 AppKey。

UiFlow2:

set_appkey.png

LoRaWAN868Module.set_nwkskey(nwkskey)

设置或查询 NwkSKey。NwkSKey 必须为 32 个十六进制字符(0-9、A-F)。

参数:

nwkskey – 要设置的 NwkSKey。如果为 None,则查询当前 NwkSKey。

UiFlow2:

set_nwkskey.png

LoRaWAN868Module.set_appskey(appskey)

设置或查询 AppSKey。AppSKey 必须为 32 个十六进制字符(0-9、A-F)。

参数:

appskey – 要设置的 AppSKey。如果为 None,则查询当前的 AppSKey。

UiFlow2:

set_appskey.png

LoRaWAN868Module.set_devaddr(devaddr)

设置或查询 DevAddr。DevAddr 必须为 8 个十六进制字符(0-9、A-F)。

参数:

devaddr – 要设置的 DevAddr。如果为 None,则查询当前 DevAddr。

UiFlow2:

set_devaddr.png

LoRaWAN868Module.set_otaa_mode(enable)

设置或查询 OTAA 模式。1 表示 OTAA 模式,0 表示 ABP 模式。

参数:

enable (bool) – 设置为 True 表示 OTAA 模式,设置为 False 表示 ABP 模式。

UiFlow2:

set_otaa_mode.png

LoRaWAN868Module.set_adr(enable)

启用或禁用 ADR(Adaptive Data Rate)功能。默认启用。

参数:

enable (bool) – 设置为 True 以启用 ADR,设置为 False 以禁用。

UiFlow2:

set_adr.png

LoRaWAN868Module.set_channel_mask(mask)

设置或查询 LoRaWAN 工作信道掩码。

参数:

mask – 十六进制格式的通道掩码,例如 0000000000000000000000FF 表示通道 0~7。

UiFlow2:

set_channel_mask.png

LoRaWAN868Module.join_network()

使用 OTAA(Over-The-Air Activation)加入网络。该命令会触发加入过程。

UiFlow2:

join_network.png

LoRaWAN868Module.set_duty_cycle(cycle)

设置或查询通信周期,单位为毫秒。例如,60000 表示每 60 秒通信一次。

参数:

cycle – 通信周期,单位为毫秒。

UiFlow2:

set_duty_cycle.png

LoRaWAN868Module.set_class_mode(mode)

设置或查询设备的通信模式。仅 Class A 或 Class C 有效。

参数:

mode – 设置为 "A" 表示 Class A,或设置为 "C" 表示 Class C。

UiFlow2:

set_class_mode.png

LoRaWAN868Module.set_ack(enable)

启用或禁用 ACK 回执功能。如果启用,设备将等待来自网关的确认。

参数:

enable (bool) – 设置为 True 以启用 ACK,设置为 False 以禁用。

UiFlow2:

set_ack.png

LoRaWAN868Module.set_app_port(port)

设置或查询上行数据的应用端口(fport)。有效范围为 0~255。

参数:

port – 要设置的应用端口。

UiFlow2:

set_app_port.png

LoRaWAN868Module.set_retransmission_count(count)

设置或查询通信失败时的重传次数。有效范围为 3~8。

参数:

count – 要设置的重传次数。如果为 None,则查询当前设置。

UiFlow2:

set_retransmission_count.png

LoRaWAN868Module.send_hex(hex_data)

在 LoRaWAN 或 LoRa 模式下发送十六进制数据。十六进制字符必须成对出现(例如 “AABB”)。

参数:

hex_data – 要发送的十六进制数据,最多 64 字节。

UiFlow2:

send_hex.png

LoRaWAN868Module.send_string(string_data)

在 LoRaWAN 或 LoRa 模式下发送字符串数据。该字符串必须由 ASCII 字符组成。

参数:

string_data – 要发送的字符串数据,最多 64 字节。

UiFlow2:

send_string.png

LoRaWAN868Module.query_lorawan_mode()

查询设备当前处于 LoRaWAN 模式还是普通 LoRa 模式。

UiFlow2:

query_lorawan_mode.png

LoRaWAN868Module.save_parameters_to_flash()

将当前 LoRa 参数保存到 FLASH 存储器中。

UiFlow2:

save_parameters_to_flash.png

LoRaWAN868Module.at_cmd(cmd, data)

向 LoRaWAN 模块发送 AT 命令。

参数:
  • cmd – 要发送的 AT 命令。

  • data – 使用 AT 命令发送的数据。

UiFlow2:

at_cmd.png

LoRaWAN868Module.at_query(cmd)

查询 LoRaWAN 模块的当前设置。

参数:

cmd – 用于查询的 AT 命令。

UiFlow2:

at_query.png

LoRaWAN868Module.at_receive()

接收来自 LoRaWAN 模块的响应。

UiFlow2:

at_receive.png

LoRaWAN868Module.flush()

清空 UART 缓冲区。

UiFlow2:

flush.png

LoRaWAN868Module.any()

检查 UART 缓冲区中是否有任何数据。

UiFlow2:

any.png

LoRaWAN868Module.receive_data()

从 LoRaWAN 模块接收数据。

UiFlow2:

receive_data.png

常量

LoRaWAN868Module.BAND_470
LoRaWAN868Module.BAND_868
LoRaWAN868Module.BAND_915

LoRa 频段频率

LoRaWAN868Module.MODE_LORA
LoRaWAN868Module.MODE_LORAWAN

LoRa 模式。