
博主在前一篇文章《APRS小玩具:LoRa IGate》介绍了LoRa在APRS中的IGate网关应用,IGate是用来做固定网关的,得先搞好基础设施建设,基建搞好了我们接下来就可以搞五花八门的Tracker应用了,APRS的常见玩法无非:位置信标、短信息、邮件、遥测等,在此应用中都能一一实现。
本文介绍的固件LoRa_APRS_Tracker的和前文LoRa APRS iGate同属一位作者CA2RXU,与全能固件ESP32APRS_LoRa不同的是作者将IGate和Tracker功能分开来做,根据用途不同为两个固件设计了独立的界面,IGate固件偏向于WebUI界面控制,Tracker固件则完全使用按钮和屏幕操作,非常方便。
硬件
项目说明中给出了固件所支持的硬件,与IGate固件类似,可以使用成品LoRa开发板,也可以DIY用ESP32开发板和LoRa模块组装。
博主尝试了两种LoRa开发板和一个DIY组装件,总结了一些心得分享给大家。
图中分别为:TTGO Lora32 v2.1、HELTEC Wireless Tracker、DIY(ESP32 C3 + LoRa模块)

首先应该明白,作为便携Tracker必须具备:GNSS定位、LoRa射频、显示屏、电池管理电路和电池接口,集成所以这些模块的硬件有:TTGO T-Beam v1.2和HELTEC Wireless Tracker,使用这两个开发板的优势在于无需额外连接模块、GPIO配置无需修改,因此可以使用Web在线烧录,简单快捷。
如果打算自己DIY组装的话,建议:
- 选择拥有电源管理功能的ESP32 S3 Supermini,毕竟便携需要连接电池。
- LoRa射频模块博主目前手上只有安信可的RA-01、RA-01s、RA-02,测试发现只有RA-01可以正常使用;但安信可RA-01模块使用的是较老的SX1278 LoRa芯片,在接收灵敏度上不如新版的SX1268芯片,各位如果有测试稳定可用的其它品牌SX1268芯片LoRa模块可以分享一下。
- GNSS定位模块推荐使用中科微ATGM336系列(博主用的18*18mm)或者ublox的。

注意这里有一个坑:
Tracker固件有一个功能是通过蓝牙连接安卓APP APRSDroid发短信息或邮件,官方APP目前仅支持BT Classic(也就是经典蓝牙),而BLE(低功耗蓝牙)暂不支持,没有了APP的加持快乐减半啊。这么一来主控为ESP32 C3和ESP32 S3的开发板就暂时无法使用蓝牙功能了。
综上所述,DIY开发板推荐使用ESP32 WROOM,而成品开发板推荐使用全集成的TTGO T-Beam v1.2(分6M和M8N两个版本,前者是单模GNSS模块,定位效果较差。),装上18650电池就能用;或者Heltec Wireless Tracker(需要外接聚合物电池和开关),还有就是博主目前使用的,也是下文举例用的TTGO Lora32 v2.1。

TTGO Lora32 v2.1没有GNSS模块所以需要外接,模块TX连GPIO34、RX连GPIO12、VCC连3.3v、G连GND;除此之外还要找一个微动开关将GPIO15和GND连接用作菜单键,因为板子上没有BOOT按钮,Tracker固件的日常操作全凭这个按钮。

3D打印外壳借鉴了Printables上的图纸,博主做了修改,顶部增加一块18*18mm的区域放GNSS定位模块,底部用不到的TF卡插槽做了封闭,只留一个MicroUSB口充电和传输数据,需要的友台可以在此下载。
烧录
和IGate固件一样,作者CA2RXU也为Tracker提供了Web在线烧录,博主推荐此方式,原因就是简单快捷无门槛,根据页面提示操作就行,这里就不详细阐述了。
如果你有软件基础,想修改GPIO来扩展功能,或者定制个性化固件,那就需要修改源代码并编译烧录了,编译需要先安装VisualStudioCode+PlatformIO开发环境,参考教程,而后到LoRa_APRS_Tracker项目主页下载代码ZIP包并解压。

打开VisualStudioCode,在PlatformIO扩展下选择“Open Project”

选择刚才解压好的代码文件夹并打开项目

在项目的“variants”目录下找对应型号的“boards_pinout.h”文件,就可以对芯片及引脚进行自定义了。

修改“src”目录下的代码可以实现功能和菜单个性化。
这里有一个“power_utils.cpp”文件需要注意,该文件包含电源管理代码,因为固件通过GPIO35(上图BATTERY_PIN参数)获取到的电池电压不准确,所以我们需要用万用表测量电池的实际电压,然后在代码中增加偏移量,使屏幕显示电压和实际电压保持一致。

改好保存后依次选择:1.板子模块型号 2.对应串口 3.编译 4.烧录

接下来修改工作参数,在项目的“data”目录下找文件“tracker_conf.json”编辑,也可以在烧录完成后进入WebUI里修改(需要将wifiAP段里的active改为true并设置password,首次启动时就可以通过AP接入点进入WebUI了)。
与IGate固件不同的是:Tracker固件可以预定义三组呼号+SSID并设置各自的图标备注及智能信标参数,而且LoRa模块的频率和功率参数也可以预定义三组随时切换,非常方便。
具体的设置项目就不详述了,参见项目WiKi。
这里需要注意的是:频率尽量统一,固件默认433.775MHz是ITU第一区的ISM段频率。博主查阅了相关资料,虽然我国没有划分ISM段,但根据无线电管理条例对微功率设备的使用是无需许可的,前提是符合微功率技术要求,参照要求433.775MHz发射时功率不得超过10mW(包含天线增益),也就是10dBm,所以这里Power建议修改为10以内;
{
"beacons": [ # 三组配置分别为步行、单车、汽车
{
"callsign": "BG9ABC-3",
"gpsEcoMode": false,
"symbol": "[", # 和overlay同为图标参数
"overlay": "/", # 参考aprs.tv/symbols
"micE": "",
"comment": "", # 信标内容
"smartBeaconActive": true, # 是否使用智能信标
"smartBeaconSetting": 0 # 根据速度自动切换
},
{
"callsign": "BG9ABC-3",
"gpsEcoMode": false,
"symbol": ">",
"overlay": "/",
"micE": "",
"comment": "",
"smartBeaconActive": true,
"smartBeaconSetting": 2
},
{
"callsign": "BG9ABC-3",
"gpsEcoMode": false,
"symbol": "b",
"overlay": "/",
"micE": "",
"comment": "",
"smartBeaconActive": true,
"smartBeaconSetting": 1
}
],
"display": {
"showSymbol": true, # 屏幕显示信标图标
"ecoMode": false, # 屏幕省电模式
"timeout": 4, # 开启省电模式后的熄屏延时
"turn180" : false # 180度翻转屏幕
},
"battery": {
"sendVoltage": false, # 信标内容包含电池电压
"voltageAsTelemetry": true,
"sendVoltageAlways": false # 每个信标中都包含电压
},
"other": {
"simplifiedTrackerMode": false,
"sendCommentAfterXBeacons": 10,
"path": "WIDE1-1", # 信标转发路径
"nonSmartBeaconRate": 10, # 未开启智能信标的发送间隔
"rememberStationTime": 60, # 信标接收列表的保存时长
"standingUpdateTime": 15, # 位置未变化时的发送间隔
"sendAltitude": false, # 信标内容包含海拔
"disableGPS": false
},
"winlink": {
"password": "ABCDEF" # 需要申请winlink.org
},
"bme": {
"active": false, # 激活已连接的bme280传感器
"temperatureCorrection": 0.0,
"sendTelemetry": false # 传感器数据通过遥测信标发送
},
"notification": { # 外接指示灯和蜂鸣器的设置
"ledTx": false,
"ledTxPin": 13,
"ledMessage": false,
"ledMessagePin": 2,
"ledFlashlight": false,
"ledFlashlightPin": 14,
"buzzerActive": false,
"buzzerPinTone": 33,
"buzzerPinVcc": 25,
"bootUpBeep": false,
"txBeep": false,
"messageRxBeep": false,
"stationBeep": false,
"lowBatteryBeep": false,
"shutDownBeep": false
},
"lora": [ # 三组射频配置 在菜单中切换
{
"frequency": 433775000,
"spreadingFactor": 12, # LoRa射频参数 保持默认
"signalBandwidth": 125000, # LoRa射频参数 保持默认
"codingRate4": 5, # LoRa射频参数 保持默认
"power": 10 # 功率dBm 建议10以内
},
{
"frequency": 434855000,
"spreadingFactor": 9,
"signalBandwidth": 125000,
"codingRate4": 7,
"power": 10
},
{
"frequency": 439912500,
"spreadingFactor": 12,
"signalBandwidth": 125000,
"codingRate4": 5,
"power": 10
}
],
"bluetooth": {
"type": 1, # 0.iPhone 1.Android 2.BLE Text
"active": true # 始终打开蓝牙
},
"pttTrigger": { # 联动外部电台或功放
"active": false,
"io_pin": 4,
"preDelay": 0,
"postDelay": 0,
"reverse": false
},
"wifiAP": { # 修改文件配置或WebUI配置二选一
"active": false, # 第一次启动时打开AP接入点和WebUI
"password": "1234567890" # AP接入点密码
}
}
无论“tracker_conf.json”文件改动与否,都要将其上传。左侧选择PlatformIO蚂蚁图标,点击“Upload Filesystem Image”上传工作参数到板子。

完成后按RST重启,屏幕上看到呼号就说明上传的设置生效了,如果开启了wifiAP选项此时就可以搜索到名为“LoRaTracker-AP”的WiFi接入点,浏览器输入IP打开WebUI修改配置,此处不做详述,参见项目WiKi。
操作

屏幕显示内容丰富简洁大方,定位成功会显示校准后的时间(UTC)、经纬度、QTH、卫星数量、海拔、速度、近一次收到的信标或短消息,电池电压及百分比。
单击菜单按钮手动发射信标(卫星数必须大于4),长按可以在三个预定义呼号配置间切换,双击打开/关闭主菜单,可以收发短信息和Winlink/Mail(需要连接I2C键盘或者蓝牙APP)、查看信标接收列表、发送天气预报请求(国内不好用)、修改频率等。在菜单界面单击向下翻、长按确定、双击返回,还是蛮好操作的。

接下来要说的蓝牙APP功能博主非常喜欢,这也就是前文慎重选择硬件的原因。
首先确保开发板支持BT经典蓝牙(官方版本APRSDroid目前不支持BLE低功耗蓝牙),且“tracker_conf.json”或WebUI中开启了蓝牙,通过手机蓝牙设置完成配对。
打开安卓APP APRSDroid,在“偏好设置”里选择“连接首选项 ”,协议选择“明文TNC2”,连接类型为蓝牙SPP,TNC蓝牙设备选择已配对的Tracker,其余默认即可。

设置完成后点击右上角“信息”创建一条Message

回到主页点击“发送位置“即可发射Message(关掉APP的GPS定位权限就不会额外发送位置信标了),整个发送过程非常优雅:
A发送消息 –> B接收解码 –> B发送回执 –> A接收回执

博主最近出门兜里一直装着LoRa Tracker,一有空就拿出来测试发射接收,实际效果也令人满意,在海拔较高的地方测试最远传输距离已经达到了80公里。

下一步准备在市区部署一些LoRa IGate/Digi节点,根据覆盖区域规划好各自的转发规则,研究一下LoRa Message和Winlink Mail。

先留言再阅读,一起长安携神器云游
要好好学习学习,博主石榴籽!
牛逼,抄作业已完成。
羡慕了
“只有RA-01可以正常使用”
可以试试把tracker_config.json里的pin全部改成-1,看代码应该是完全可以兼容多种模块的
“APP目前不支持BLE低功耗蓝牙”
有个folk可以试试
https://github.com/ge0rg/aprsdroid/issues/124#issuecomment-2477453541
01和02的模块是一样的,区别只在于有无IPEX天线座,我尝试了RA-02发现不行,也有可能是手上的这个模块有问题。
之前看到过这个修改版APRSDroid的视频,TNC设置里有BLE选项,但是不知为何APP总提示装不上,只能期待官方加入BLE的支持,毕竟Meshtastic都支持。
感谢建议!
LILYGO分 Paxcounter 和Disaster-Radio,我该选哪个?
不清楚,我买的那家只有一种。
感谢版主。
大佬咨询下,我的一直卡这2个界面,请问是哪里出错了?感谢。
PS:已连接好按钮和GPS模块也接了电池。望请大佬指点,万分感谢。
用官方网页方式刷入的话首次启动需要手机连WiFiAP然后浏览器输入192.168.4.1进Web页面设置参数,加了按键的话建议用编译方式刷固件,刷之前要把按键的GPIO0加入到代码里。
在最新固件中作者已经把“BATTERY_PIN”按键参数加入到代码里了,默认为GPIO15,以后无需修改。
博文已做更新
添加收藏了,谢谢版主分享!以后学习您的文章自己动手搓一个 🙂