LoRa(Long Range)是一种低功耗远距离无线传输技术,通过线性调频扩频能够在相同功耗条件下比其他无线方式传播更远的距离。博主最近一直寻找LoRa在业余无线电方面的应用,中途发现了很多好的项目,其中多数用于APRS领域。相对于传统APRS而言,LoRa有着太多的优势:首先低功耗使得便携设备体积更小续航更长;其次远距离通信能让信标和Message传的更远;再加上ESP32的低成本和高可玩性,一个字:香!
虽然在传输技术方面LoRa APRS有别于传统APRS,但在编码方面他们都遵循AX.25协议,且接入网络同为APRS-IS,所以我们完全可以向看待传统APRS来看待他。博主以往的文章中对APRS的介绍大致分为:移动端Tracker和固定端IGate/Digipeater,本文就先来介绍如何使用LoRa打造一个APRS IGate。
所谓“要致富先修路”,因此基建尤为重要,前期有了IGate(网关)和Digipeater(中继)的覆盖,后期Tracker/Message/Telemetry(便携)的测试和通信才有保障,这样才能吸引更多的爱好者研究LoRa。
本文使用的是国外爱好者CA2RXU开发的LoRa APRS iGate/Digipeater固件,为OE5BPA的一个分支,在其基础上做了改进并添加了很多功能。话不多说,开搞。
硬件
查阅项目Github的说明可以看到固件所支持的硬件,推荐使用TTGO Lora32 v2.1和Heltec Lora32 v3这两个开发板,成品开发板的好处就是Lora模块、显示屏、按键和电源管理这些都集成在ESP32板子上,体积小,最重要的是固件提供了Web在线烧录,省时省力。
当然也可以单独购买ESP32和Lora模块自己组装,这里博主推荐ESP32 C3 supermini和安信可RA-01 Lora模块,使用杜邦线连接。
下图是本地HAM帮忙画的转接板。
由于固件多为成品开发板提供,自己DIY的话需要使用Visual Studio Code修改GPIO等配置代码,编译后刷入。
下文我们逐一介绍
烧录
选择成品开发板的友台们可以直接前往Web在线烧录,将开发板连到电脑USB口(有些板子需要按住Boot键开机才能进入下载模式),选择板子型号和COM口号。
点击“FLASH FIRMWARE”没有弹出串口选择框的话换个浏览器试试,推荐Chrome。
刷入完成后按RST键重启,看到Logo说明刷入成功。此时会开启一个名为“NOCALL-10 AP”的WiFi接入点,默认密码“1234567890”,连入后打开浏览器输入IP“192.168.4.1”即可访问WebUI进行配置。
如果是DIY组装的话一般需要自己编译,首先安装VisualStudioCode+PlatformIO开发环境,参考教程,然后到LoRa_APRS_iGate项目主页下载代码包并解压。
打开VisualStudioCode,在PlatformIO扩展下选择“Open Project”
选择刚才解压好的代码文件夹并打开项目
在项目的“src”目录下找文件“boards_pinout.h”编辑,找到主控对应型号,根据LoRa模块和主控连接的GPIO针脚号修改配置。
或者按照配置给出的GPIO连接LoRa模块,这样就不用每次改配置文件了。
改好后依次选择:1.板子型号 2.对应串口 3.编译 4.烧录
接下来修改工作参数,在项目的“data”目录下找文件“igate_conf.json”编辑,其中多数选项在WebUI里就能找到,无需修改,留着后面WebUI里修改也行。
{ "callsign": "BH9ABC-10", # 呼号+SSID "wifi": { "autoAP": { "password": "1234567890", # AP接入点密码 "powerOff": 10 }, "AP": [] # AP名称 留空即可 }, "beacon": { "latitude": 34.2510, # 纬度 "longitude": 108.9106, # 经度 "comment": "LoRa APRS", # 信标内容 "interval": 10, # 自身信标上报间隔 分钟 "overlay": "L", # 图标 "symbol": "#", # 图标 "path": "WIDE1-1", # 中继转发 默认即可 "sendViaAPRSIS": true, # 通过网络上传自身信标 "sendViaRF": false # 通过LoRa射频发射自身信标 }, "aprs_is": { "active": true, # IGate必须连APRS-IS 此项激活 "passcode": "12345", # APRS-IS认证码 "server": "china.aprs2.net", # APRS-IS服务器 "port": 14580, # APRS-IS服务器端口 "filter": "m/10", # APRS-IS读取过滤器 "messagesToRF": false, # IS-RF短信息转发 "objectsToRF": false # IS-RF位置信标转发 }, "digi": { "mode": 0 # RF-RF中继功能 }, "lora": { # LoRa频率和扩频参数等 默认即可 "txFreq": 433775000, "rxFreq": 433775000, "spreadingFactor": 12, "signalBandwidth": 125000, "codingRate4": 5, "power": 10, # 射频发射功率 "txActive": true, # 纯接收网关可以关掉发射 "rxActive": true }, "display": { "alwaysOn": true, # 屏幕常亮 "timeout": 4, # 非常亮时的超时秒数 "turn180": false # 屏幕旋转180度 上下颠倒 }, "battery": { # 电池电压遥测 默认即可 "sendInternalVoltage": false, "monitorInternalVoltage": false, "internalSleepVoltage": 3.0, "sendExternalVoltage": false, "externalVoltagePin": 34, # 电压检测针脚 "monitorExternalVoltage": false, "externalSleepVoltage": 10.9, "voltageDividerR1": 100.0, "voltageDividerR2": 27.0 }, "bme": { "active": false, # BME280传感器 "heightCorrection": 0, "temperatureCorrection": 0.0 }, "syslog": { # 远程日志存储 "active": false, "server": "192.168.0.1", "port": 514 }, "tnc": { "enableServer": false, # TCP TNC Server "enableSerial": false, # 串口TNC "acceptOwn": false }, "ota": { # 在线升级 "username": "", "password": "" }, "webadmin": { # WebUI登录认证 "username": "admin", "password": "" }, "other": { "rememberStationTime": 30, # 所接收信标保存时间 分钟 "lowPowerMode": false, "lowVoltageCutOff": 0, "backupDigiMode": false, "rebootMode": false, "rebootModeTime": 6 }, "personalNote": "" }
无论“igate_conf.json”文件改动与否,都要将其上传。左侧选择PlatformIO蚂蚁图标,点击“Upload Filesystem Image”上传工作参数到板子。
完成后按RST重启,看到呼号就说明上传的设置生效了,博主使用的ESP32 C3有两个按键Boot和RST,目前没发现Boot键有什么用途。不过屏幕显示还是蛮详细的,包括WiFi连接状态、APRS-IS连接状态、IP地址、单位时间内接收的信标数量、最近一次信标的内容及信号强度距离等。
配置
浏览器输入屏幕显示的IP可进入WebUI界面,菜单栏包括:配置、OTA在线升级、备份还原、重启,最后一项接收列表中的信号强度RSSI和信噪比SNR在日常测试时可作为参考。
基本信息中的图标只提供了四种可选,要使用其它图标的话需要在上文“igate_conf.json”文件中定义overlay和symbol,可以参照https://aprs.tv/symbols表格选择。
经纬度可以使用https://aprs.tv左侧的坐标拾取工具来获得WGS-84 dd.dddd格式坐标。
接下来是主要功能的配置
如果只作为纯接收网关的话,打开“APRS-IS connection”;而“APRS-IS Server”则随意,用中国服务器组或aprs.tv均可;Passcode通过https://apps.magicbug.co.uk/passcode/获取;最后选择“Send our beacon to APRS-IS”通过网络上报自身信标,默认间隔10分钟。
如果是脱网纯中继的话,关闭APRS-IS有关选项,打开“Send beacon via RF”通过射频发射自身信标;中继路径根据本地规划选择WIDE1或WIDE2+WIDE1。
除上述二者之外还有一种IS-RF转发模式,就是通过网络从APRS-IS拉取指定信标(需要配合Filter过滤规则拉取,语法参见https://www.aprs-is.net/javAPRSFilter.aspx),然后通过射频RF发射出去,此时需要打开“Message to RF”或“Objects to RF”,分别为短信息转发和位置信标转发。
接下来是LoRa模块设置,通常情况下是发射TX和接收RX都打开,如果纯接收网关的话可以关掉TX;频率尽量统一使用433.775MHz,毕竟我国ISM段是免执照使用,不过前提条件是功率不超过10mW,也就是10dBm以内,这里需要修改一下Power;带宽和扩频因子默认的配置就可以达到低速率最远距离效果,保持不变即可。
再往后就是遥测信息,推荐使用BME280传感器,在“boards_pinout.h”文件里查看编辑对应GPIO针脚。
Syslog远程日志存储功能也是比较有用的,我们可以把信标接收情况存储在局域网群晖里,配合LCD4Linux之类的应用汇总显示在一个小屏幕上,或者配合地图API开发一个更直观的接收分布图供日常测试使用。
最后的TNC功能也是可玩性十足,博主之前的文章:《Direwolf手动发射功能》和《Direwolf LCD显示屏》中的功能就是通过KISS协议的TNC server服务8001端口实现的;而Serial KISS串口TNC功能目前还未作测试,博主猜想可能是通过串口和电台互动之类的功能吧。
到此为止设置就基本完成,可以投入使用了。
总结
通过最近一段时间的使用,博主感觉CA2RXU LoRa IGate这个固件的功能还是很强大的,而且稳定性很好,作者CA2RXU修补更新也很勤快,推荐大家使用。
除此之外还有一款固件ESP32APRS_LoRa也是值得一试,没错,就是博主之前文章《APRS小玩具:ESP32IGate》介绍的泰国作者HS5TQA所作,ESP32APRS_LoRa固件继承了ESP32IGate固件的大部分WebUI和功能,除IGate模式和Digi外还包含Tracker,可谓全能,而且屏幕显示华丽内容丰富。不过目前貌似处在测试版本,稳定性有待观察。
先留言再阅读,一起长安组网