常见LoRaWAN网关架构
市面上网关硬件架构较多的是:
- ESP8266/ESP32 + SX127X,支持C++/Lua/Python
- RPi Linux + SX127X,支持C++/Python
- RPi Linux + SX1301,支持C++,Web测使用Shell/Python/JS
单通道中,ESP方案最具成本竞争力,但是RPi的普及率和扩展性比较高,可以直接做边缘计算。
USB方案LoRaWAN网关
而我除了提供ESP方案外,还提供USB Dongle方案,即:
Host + USB/SPI + SX127X。BOM成本和ESP方案一致,因为STM32F103和ESP8266/ESP32在一个区间,甚至更低些(写到这里,觉得自己好Low):
- STM32F103 Bluepill,10CNY;
- ESP8266 ESP-12E,12CNY;
- ESP32 WROOM,18CNY;
目标是在任意主机,包括RPi/Android/PC/Mac上都可以即插即用,快速架设网关。
软硬件接口
LoRa USB的接入方式,有点儿类似WiFi/蓝牙,尤其是蓝牙HCI接口。HCI接口将PHY (物理层)/DLL (数据链路层)留给了USB Dongle,数据链路层以上在主机实现。而DLL包括两个子层:
- MAC (媒体访问层)
- LLC (逻辑链路层)
Fig 1: Bluetooth HCI 架构图
还有一种比较大胆的非标准模式,即USB/SPI桥接模式。之所以不使用CP/CH/PL的标准USB/SPI转换IC,是因为:MCU可以即时响应中断,而且可以利用RAM缓存更多报文,而纯粹的转换IC非但做不到,即便做到了,也会对主机OS的实时性有一定要求。
固件架构
固件主要包括:
- Driver for SPI(s)
- LoRa Radio PHY;
- LoRa Radio LoRaMAC;
- Driver for USB/CDC-ACM;
- Host interface.
因为MAC固化在MCU中,选择合适的用户升级模式,是一个蛮重要的选项,包括Bootloader和SWD下载都是如此。从这个角度看,STM32F103C8的资源比较有限。即便是libmaple bootloader都需要F103CB才行。
软件架构
因为要在不同平台上运行,如Windows/Linux/Mac以及Android上。所以采用跨平台语言比较合理,如Python/Lua/JS,如果是C/C++,则需要更多细节需要注意。并在此基础上运行LoRaMAC/LoRaWAN daemon。