Atom DTU LoRaWAN-Series Base

这是 Atom DTU LoRaWAN 系列底座的驱动程序库,用于接收和发送来自 LoRaWAN 模块的数据。

支持以下产品:

Atom DTU LoRaWAN470

Atom DTU LoRaWAN868

Atom DTU LoRaWAN915

UIFLOW2 应用示例:

LoRaWAN 通讯

在UiFlow2 中打开 atoms3r_dtu_lorawan_example.m5f2 项目。

本示例演示如何使用 Atom DTU LoRaWAN Base 接收和发送数据。

UiFlow2 代码块:

example.png

示例输出:

None

MicroPython 应用示例:

LoRaWAN 通讯

本示例演示如何使用 Atom DTU LoRaWAN Base 接收和发送数据。

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 base import AtomDTULoRaWANBase
 9
10
11title0 = None
12base_lorawan470 = None
13
14
15def setup():
16    global title0, base_lorawan470
17
18    M5.begin()
19    title0 = Widgets.Title("LoRaWAN", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
20
21    base_lorawan470 = AtomDTULoRaWANBase(2, port=(5, 6))
22    base_lorawan470.set_join_mode(0)
23    base_lorawan470.config_otaa("xxxx", "xxxx", "xxxx")
24    base_lorawan470.set_frequency_band_mask("0400")
25    base_lorawan470.set_rx_window_param(0, 0, 505300000)
26    base_lorawan470.set_class_mode(2)
27    base_lorawan470.set_uplink_downlink_mode(1)
28    base_lorawan470.set_uplink_app_port(1)
29    base_lorawan470.join(1, 1, 20, 20)
30    print("LoRaWAN configuration complete")
31
32
33def loop():
34    global title0, base_lorawan470
35    M5.update()
36    if BtnA.isPressed():
37        print("Send Message")
38        base_lorawan470.send_data("11", 1, 15)
39
40
41if __name__ == "__main__":
42    try:
43        setup()
44        while True:
45            loop()
46    except (Exception, KeyboardInterrupt) as e:
47        try:
48            from utility import print_error_msg
49
50            print_error_msg(e)
51        except ImportError:
52            print("please update to latest firmware")

示例输出:

None

API

AtomDTULoRaWANBase

class base.dtu_lorawan.AtomDTULoRaWANBase(id=1, port=None)

基类:LoRaWAN_470

创建 AtomDTULoRaWANBase 对象。

参数:
  • id (int) – UART ID 号可使用 0, 1, 2, 默认使用2。

  • port (list | tuple) – 包含 TX 和 RX 引脚编号的列表或元组。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from base import AtomDTULoRaWANBase

dtu_lorawan = AtomDTULoRaWANBase(0, (6, 5))
class driver.asr650x.LoRaWAN_470(uart, debug=False)

基类:LoRaWAN_Asr650x

创建 LoRaWAN 对象。

参数:
  • tx (int) – UART TX 引脚编号。

  • rx (int) – UART RX 引脚编号。

  • debug (bool) – 是否开启调试模式

MicroPython 代码块:

from driver.asr650x import LoRaWAN_470

lora = LoRaWAN_470(tx=17, rx=16)
config_abp(devaddr, appskey, nwkskey)

配置 ABP 连接模式信息。

参数:
  • devaddr (str) – 设备地址。

  • appskey (str) – 应用程序会话密钥。

  • nwkskey (str) – 网络会话密钥。

UiFlow2 代码块:

config_abp.png

MicroPython 代码块:

lora.config_abp("0037CAE1FC3542B9", "70B3D57ED003B699", "67FA4ED1075A20573BCDD7594C458698")
get_abp_config()

获取 ABP 连接模式信息。

返回:

ABP 连接模式信息(devaddr、appskey、newskey)。

返回类型:

tuple

UiFlow2 代码块:

get_abp_config.png

MicroPython 代码块:

lora.get_abp_config()
config_otaa(deveui, appeui, appkey)

配置 OTAA 连接模式信息。

参数:
  • deveui (str) – 设备 EUI。

  • appeui (str) – 应用程序 EUI。

  • appkey (str) – 应用程序密钥。

UiFlow2 代码块:

config_otaa.png

MicroPython 代码块:

lora.config_otaa("0037CAE1FC3542B9", "70B3D57ED003B699", "67FA4ED1075A20573BCDD7594C458698")
get_otaa_config()

获取 OTAA 连接模式信息。

返回:

OTAA 连接模式信息(deveui、appskey、newskey)。

返回类型:

tuple

UiFlow2 代码块:

get_otaa_config.png

MicroPython 代码块:

lora.get_otaa_config()
check_join_status()

检查 LoRaWAN 网络加入状态。

返回:

LoRaWAN 网络加入状态。

返回类型:

bool

UiFlow2 代码块:

check_join_status.png

MicroPython 代码块:

lora.check_join_status()

检查数据上行链路状态。

返回:

数据上行链路状态。

返回类型:

bool

UiFlow2 代码块:

检查数据上行链路状态。

MicroPython 代码块:

lora.check_uplink_status()

检查下行链路数据,如果有下行链路数据,则返回信息。

参数:

timeout (int) – 超时时间。

返回:

如果没有下行链路数据则为 False,否则返回下行链路数据。

返回类型:

bool | str

UiFlow2 代码块:

check_downlink_data.png

MicroPython 代码块:

lora.check_downlink_data()
class driver.asr650x.LoRaWAN_Asr650x(uart, debug=False)

基类:object

创建 LoRaWAN 对象。

参数:
  • uart (machine.UART) – UART 对象。

  • debug (bool) – 是否开启调试模式

MicroPython 代码块:

from driver.asr650x import LoRaWAN_Asr650x

lora = LoRaWAN_Asr650x(uart)
set_join_mode(mode)

设置 LoRaWAN 连接模式。

参数:

mode (int) – LoRaWAN 连接模式。

UiFlow2 代码块:

set_join_mode.png

MicroPython 代码块:

lora.set_join_mode(0)
set_frequency_band_mask(mask)

设置频段掩码。

参数:

mask (str) – 频段掩码。

MicroPython 代码块:

lora.set_frequency_band_mask("0001")

设置上行和下行链路的频率。

参数:

mode (int) – 上行和下行链路的频率。

MicroPython 代码块:

lora.set_uplink_downlink_mode(1)
set_class_mode(class_mode, branch=None, para1=None, para2=None, para3=None, para4=None)

设置class 模式,如果class模式为 0,则忽略branch、para1、para2、para3 和para4。

参数:
  • class_mode (int) – class模式。

  • branch (int) – branch选择。

  • para1 (int) – 设置beacon 频率,单位为 Hz。

  • para2 (int) – 设置beacon 数据速率。

  • para3 (int) – 设置 ping 频率,单位为 Hz。

  • para4 (int) – 设置 ping 数据速率。

MicroPython 代码块:

lora.set_class_mode(0, 0, 0, 0, 0, 0)
join(para1, para2=None, para3=None, para4=None)

加入 LoRaWAN 网络。

参数:
  • para1 (int) – 0 停止加入,1 开始加入。

  • para2 (int) – 0 关闭自动加入,1 打开自动加入。

  • para3 (int) – 加入间隔,单位为秒(7~255)。

  • para4 (int) – 加入重试次数(1~256)。

UiFlow2 代码块:

join.png

join_stop.png

MicroPython 代码块:

lora.join(1, 1, 8, 1)

lora.join(0)
send_data(payload, confirm=None, nbtrials=None)

向 LoRaWAN 网关发送数据有效载荷。

参数:
  • payload (str) – 要发送的数据。

  • confirm (int) – 确认模式。

  • nbtrials (int) – 尝试重连的次数。

UiFlow2 代码块:

send_data.png

MicroPython 代码块:

lora.send_data("Hello, World!", 1, 1)

设置上行链路app端口。

参数:

port (int) – 上行链路app端口。

UiFlow2 代码块:

set_uplink_app_port.png

MicroPython 代码块:

lora.set_uplink_app_port(1)
set_rx_window_param(rx1_offset, rx2_dr, rx2_freq)

设置接收窗口参数。

参数:
  • rx1_offset (int) – RX1 偏移量。

  • rx2_dr (int) – RX2 数据速率

  • rx2_freq (int) – RX2 频率。

MicroPython 代码块:

lora.set_rx_window_param(0, 0, 868100000)