Skip to main content

Lora 通信 - 基于正点原子 ATK-LORA-01 模块

ATK-LORA-01 一款体积小、微功率、低功耗、高性能远距离 LORA 无线串口模块。模块设计是采用高效的 ISM 频段射频 SX1278 扩频芯片,模块的工作频率在 410Mhz~441Mhz,以 1Mhz 频率为步进信道,共 32 个信道。可通过 AT 指令在线修改串口速率,发射功率,空中速率,工作模式等各种参数,并且支持固件升级功能。

模块基本参数

  • 工作频率:410-441 MHz,32 个信道
  • 工业频段:出厂默认 433Mhz 免申请频段
  • 无线速率:6 级可调(0.3、1.2、2.4、4.8、9.6、19.2Kbps)
  • 通信方式:串口 TTL,UART 串口,8N1、8E1、8O1,从 1200-115200 共 8 种波特率(默认 9600、8N1)
  • 发射功率:100mW(20dB),4 级可调(0-3),每一级增减约 3dBm
  • 工作电压:3.3-5V
  • 工作电流:2.3uA-118mA
    • 发射:118ma(20dbm 100mw 电压 5V)
    • 接收:17ma(模式 0、模式 1),最低约 2.3uA(模式 2+2S 唤醒)
  • 工作温度:-40~85℃
  • 接收灵敏度达-136dBm,传输距离 3000 米
  • 双 512 环形 FIFO

接口定义

名称IO 模式说明
MD0输入配置进入参数配置;上电时与 AUX 引脚配合进入固件升级模式
AUX① 输出;② 输入① 用于指示模块工作状态,用户唤醒外部 MCU;② 上电时与 MD0 引脚配合进入固件升级模式
RXD输入TTL 串口输入,连接到外部 TXD 输出引脚
TXD输出TTL 串口输出,连接到外部 RXD 输入引脚
GND接地
VCCDC3.3~5V 电源输入

注意事项:

  1. 模块的引脚电平是 3.3V,与 5V 的单片机通信需要做电平转换适配
  2. 无线串口模块为 TTL 电平,请与 TTL 电平的 MCU 进行连接

模式配置

MD0 与 AUX 引脚有两个功能,根据两者配合进入不同状态。模块在初次上电时,AUX 引脚为输入状态模式,若 MD0 与 AUX 引脚同时接入 3.3V TTL 高电平,并且保持 1 秒时间(引脚电平不变),则模块会进入固件升级模式,等待固件升级。否则进入无线通信模式(AUX 引脚会变回输出状态模式,用于指示模块的工作状态)

MD0、AUX 引脚内部下拉,悬空为低电平。拉高为 3.3V TTL 高电平

功能介绍进入方法
配置功能模块参数配置(AT 指令)上电后,AUX 悬空,MD0 拉高
通信功能用于无线通信上电后,AUX 悬空,MD0 悬空
固件升级功能用于固件升级上电后,AUX 拉高,MD0 拉高,保持 1s

无线通信模式下,AUX 引脚为输出,用于指示模块的工作状态。

功能配置

在“配置功能”下,串口需设置 ASDASD:波特率“115200”、停止位“1”、数据位“8”、奇偶校验位“无”,通过 AT 指令设置模块的工作参数。通过配置软件,参考以下 AT 指令表:

指令作用
AT测试模块响应情况
AT+MODEL?查询设备型号
AT+CGMR?获取软件版本号
AT+UPDATE查询设备是否处于固件升级模式
ATE1指令回显
ATE0指令不回显
AT+RESET模块复位(重启)
AT+DEFAULT恢复出厂设置
AT+FLASH=参数保存
AT+ADDR=?查询设备配置地址范围
AT+ADDR?查询设备地址
AT+ADDR=配置设备地址
AT+TPOWER=?查询发射功率配置范围
AT+TPOWER?查询发射功率
AT+TPOWER=配置发射功率
AT+CWMODE=?查询配置工作模式范围
AT+CWMODE?查询工作模式
AT+CWMODE=配置工作模式
AT+TMODE=?查询配置发送状态范围
AT+TMODE?查询发送状态
AT+TMODE=配置发送状态
AT+WLRATE=?查询无线速率和信道配置范围
AT+WLRATE?查询无线速率和信道
AT+WLRATE=配置无线速率和信道
AT+WLTIME=?查询配置休眠时间范围
AT+WLTIME?查询休眠时间
AT+WLTIME=配置休眠时间
AT+UART=?查询串口配置范围
AT+UART?查询串口配置
AT+UART=配置串口

当退出配置功能(MD0=0),模块会重新配置参数,在配置过程中,AUX 保持高电平,完成后输出低电平,模块返回空闲状态。

休眠时间

休眠时间对接收方来说是监听间隔的时间;对发射方来说,是持续发射唤醒码的时间。当模块工作模式在“唤醒模式”时,会在用户数据前自动添加配置休眠时间的唤醒码,当模块工作模式在“省电模式”时,以配置的休眠时间为监听间隔的时间。

设备模式

一般模式(模式 0)

  • 发射:模块接收来自串口的用户数据,模块发射无线数据包长度为 58 字节,当用户输入数据达到 58 字节时,模块将启动无线发射,此时用户可以继续输入需要发射的数据,当用户需要传输的字节小于 58 字节时,模块等待 1 个字节时间,若无用户数据继续输入则认为数据终止,此时模块将所有数据都包经无线发出,当模块开始发送第一包用户数据时,AUX 引脚将输出高电平,当模块把所有数据通过 RF 芯片并启动发射后,AUX 输出低电平。此时表明最后一包无线数据已经发射完毕,用户可以继续输入长达 512 字节的数据,通过一般模式 发出的数据包,只能被处于一般模式、唤醒模式的接收模块收到。
  • 接收:模块一直打开无线接收功能,可以接收来自一般模式、唤醒模式发出的数据包。收到数据包后,模块 AUX 输出高电平,2-3ms 延迟后,开始将无线数据通过串口 TXD 引脚发出,所有无线数据都通过串口输出后,模块将 AUX 引脚输出低电平。

唤醒模式(模式 1)

  • 发射:模块启动数据包发射的条件与 AUX 功能等于一般模式,唯一不同的是:模块会在每个数据包前自动添加唤醒码(休眠时间),唤醒码的长度取决于用户参数中设置的休眠时间。唤醒码的目的是用于唤醒工作省电模式的接收模块。所以,唤醒模式发射的数据可以被一般模式、1、2 接收到。
  • 接收:与一般模式相同。

省电模式(模式 2)

  • 发射:模块处于休眠状态,串口将关闭,无法接收来自外部 MCU 的串口数据,所以该模式不具有无线发射的功能。
  • 接收:在省电模式下,要求发射方必须工作在唤醒模式,无线模块定时监听唤醒码,一旦收到有效的唤醒码后,模块将持续处于接收状态,在等待整个有效数据包接收接收完毕,然后模块将 AUX 输出高电平,并延迟 2-3ms 后,打开串口将收到的无线数据通过 TXD 发出,完毕后将 AUX 输出低电平。无线模块将继续进制“休眠-监听”的工作状态,通过设置不同的唤醒时间,模块具有不同的接收响应延迟和功耗,用户需要在通讯延迟时间和平均功耗之间取得一个平衡点。

信号强度模式(模式 3)

信号强度模式可查看通讯双方的信号强度,评估双方的通信质量提供参考。

  • 发射:与一般模式相同。
  • 接收:输出信号强度的信息。

SNR:信噪比(越大越稳定),RSSI:接收信号的强度指示(越大越稳定)

通信方式

  • 透明传输:例如 A 设备发 5 字节数据 AA BB CC DD EE 到 B 设备,B 设备就收到数据 AA BB CC DD EE。(透明传输,针对设备相同地址、相同的通信信道之间通信,用户数据可以是字符或 16 进制数据形式)。
    • 点对点
    • 点对多
    • 广播监听
  • 定向传输:例如 A 设备(地址为:0x1400,信道为 0x17(23 信道 433Mhz))需要向 B 设备(地址为 0x1234,信道为 0x10(16 信道、426Mhz))发送数据 AA BB CC,其通信格式为:12 34 10 AA BB CC,其中 1234 为模块 B 的地址,10 为信道,则模块 B 可以收到 AA BB CC。同理,如果 B 设备需要向 A 设备发送数据 AA BB CC,其通信格式为:14 00 17 AA BB CC,则 A 设备可以收到 AA BB CC。(定向传输,可实现设备间地址和通信信道不同之间通信,数据格式为 16 进制,发送格式:高位地址+低位地址+信道+用户数据)。
    • 点对多
    • 广播监听

广播与数据监听:将模块地址设置为 0xFFFF,可以监听相同信道上的所有模块的数据传输;发送的数据,可以被相同信道上任意地址的模块收到,从而起到广播和监听的作用。

透明传输方式

点对点

  • 地址相同、信道相同、无线速率(非串口波特率)相同的两个模块,一个模块发送,另外一个模块接收(必须是:一个发,一个收)。
  • 每个模块都可以做发送/接收。
  • 数据完全透明,所发即所得。
发送模块接收模块
个数11
传输内容数据数据

例如:

设备 A、B 地址都为 0x1234,信道都为 0x12,速率相同。
设备 A 发送:AA BB CC DD
设备 B 接收:AA BB CC DD

透传的方式很简单,把 Lora 模块当串口用就行,设备 A 通过串口发数据,设备 B 就可以从串口接收到,反之如此。

点对多

  • 地址相同、信道相同、无线速率(非串口波特率)相同的模块,任意一个模块发送,其他模块都可以接收到。
  • 每个模块都可以做发送/接收.
  • 数据完全透明,所发即所得。
发送模块接收模块
个数1N
传输内容数据数据

与点对点的区别是,接收模块可以多个。

例如: 设备 A~F 地址为 0x1234,信道为 0x12,速率相同。
设备 A 发送:AA BB CC DD
设备 B~F 接收:AA BB CC DD

广播监听

  • 模块地址为 0xFFFF,则该模块处于广播监听模式,发送的数据可以被相同速率和信道的其他所有模块接收到(广播);同时,可以监听相同速率和信道上所有模块的数据传输(监听)。
  • 广播监听无需地址相同。
发送模块接收模块
个数1N
传输内容数据数据

与点对多的区别是,地址可以不同。

例如: 设备 A 地址为 0xFFFF,设备 B~F 地址不全部一样,设备 B 与 C 地址为 0x1234,设备 D、E、F 地址为 0x5678。设备 A~F 速率全部相同。
广播:
设备 A 广播:AA BB CC DD
设备 B~F 接收:AA BB CC DD
监听:
设备 B 向 C 发送:AA BB CC DD
设备 A 监听:AA BB CC DD
设备 D 向 E、F 发送:11 22 33 44
设备 A 监听:11 22 33 44

定向传输方式

点对点

  • 模块发送时可修改地址和信道,用户可以指定数据发送到任意地址和信道。
  • 可以实现组网和中继功能。
发送模块接收模块
个数11
传输内容地址+信道+数据数据

与点对点透传的区别是,模块地址可变,信道可变,但速率仍然相同。

例如:
设备 A 地址 0X1234,信道 0X17;
设备 B 地址 0xABCD,信道 0X01;
设备 C 地址 0X1256,信道 0x13。

设备 A 发送:AB CD 01 AA BB CC DD
设备 B 接收:AA BB CC DD
设备 C 接收:无

设备 A 发送:12 56 13 AA BB CC DD
设备 B 接收:无
设备 C 接收:AA BB CC DD

无代码测试

准备 2 个 USB 转 TTL,2 个 LoRa 模块。分别接在 USB 转 TTL 上(电源、共地、TX/RX 对接),将两个 LoRa 的 MD0 接 VCC 后,插入电脑 USB,打开配置软件,配置以下参数:

设备 A:

  • 一般模式
  • 定向传输
  • 波特率:115200(必须是 115200)
  • 校验位:无
  • 空中速率:19.2k
  • 休眠时间:1s
  • 模块地址:0
  • 通信信道:0
  • 发射功率:20dBm

设备 B:

  • 一般模式
  • 定向传输
  • 波特率:115200(必须是 115200)
  • 校验位:无
  • 空中速率:19.2k
  • 休眠时间:1s
  • 模块地址:65534
  • 通信信道:10
  • 发射功率:20dBm

配置后,点击 保存配置拔掉 MD0 再断电

将两个模块重新上电,打开配置软件,收发都勾选 HEX(16 进制)

在 A 的发送区填入 FF FE 0A 11 12 13 14,点击发送,就能在 B 的接收区收到 11 12 13 14 了;或者在 B 的发送区填入 00 00 00 11 12 13,就能在 A 的接收区收到 11 12 13 了。

其中,FF FE 是 B 地址 65534 的 16 进制数,信道是 10(16 进制数就是 0A),发送的内容数据是 11 12 13 14。同理,B 发出的数据包含 A 的地址 00 00,信道 00,内容 11 12 13。发送数据的格式是 高位地址 + 低位地址 + 信道 + 用户数据

使用代码测试

点对点定传仅仅是比点对点透传多了地址字节。可以这样定义:

main.c
/* USER CODE BEGIN PV */
uint8_t B_Addr[2] = { 0xFF, 0xFE };
uint8_t B_Chan[1] = { 0x0A };
/* USER CODE END PV */

配置了串口的代码(HAL 库环境)后,在每次发送数据之前发送地址字节:

main.c
HAL_UART_Transmit(&huart1, B_Addr, 2, 0xFFFF);
HAL_UART_Transmit(&huart1, B_Chan, 1, 0xFFFF);

这样,接收的设备(B 设备)就能接收到 A 发出的一帧数据(不含地址字节)。

广播监听

  • 模块地址为 0xFFFF,则该模块处于广播监听模式,发送的数据可以被具有相同速率和信道的其他所有模块接收到(广播);同时,可以监听相同速率和信道上所有模块的数据传输(监听);
  • 广播监听无需地址相同。
  • 信道地址可设置。当地址为 0xFFFF 时,为广播模式;为其他时,为定向传输模式。
发送模块接收模块
个数1N
传输内容0xFFFF+信道+数据数据

例如:

设备 A 地址 0xFFFF 信道 0x12;
设备 B、C 地址 0x1234,信道 0x13;
设备 D 地址 0xAB00,信道 0x01;
设备 E 地址 0xAB01,信道 0x12;
设备 F 地址 0xAB02,信道 0x12;

设备 A 广播:FF FF 13 AA BB CC DD
设备 B、C 接收:AA BB CC DD

设备 A 发送:AB 00 01 11 22 33 44
只有设备 D 接收:11 22 33 44

设备 E 发送:AB 02 12 66 77 88 99
设备 F 接收:66 77 88 99
设备 A 监听:66 77 88 99

参考与致谢

本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。