第二章:ESP32与LoRa硬件选型
做LoRaWAN网关或节点,第一步就是选硬件。我见过不少朋友一上来就纠结「到底用哪个芯片好」,结果项目拖了两个月还没动工。其实没那么复杂,咱们把ESP32和LoRa模块拆开看,心里就有数了。
2.1 ESP32芯片介绍
ESP32这颗芯片,说实话,是物联网开发者的「万金油」。它集成了Wi-Fi和蓝牙,双核处理器,主频能跑到240MHz。我个人习惯把它当作「主控+通信」二合一方案来用。
为什么选它做LoRaWAN网关?
- 双核架构:一个核跑LoRa协议栈,另一个核处理Wi-Fi或蓝牙,互不干扰。我在项目中遇到过,单核芯片处理LoRa数据包时,Wi-Fi响应就卡顿,换成ESP32后问题迎刃而解。
- 丰富的外设接口:SPI、I2C、UART、ADC一应俱全。LoRa模块通常走SPI接口,ESP32的SPI时钟能到80MHz,完全够用。
- 低功耗模式:深度睡眠时电流仅5μA左右。做电池供电的节点时,这个特性很关键。
- 价格亲民:批量采购不到10块钱,比STM32+Wi-Fi模块的组合便宜不少。
选型建议:做网关用ESP32-WROOM-32(4MB Flash),做节点用ESP32-S3(带低功耗协处理器)。
2.2 常用LoRa射频模块
LoRa模块的核心是SX1276和SX1278。这两颗芯片都是Semtech家的,本质上是同一代产品。区别在哪?说白了就是频段不同。
| 参数 | SX1276 | SX1278 |
|---|---|---|
| 工作频段 | 137-1020MHz | 137-525MHz |
| 最大发射功率 | +20dBm | +20dBm |
| 接收灵敏度 | -148dBm | -148dBm |
| 调制方式 | LoRa/FSK/OOK | LoRa/FSK/OOK |
| 典型应用 | 868MHz(欧洲)、915MHz(北美) | 433MHz(中国)、470-510MHz(中国ISM) |
国内做LoRaWAN,首选SX1278。470-510MHz频段是开放的,不用申请牌照。我记得有一次帮客户做智能水表项目,选了SX1276工作在868MHz,结果发现国内这个频段有干扰,后来全换成SX1278才稳定下来。
市面上常见的模块有:
- E32-433T20S:亿佰特的,便宜好用,带屏蔽罩
- Ra-01:安信可的,兼容SX1278,引脚间距2.54mm,方便面包板
- RFM95W:HopeRF的,做工扎实,但价格稍贵
我的经验:新手先用Ra-01,资料多、社区活跃。等产品定型了再换更便宜的E32系列。
2.3 天线选型与匹配
天线这东西,很多人不重视。你想想看,LoRa模块发射功率才20dBm,天线效率差3dB,相当于功率直接砍半。我见过一个项目,节点和网关距离只有500米,但数据死活传不过去,最后发现是天线焊点虚焊了。
常用天线类型:
- 弹簧天线:体积小,适合节点。但效率低,一般只有30%-50%。
- 棒状天线:增益高(2-3dBi),适合网关。注意要垂直安装。
- PCB天线:成本低,但设计难度大。需要精确的阻抗匹配。
- 陶瓷天线:贴片封装,适合量产。但带宽窄,对地平面敏感。
天线匹配的核心是阻抗匹配。LoRa模块的输出阻抗通常是50Ω,天线也要50Ω。怎么匹配?用网络分析仪测S11参数,调到-10dB以下。没有仪器怎么办?
嗯,这里有个土办法:
// 简单匹配步骤
1. 焊上天线,串一个0Ω电阻
2. 用频谱仪看发射功率
3. 换不同阻值的电阻(1Ω、2.2Ω、4.7Ω)
4. 选功率最大的那个组合
避坑指南:我曾经在批量生产时,发现同一批天线有的好用有的不好用。后来一查,是天线供应商换了材质。所以量产前一定要做来料检验,抽测天线的驻波比。
2.4 电源管理方案
LoRaWAN节点通常是电池供电的。一节18650电池(3.7V,2000mAh),如果设计得好,用一年没问题。但如果电源方案没做好,可能一个月就没电了。
我常用的电源方案:
- 电池+DC-DC降压:效率高(90%以上),适合网关。用TPS5430或MP1584,输入电压范围宽。
- 电池+LDO:纹波小,适合对噪声敏感的射频部分。用AMS1117-3.3,但效率低(60%左右)。
- 锂电池+充电管理:用TP4056充电,DW01保护。适合可充电节点。
节点功耗优化要点:
- 深度睡眠:ESP32进入深度睡眠,电流降到5μA。唤醒后快速处理数据,然后继续睡。
- 间歇性工作:LoRa模块平时处于睡眠模式(电流1μA),需要发送时才唤醒。
- 动态电压调节:ESP32的工作电压可以降到2.3V,但要注意Flash的电压要求。
实战案例:我做的一个温湿度监测节点,用2节AA电池供电,每15分钟上报一次数据。实测平均电流12μA,理论续航3.5年。关键就是让ESP32和SX1278大部分时间都在睡觉。
电源管理还有个容易忽略的点——上电时序。ESP32上电时,如果LoRa模块还没准备好,SPI通信会出错。我习惯在代码里加个延时:
void setup() {
// 先给LoRa模块上电
pinMode(LORA_EN, OUTPUT);
digitalWrite(LORA_EN, HIGH);
delay(100); // 等模块稳定
// 再初始化SPI
SPI.begin();
LoRa.begin(470E6);
}
好了,硬件选型这部分就聊到这。下一章咱们开始动手接线,把ESP32和SX1278连起来,跑通第一个LoRa通信程序。