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 | 接地 | |
VCC | DC3.3~5V 电源输入 |
注意事项:
- 模块的引脚电平是 3.3V,与 5V 的单片机通信需要做电平转换适配
- 无线串口模块为 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,可以监听相同信道上的所有模块的数据传输;发送的数据,可以被相同信道上任意地址的模块收到,从而起到广播和监听的作用。
透明传输方式
点对点
- 地址相同、信道相同、无线速率(非串口波特率)相同的两个模块,一个模块发送,另外一个模块接收(必须是:一个发,一个收)。
- 每个模块都可以做发送/接收。
- 数据完全透明,所发即所得。
发送模块 | 接收模块 | |
---|---|---|
个数 | 1 | 1 |
传输内容 | 数据 | 数据 |
例如:
设备 A、B 地址都为 0x1234,信道都为 0x12,速率相同。
设备 A 发送:AA BB CC DD
设备 B 接收:AA BB CC DD
透传的方式很简单,把 Lora 模块当串口用就行,设备 A 通过串口发数据,设备 B 就可以从串口接收到,反之如此。
点对多
- 地址相同、信道相同、无线速率(非串口波特率)相同的模块,任意一个模块发送,其他模块都可以接收到。
- 每个模块都可以做发送/接收.
- 数据完全透明,所发即所得。
发送模块 | 接收模块 | |
---|---|---|
个数 | 1 | N |
传输内容 | 数据 | 数据 |
与点对点的区别是,接收模块可以多个。
例如: 设备 A~F 地址为 0x1234,信道为 0x12,速率相同。
设备 A 发送:AA BB CC DD
设备 B~F 接收:AA BB CC DD
广播监听
- 模块地址为 0xFFFF,则该模块处于广播监听模式,发送的数据可以被相同速率和信道的其他所有模块接收到(广播);同时,可以监听相同速率和信道上所有模块的数据传输(监听)。
- 广播监听无需地址相同。
发送模块 | 接收模块 | |
---|---|---|
个数 | 1 | N |
传输内容 | 数据 | 数据 |
与点对多的区别是,地址可以不同。
例如: 设备 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
定向传输方式
点对点
- 模块发送时可修改地址和信道,用户可以指定数据发送到任意地址和信道。
- 可以实现组网和中继功能。
发送模块 | 接收模块 | |
---|---|---|
个数 | 1 | 1 |
传输内容 | 地址+信道+数据 | 数据 |
与点对点透传的区别是,模块地址可变,信道可变,但速率仍然相同。
例如:
设备 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
。发送数据的格式是 高位地址 + 低位地址 + 信道 + 用户数据。
使用代码测试
点对点定传仅仅是比点对点透传多了地址字节。可以这样定义:
/* USER CODE BEGIN PV */
uint8_t B_Addr[2] = { 0xFF, 0xFE };
uint8_t B_Chan[1] = { 0x0A };
/* USER CODE END PV */
配置了串口的代码(HAL 库环境)后,在每次发送数据之前发送地址字节:
这样,接收的设备(B 设备)就能接收到 A 发出的一帧数据(不含地址字节)。
广播监听
- 模块地址为 0xFFFF,则该模块处于广播监听模式,发送的数据可以被具有相同速率和信道的其他所有模块接收到(广播);同时,可以监听相同速率和信道上所有模块的数据传输(监听);
- 广播监听无需地址相同。
- 信道地址可设置。当地址为 0xFFFF 时,为广播模式;为其他时,为定向传输模式。
发送模块 | 接收模块 | |
---|---|---|
个数 | 1 | N |
传输内容 | 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
参考与致谢
- LORA 模块 ATK-LORA-01
- 正点原子 LORA 模块 ATK-LORA 使用教程
- 【正点原子产品资料】LORA 模块 ATK-LORA-01 资料下载和技术讨论链接
- 两个 LORA 模块工作在一般模式定向传输数据的测试方法(使用上位机测试)
- ATK-LORA-01 无线串口模块只接收到 00
原文地址:https://wiki-power.com/
本篇文章受 CC BY-NC-SA 4.0 协议保护,转载请注明出处。