适用人群:零基础,想用单片机(STM32 / 51 / ESP32 / Arduino)驱动市面上常见 LoRa 模块的开发者。
核心问题先行:LoRa 通信至少需要 2 个模块(或 1 个模块 + 1 台 LoRaWAN 网关),只买 1 个模块无法通信。
目录
- [LoRa 到底是什么](#LoRa 到底是什么)
- 需要买几个模块?
- [LoRa 通信原理解说](#LoRa 通信原理解说)
- [市面上最常用的 LoRa 模块盘点](#市面上最常用的 LoRa 模块盘点)
- [两大驱动路线:串口透传 vs SPI 裸驱](#两大驱动路线:串口透传 vs SPI 裸驱)
- [路线 A:串口透传模块实战(以亿佰特 E220-400T22S 为例)](#路线 A:串口透传模块实战(以亿佰特 E220-400T22S 为例))
- [路线 B:SPI 裸芯片模块实战(以安信可 Ra-02 / SX1278 为例)](#路线 B:SPI 裸芯片模块实战(以安信可 Ra-02 / SX1278 为例))
- [进阶:LoRaWAN 是什么,和裸 LoRa 有什么区别](#进阶:LoRaWAN 是什么,和裸 LoRa 有什么区别)
- [常见问题 FAQ](#常见问题 FAQ)
- 从零到精通的学习路线
一、LoRa 到底是什么
LoRa(Long Range)是一种远距离、低功耗、低速率的无线通信技术,由 Semtech 公司拥有。你可以这样理解它的定位:
| 技术 | 距离 | 功耗 | 速率 | 典型用途 |
|---|---|---|---|---|
| WiFi | ~50m | 高 | 高 | 视频、上网 |
| 蓝牙 | ~10m | 低 | 中 | 耳机、手环 |
| LoRa | 2~15km | 极低 | 低(0.3~50kbps) | 传感器、抄表、农业 |
| 4G/NB-IoT | 基站覆盖 | 中 | 中 | 需运营商、要交话费 |
LoRa 的杀手锏:不需要运营商、免流量费、空旷环境轻松几公里、电池供电能用好几年,代价是传输速率很低,只适合传小数据(温度、开关量、定位坐标等)。
LoRa 与 LoRaWAN 的区别(新手最容易混淆)
- LoRa:只是物理层的无线电调制技术("怎么把 0 和 1 变成电磁波")。
- LoRaWAN:建立在 LoRa 之上的通信协议和网络架构("设备怎么入网、怎么和服务器对话"),需要网关和网络服务器。
新手自学、自己两个模块互发数据,用的是裸 LoRa 点对点,完全不需要网关和服务器。LoRaWAN 是进阶内容。
二、需要买几个模块?
核心答案:至少 2 个。 无线通信必须有"一发一收"两端。
常见组合:
| 你的目的 | 要买的东西 |
|---|---|
| 两个设备互传数据(如遥控小车、两个传感器互通) | 2 个同型号 LoRa 模块 |
| 一个基站收集 N 个传感器数据 | N 个节点模块 + 1 个集中器模块(共 N+1 个) |
| 接入公共 LoRaWAN 网络(如 TTN) | 1 个节点模块(附近有网关覆盖才行) |
| 自己搭 LoRaWAN 私有网络 | 1 个 LoRaWAN 网关 + N 个节点 |
购买注意事项:
- 两个模块必须频段一致(国内一般买 433MHz 或 470MHz 版本,也叫 400M 频段)。
- 新手建议买 UART 串口透传型(如亿佰特 E220/E22 系列),到手两根线交叉一接就能通。
- 别忘了天线!LoRa 模块不装天线几乎传不出去,还可能烧功放。买 433MHz 胶棒天线或弹簧天线(IPEX 接口的注意配套)。
- 想先在电脑上玩,再买 2 个 USB 转 TTL 小板(CH340),不用写一行代码就能验证通信。
最低成本入门套装(约 40~60 元):
- 2 × 亿佰特 E220-400T22S(或 ATK-LORA-01)
- 2 × USB 转 TTL(CH340)
- 天线一般随模块附送或加几块钱
三、LoRa 通信原理解说
3.1 扩频调制(CSS)------LoRa 的核心魔法
普通无线通信(如 433M 遥控器用的 ASK)信号能量集中在一个很窄的频率点上,容易被干扰、容易被噪声淹没。
LoRa 用的是线性调频扩频(CSS, Chirp Spread Spectrum):把每一位数据展开成一段"频率随时间扫动"的啁啾(Chirp)信号,能量摊开在很宽的频带里。
好处:
- 接收灵敏度极高(可达 -148dBm):信号淹没在噪声下面几十 dB 也能解出来;
- 抗干扰强:窄带干扰只影响啁啾的一小段,靠相关运算还能恢复;
- 代价是速率低。
3.2 三个你必须懂的关键参数
① 扩频因子 SF(Spreading Factor),取值 SF6~SF12
- SF 越大 → 每个符号传输时间越长 → 距离越远、灵敏度越高、速率越低、耗电越多;
- SF 越小 → 速率快、距离近。
- 通信双方 SF 必须相同(不同 SF 之间基本互相听不见,准正交)。
② 带宽 BW(Bandwidth),常见 125 / 250 / 500 kHz
- BW 越大 → 速率越快,但灵敏度下降、距离变近;
- 国内 433M 一般配合 125kHz 使用。
③ 编码率 CR(Coding Rate),如 4/5~4/8
- 前向纠错比例,CR 越高纠错能力越强、冗余越多、速率越慢。
经验口诀:想传得远 → 大 SF + 小 BW;想传得快 → 小 SF + 大 BW。
速率和距离的对应关系(SF7/BW125K 速率约 5.5kbps、距离近;SF12/BW125K 速率约 0.3kbps、距离最远)。模块手册里的"空中速率 0.3k~19.2k"背后就是这几组参数的组合。
3.3 一次通信到底发生了什么
发送端 MCU ──(串口/SPI)──> LoRa模块 ──(啁啾射频信号)──> LoRa模块 ──(串口/SPI)──> 接收端 MCU
把数据编码成 解调出数据
扩频信号发射
LoRa 数据包的物理结构:
- 前导码 Preamble:一串标准啁啾,告诉对方"我要发数据了,快同步";
- 包头 Header:数据长度、编码率、CRC 开关等信息;
- Payload:你的实际数据,一次最多 255 字节(FIFO 256 字节);
- CRC:校验,防误码。
收发双方只要 频率、SF、BW、CR、前导码长度 这五个参数一致,就能互相通信。
3.4 地址与信道(针对串口透传模块)
串口透传模块在上述物理参数之上又封装了"地址 + 信道"的概念:
- 模块地址(2 字节,0~65535):类似门牌号;
- 信道(1 字节):每个信道对应一个具体频点,如信道 0 = 410.125MHz,信道 23 = 433.125MHz(每信道间隔 1MHz);
- 地址相同 + 信道相同 + 空中速率相同 → 才能透传互通。
四、市面上最常用的 LoRa 模块盘点
4.1 串口透传型(UART)------新手首选
内部有 MCU 帮你把 LoRa 协议全部跑好,单片机只管用串口收发字节,AT 指令或上位机配置参数。
| 型号 | 芯片 | 频段 | 功率 | 接口 | 特点 |
|---|---|---|---|---|---|
| 亿佰特 E220-400T22S | SX1268 | 433/470M | 22dBm | UART | 新一代低功耗,休眠 180nA,性价比之王 |
| 亿佰特 E22-400T30S | SX1262+PA | 433/470M | 30dBm(1W) | UART | 大功率远距,AT 指令 |
| 亿佰特 E32-433T20D/T33D | SX1278 | 433M | 20/33dBm | UART | 经典老将,资料极多 |
| 正点原子 ATK-LORA-01 | SX1278 | 433M | 20dBm | UART | 配正点原子教程,学生学习常用 |
4.2 SPI 裸芯片型------进阶、便宜、自由度最高
模块里就是一颗射频芯片,所有寄存器都要自己操作,单片机通过 SPI 读写。
| 型号 | 芯片 | 频段 | 特点 |
|---|---|---|---|
| 安信可 Ra-01 | SX1278 | 433M | 约 10 元,弹簧天线,资料最多 |
| 安信可 Ra-02 | SX1278 | 433M | 带 IPEX 座子,直接拧胶棒天线 |
| 安信可 Ra-01S / Ra-01SC | SX1268 / LLCC68 | 433M | 新一代低功耗 |
| 安信可 Ra-01SH | SX1262 | 868/915M | 海外频段 |
| 亿佰特 E220-400M22S / E22-400M22S | SX1268/1262 | 433/470M | 邮票孔,适合集成进自己的产品 |
| RFM95W | SX1276 | 868/915M | 国外开源项目常见 |

4.3 LoRaWAN 节点型
| 型号 | 芯片 | 特点 |
|---|---|---|
| 亿佰特 E78-400M22S1C | ASR6601(国产 SoC) | 支持 LoRaWAN,可二次开发 |
| 安信可 Ra-07 / Ra-08 | ASR6501/6502 | Ra-08 支持串口烧写、二次开发 |
| 各种 LilyGo / Heltec 开发板 | ESP32+SX1276 集成 | 屏幕+LoRa 一体,玩 Arduino 方便 |
4.4 选型建议
- 纯新手、只想快点通:E220-400T22S × 2(串口型)
- 想学底层原理、做竞赛/毕设:Ra-02 × 2(SPI 型)+ STM32
- 要做 LoRaWAN、上云平台:E78 或 Heltec/LilyGo + 一台网关
五、两大驱动路线:串口透传 vs SPI 裸驱
| 对比项 | 串口透传型 | SPI 裸芯片型 |
|---|---|---|
| 上手难度 | ★(会串口就行) | ★★★★(要啃寄存器手册) |
| 单片机要求 | 1 个 UART | 1 个 SPI + 几个 GPIO |
| 可定制性 | 低(参数固定几个档) | 高(SF/BW/CR 随便调) |
| 价格 | 15~30 元 | 10~15 元 |
| 适合 | 快速落地、产品 | 学习原理、竞赛、深度定制 |
两条路线后面各给一份完整实战教程。
六、路线 A:串口透传模块实战
以 亿佰特 E220-400T22S 为例(E22、E32、ATK-LORA-01 思路完全一样)。
6.1 先不写代码:电脑对电脑验证通信
材料:2 个模块 + 2 个 USB 转 TTL + 天线。
接线(TX/RX 交叉!):
| LoRa 模块 | USB 转 TTL |
|---|---|
| VCC | 5V(注意查你模块的电压范围,E220 支持 2.3~5.5V) |
| GND | GND |
| TXD | RXD |
| RXD | TXD |
| M0、M1 | GND(进入模式 0:透传模式) |
测试:
- 两个模块都插电脑,开两个串口助手,波特率默认 9600;
- 出厂默认参数相同(地址 0、信道 23、空中速率 2.4k),直接在窗口 A 发
Hello,窗口 B 就能收到Hello; - 通了!这就是 LoRa 点对点。
改参数(用亿佰特官方上位机 RFSetting,或 AT 指令):
- 把 M1 接高电平(M0=0, M1=1)进入配置模式;
- 可改地址、信道、波特率、空中速率、功率等;
- 改完记得把 M1 拉回低电平回到透传模式。
6.2 四种工作模式(M0/M1 引脚控制)
| M1 | M0 | 模式 | 说明 |
|---|---|---|---|
| 0 | 0 | 传输模式 | 正常透传收发 |
| 0 | 1 | WOR 模式 | 低功耗监听,电池节点用 |
| 1 | 0 | 配置模式 | 改参数用 |
| 1 | 1 | 深度休眠 | 几乎不耗电 |
6.3 单片机接线(以 STM32 为例)
STM32 E220-400T22S
PA9 (USART1_TX) ──> RXD
PA10 (USART1_RX) <── TXD
PA8 (GPIO) ──> M0
PA11 (GPIO) ──> M1
3.3V/5V ──> VCC
GND ──> GND
AUX ──> PA12 (可选,忙标志检测)
6.4 收发代码(HAL 库示例)
透传模式下,代码简单到令人发指------LoRa 模块就是一个"看不见的串口":
c
// 初始化:M0=0, M1=0 进入透传模式
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET); // M0=0
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET); // M1=0
HAL_Delay(50); // 等模式切换完成
// 发送:直接往串口扔数据
uint8_t msg[] = "Temperature:25.6C";
HAL_UART_Transmit(&huart1, msg, sizeof(msg)-1, 100);
// 接收:用串口中断/DMA 收
uint8_t rxbuf[64];
HAL_UARTEx_ReceiveToIdle_IT(&huart1, rxbuf, sizeof(rxbuf));
// 回调里处理收到的数据,对方发什么你就收什么
定点传输 (指定发给谁):把模块配置为定点模式后,串口发出的数据前 3 个字节是 目标地址高字节 + 目标地址低字节 + 目标信道,后面才是数据:
c
// 发给地址 0x1234、信道 0x17 的设备
uint8_t pkt[] = {0x12, 0x34, 0x17, 'H', 'e', 'l', 'l', 'o'};
HAL_UART_Transmit(&huart1, pkt, sizeof(pkt), 100);
6.5 串口型的坑
- TX/RX 一定要交叉,且共地;
- 单片机串口波特率要和模块配置一致(默认 9600);
- 空中速率 ≠ 串口波特率!空中速率低时,连续猛发会溢出,要分包、留间隔;
- 模式切换后要延时几十 ms 再收发;
- 大功率模块(30dBm)发射电流可达 500mA~1A,电源要够劲。
七、路线 B:SPI 裸芯片模块实战
以 安信可 Ra-02(SX1278) 为例。这才是真正"精通 LoRa"的必经之路。
7.1 接线(以 STM32F103 为例)
| Ra-02 引脚 | STM32 | 说明 |
|---|---|---|
| 3.3V | 3.3V | 只能 3.3V!不能 5V |
| GND | GND | |
| NSS | PA4 | SPI 片选(GPIO 软件控制) |
| SCK | PA5 | SPI1_SCK |
| MISO | PA6 | SPI1_MISO |
| MOSI | PA7 | SPI1_MOSI |
| RST | PB0 | 复位脚,给个 GPIO |
| DIO0 | PB1 | 收发完成中断脚 |
DIO0 是关键:发送完成、收到数据都会在这个脚上产生上升沿脉冲,建议接单片机外部中断。
7.2 SX1278 寄存器通信基础
SX1278 就是一个 SPI 从机。读写规则:
- 写寄存器:地址字节最高位置 1(
addr | 0x80),然后发数据; - 读寄存器:直接发地址字节,然后读回数据。
c
// SPI 底层读写
uint8_t sx1278_read(uint8_t addr) {
uint8_t val;
NSS_LOW();
spi_transfer(addr & 0x7F); // 读:最高位0
val = spi_transfer(0x00);
NSS_HIGH();
return val;
}
void sx1278_write(uint8_t addr, uint8_t val) {
NSS_LOW();
spi_transfer(addr | 0x80); // 写:最高位1
spi_transfer(val);
NSS_HIGH();
}
7.3 初始化流程(核心寄存器)
c
void lora_init(void) {
// 1. 硬件复位
RST_LOW(); HAL_Delay(10); RST_HIGH(); HAL_Delay(10);
// 2. 进入 Sleep + LoRa 模式(必须先Sleep才能切LoRa模式)
sx1278_write(0x01, 0x80); // RegOpMode: LoRa + Sleep
sx1278_write(0x01, 0x81); // LoRa + Standby
// 3. 设置频率 433MHz
// Frf = 433MHz / 61.035Hz ≈ 0x6C4000(三步分频寄存器)
sx1278_write(0x06, 0x6C); // RegFrfMsb
sx1278_write(0x07, 0x40); // RegFrfMid
sx1278_write(0x08, 0x00); // RegFrfLsb
// 4. 发射功率 17dBm(PA_OUTPUT_PA_BOOST)
sx1278_write(0x09, 0xF0); // RegPaConfig
// 5. BW=125kHz, CR=4/5, 显式包头
sx1278_write(0x1D, 0x72); // RegModemConfig1
// 6. SF=7, CRC开
sx1278_write(0x1E, 0x74); // RegModemConfig2
// 7. 前导码长度 8
sx1278_write(0x20, 0x00);
sx1278_write(0x21, 0x08);
// 8. DIO0 映射:RX 时=RxDone,TX 时=TxDone
sx1278_write(0x40, 0x00); // RegDioMapping1
}
7.4 发送流程
c
void lora_send(uint8_t *data, uint8_t len) {
sx1278_write(0x01, 0x81); // Standby
sx1278_write(0x0D, 0x00); // FIFO 指针 -> Tx 基地址 0x00
for (uint8_t i = 0; i < len; i++)
sx1278_write(0x00, data[i]); // 写入 FIFO (RegFifo)
sx1278_write(0x22, len); // RegPayloadLength
sx1278_write(0x01, 0x83); // 切到 TX 模式,自动发射
// 等 DIO0 拉高 = TxDone
while (dio0_read() == 0);
sx1278_write(0x12, 0x08); // 清 TxDone 中断标志
}
7.5 接收流程
c
uint8_t lora_recv(uint8_t *buf) {
sx1278_write(0x0D, 0x00); // FIFO 指针 -> Rx 基地址
sx1278_write(0x01, 0x85); // RX Continuous 连续接收
while (dio0_read() == 0); // 等 RxDone 中断
uint8_t irq = sx1278_read(0x12); // RegIrqFlags
sx1278_write(0x12, 0xFF); // 清标志
if (irq & 0x20) return 0; // CRC 错误,丢弃
uint8_t len = sx1278_read(0x13); // RegRxNbBytes
sx1278_write(0x0D, sx1278_read(0x25)); // 指针跳到本包起始
for (uint8_t i = 0; i < len; i++)
buf[i] = sx1278_read(0x00); // 读出 FIFO
return len;
}
不想手写寄存器?Arduino/ESP32 直接用开源库
RadioLib或arduino-LoRa(Sandeep Mistry),几行代码搞定;STM32 可移植这些库或用官方参考代码。
7.6 互通条件清单(收发两端必须一致)
- 频率(433MHz)
- 扩频因子 SF
- 带宽 BW
- 编码率 CR
- 前导码长度
- CRC 开关
- 显式/隐式包头模式
任何一项不同,两边就是"聋子"。
八、进阶:LoRaWAN 是什么
当你不满足于"两个模块互发",想让数据上云、让成千上万的节点接入一个网络时,就需要 LoRaWAN。
传感器节点 ──LoRa──> LoRaWAN网关 ──互联网──> 网络服务器(TTN/ChirpStack) ──> 你的应用/云平台
- 节点:E78、Ra-08、Heltec 板等;
- 网关:多通道 SX1302 基带的设备(几百到几千元),不是普通 LoRa 模块;
- 服务器:免费的 TTN,或自己搭 ChirpStack;
- 节点入网需要 DevEUI / AppEUI / AppKey 三要素;
- 协议栈用开源的 LoRaMac-node 或模块自带固件。
新手建议先把裸 LoRa 点对点玩熟,再上 LoRaWAN。
九、常见问题 FAQ
Q1:我只买一个模块,能收到别人的信号吗?
理论上如果附近有同频段同参数的设备在发,你能收到。但实际中别人参数你不知道,所以自学必须买 2 个。
Q2:433MHz 合法吗?
国内 433.05~434.79MHz 和 470~510MHz 属于免许可微功率频段,但发射功率有限制(一般 ≤50mW/17dBm 或特定条件 1W),买 SRRC 认证过的模块、民用场景实验一般没问题。
Q3:LoRa 能传多远?
标称"10km"是空旷可视 + 高增益天线 + 最低速率的理想值。城市里楼群间一般 1~3km,农田空旷 3~8km,别迷信宣传值。
Q4:能传图片、语音吗?
不能(或极痛苦)。速率只有几百 bps 到几十 kbps,适合小数据包。
Q5:模块发热/烧毁了?
检查:①供电超压(Ra 系列只能 3.3V);②没接天线就长时间大功率发射;③两个模块贴太近 + 满功率发射,可能烧 LNA,测试时拉开几米距离或降功率。
Q6:一对多怎么实现?
串口透传:所有节点同地址同信道,主机发大家都能收(广播);或定点模式逐个寻址。SPI 裸驱:自己设计协议,数据包开头带目标地址字节,收到后比对地址决定处理或丢弃。
Q7:LoRa 和蓝牙/WiFi 能互通吗?
不能,完全不同的物理层。需要网关做协议转换。
Q8:为什么我两个模块距离 1 米反而收不到?
近距离满功率会阻塞接收机。拉开距离,或把发射功率调低。
十、从零到精通的学习路线
第 1 阶段:点亮通信(1 天)
- 买 2 个串口透传模块 + USB 转 TTL,电脑上互发 Hello World;
- 玩懂上位机配置:地址、信道、空中速率、功率、定点/透传。
第 2 阶段:单片机接入(2~3 天)
- STM32/51/ESP32 串口接 LoRa,做一个实际小项目:如 A 板采集温湿度,B 板 OLED 显示;
- 学会处理分包、超时、校验。
第 3 阶段:吃透原理(1 周)
- 换 SPI 裸芯片模块(Ra-02),对着 SX1278 数据手册手写驱动;
- 用 DIO0 中断做收发,改 SF/BW 实测距离和速率的关系。
第 4 阶段:组网(1~2 周)
- 自己设计简单协议:地址帧头 + 数据 + CRC,实现 1 主多从轮询;
- 低功耗:休眠 + 定时唤醒 + CAD 信道检测。
第 5 阶段:LoRaWAN(进阶)
- 网关 + ChirpStack 服务器,节点入网,数据上云。
附:推荐采购清单(新手入门版)
| 物品 | 数量 | 参考价 |
|---|---|---|
| 亿佰特 E220-400T22S(433MHz) | 2 | ~20元×2 |
| USB 转 TTL(CH340) | 2 | ~5元×2 |
| 433MHz 胶棒天线(若模块不送) | 2 | ~3元×2 |
| (进阶)安信可 Ra-02 | 2 | ~12元×2 |
| STM32F103C8T6 最小系统板(若没有) | 2 | ~15元×2 |