**项目介绍 **
本项目是ESP32+SX1302,做成LoRaWAN 多通道GW,支持packet-forward
开发环境
IDF:V5.2.1
IDE:VSCode+ESP-IDF插件
PCBA****示意图
**固件烧录 **
**接线 **
1.烧录程序时接这个口,ESP32烧程序是先让设备进入烧录模式(先按住BOOT0按键,然后按下EN按
键,此时ESP32重启,进入烧录模式,然后松开BOOT0按键,ESP32停留在烧录模式)
Note:
- 如果使用ESP-PROG,板上带有自动进入boot模式的功能,烧录时可以不用按按键进入boot模式
**烧录软件 **
1.下载flash_download_tool_3.9.6_2
2.选择芯片和下载方式
3.配置下载地址和bin文件,点击start开始下载
**配置 **
**WEB ****配置 **
设备上电会进入AP模式
设备内置一个web端,可用于对设备进行配置
设备首次上电WIFI会进入AP模块,AP模式下设备配置如下
AP模式下WIFI配置
SSID:LoRaGW-xxxxxx
password:loragwwifi
xxxxxx为SN的后6位
WEB端地址:192.168.4.1用户需要再配置网关的区域、频点、网关ID、packet-forward转发地址,网关ID默认会根据MAC地址自
动生成,可以不用修改
网关的频点是通过修改radio0和radio1来实现的,8个频点和radio0,radio1的映射,不同地区会不一样
**命令行配置 **
设备支持命令行进行配置,请使用putty或XSHELL进行
串口配置为115200,8,N,1
CN470(通常radio0与radio1相差800KHZ,默认radio=470600000Hz,radio1=471400000Hz)
freq0 = RADIO0-300KHz,默认为470.3MHz
freq1 = RADIO0-100KHz,默认为470.5MHz
freq2 = RADIO0+100KHz,默认为470.7MHz
freq3 = RADIO0+300KHz,默认为470.9MHz
freq4 = RADIO1-300KHz,默认为471.1MHz
freq5 = RADIO1-100KHz,默认为471.3MHz
freq6 = RADIO1+100KHz,默认为471.5MHz
freq7 = RADIO1+300KHz,默认为471.7MHz
EU868(默认radio=867500000Hz,radio1=868500000Hz)
freq0 = RADIO1-400KHz 默认为868.1MHz
freq1 = RADIO1-200KHz 默认为868.3MHz
freq2 = RADIO1 默认为868.5MHz
freq3 = RADIO0-400KHz 默认为867.1MHz
freq4 = RADIO0-200KHz 默认为867.3MHz
freq5 = RADIO0 默认为867.5MHz
freq6 = RADIO0+200KHz 默认为867.7MHz
freq7 = RADIO0+400KHz 默认为867.9MHz
US915(默认radio=904300000Hz,radio1=905000000Hz) //US915_1
freq0 = RADIO0-400KHz 默认为903.9MHz
freq1 = RADIO0-200KHz 默认为904.1MHz
freq2 = RADIO0 默认为904.3MHz
freq3 = RADIO0+200KHz 默认为904.5MHz
freq4 = RADIO1-300KHz 默认为904.7MHz
freq5 = RADIO1-100KHz 默认为904.9MHz
freq6 = RADIO1+100KHz 默认为905.1MHz
freq7 = RADIO1+300KHz 默认为905.3MHz
chan_LoRa_Std = radio0+300Khz,默认为904.6MHz
**命令行配置 **
设备支持命令行进行配置,请使用putty或XSHELL进行
串口配置为115200,8,N,1
ESXP1302_GW>
ESXP1302_GW> help
pkt_fwd [-h] [--restore] [--host=<UDP Host>] [--port=<UDP Port>] [--gwid=
<gateway id>]
ESP32 packet forwarder based on sx1302_hal
--restore clean NVS config
-h, --help print help
--host=<UDP Host> UDP Host
--port=<UDP Port> UDP Port
--gwid=<gateway id> Gateway Id
ifconfig如上,可通过设备pkt_fwd命令进行设置
pkt_fwd,用于配置设备pkt_fwd相关的信息
ifconfig,用于查看所有网卡的信息
reboot,用于设备重启
help,查看帮助说明
**LoRaWAN NS **
测试用NS,域名:lora.ansitw.com,IP:106.52.124.231
WEB端地址:106.52.124.231:8080
包转发地址:
printf network status
reboot
reboot the system
help [<string>]
Print the summary of all registered commands if no arguments are given,
otherwise print summary of given command.
<string> Name of command
如上,可通过设备pkt_fwd命令进行设置
pkt_fwd,用于配置设备pkt_fwd相关的信息
ifconfig,用于查看所有网卡的信息
ESXP1302_GW>
ESXP1302_GW> ifconfig
=========ifconfig===========
--------if:ppp prio:20--------
link: NET_UP
ip: 10.145.122.176
mask: 255.255.255.255
gw: 10.64.64.64
dns1: 218.85.157.99
dns2: 218.85.157.99
IMEI: 860761079936981
IMSI: 460115210945489
ICCID: 89860322245923849833
CSQ/BER: 23/0
--------if:eth prio:50--------
link: LINK_DOWN/NET_DOWN
MAC: 66:e8:33:49:ba:47
ip: 0.0.0.0
mask: 0.0.0.0
gw: 0.0.0.0
dns1: 218.85.157.99
dns2: 218.85.157.99
--------if:ap prio:10--------
MAC: 64:e8:33:49:ba:45
ip: 192.168.4.1
ssid: esp32
pswd: esp32wifi
=========ifconfig end===========
reboot,用于设备重启
help,查看帮助说明
**LoRaWAN NS **
测试用NS,域名:lora.ansitw.com,IP:106.52.124.231
WEB端地址:106.52.124.231:8080
包转发地址:
printf network status
reboot
reboot the system
help [<string>]
Print the summary of all registered commands if no arguments are given,
otherwise print summary of given command.
<string> Name of command
ESXP1302_GW>
ESXP1302_GW> ifconfig
=========ifconfig===========
--------if:ppp prio:20--------
link: NET_UP
ip: 10.145.122.176
mask: 255.255.255.255
gw: 10.64.64.64
dns1: 218.85.157.99
dns2: 218.85.157.99
IMEI: 860761079936981
IMSI: 460115210945489
ICCID: 89860322245923849833
CSQ/BER: 23/0
--------if:eth prio:50--------
link: LINK_DOWN/NET_DOWN
MAC: 66:e8:33:49:ba:47
ip: 0.0.0.0
mask: 0.0.0.0
gw: 0.0.0.0
dns1: 218.85.157.99
dns2: 218.85.157.99
--------if:ap prio:10--------
MAC: 64:e8:33:49:ba:45
ip: 192.168.4.1
ssid: esp32
pswd: esp32wifi
=========ifconfig end===========CN470:106.52.124.231:1700
EU868:106.52.124.231:1701
US915_0:106.52.124.231:1702
US915_1:106.52.124.231:1703
**网关测试 **
**发送测试 **
test_hal_tx -r 1250 -f 506.5 -s 12 --pwid 22 -n 10
-r:指定射频前端芯片为1250
-f:发送的频点(MHz)
-s:SF
--pwid 22:
**接收测试 **
test_hal_rx -r 1250 -a 475.5 -b 476.5
*WEB***配置 **
**总体概述 **
GW Info,网关信息查看
Configuration,网关配置查看和修改
Maintenance,维护页(设备升级、恢复出厂设备)
配置
WIFI STA,支持WIFI接入点方式连接网络
Management MQTT,用来配置管理通道的MQTT参数
支持ThingsBoard
支持标准MQTT
**验收测试方法 **
烧录程序,可正常烧录
烧录后,重新上电,RUN指示灯,0.5s间隔闪烁
连接设备的WIFI热点(ssid:LoRaGW-xxxxxx 密码:loragwwifi),浏览器输入(http://192.168.4.1),
可看到设备的配置页面
测试以太网,将设备接入路由器,设备能以DHCP方式获取到IP,说明以太网功能正常
设备联网后,SX1302和GNSS模块启动,将设备的GWID(GWID默认为SN)录入到NS服务器,可在
NS服务器上看到网关上线,说明SX1302功能正常
插入4G SIM,拔掉网线,4G正常获取到IP地址,说明4G功能正常
将GNSS放到室外有GNSS信号的地方,可以获取到经纬度和海拔,说明GNSS功能正常
至此,各硬件功能都验证完成,测试通过
**网关配置通道 **
*标准MQTT*通道 **
配置通道通过MQTT进行数据交互,其中设备发往服务器的通道称为上行通道,服务器发往设备的通道
称为下行通道
其中:
上行Topic:up/gw/{SN}/0
下行Topic:dn/gw/{SN}/0
例如网关的SN:64e833fffe5909d8,那么上下行通道分别为
上行Topic:up/gw/64e833fffe5909d8/0
下行Topic:dn/gw/64e833fffe5909d8/0
网关会周期性地通过上行通道发送周期心跳包
服务器也可以通过下行通道,向网关下发数据周期包
{
"pkt": "periodUplink",
"GWInfo": {
"SN": "64e833fffe5909d8",
"SoftwareVersion": "V1.0.1",
"HardwareVersion": "V1.0.0"
},
"Staus": {
"GPSValid": true,
"Latitude": 24.000000,
"Longitude": 120.000000,
"Altitude": 0.000000,
"Cellular": {},
"Ethernet": {},
"WIFI": {
"Link": "NET_UP",
"IPMode": "DHCP",
"MAC": "64:e8:33:59:09:d8",
"IP": "192.169.4.12",
"Mask": "255.255.255.0",
"GW": "192.169.4.1",
"DNS1": "192.169.4.1",
"DNS2": "192.169.4.1"
}
},
"Configuration": {
"STA": {
"Enable": false,
"SSID": "",
"Password": ""
},
"Management": {
"MQTT": {
"Enable": true,
"URL": "mqtt://broker.emqx.io",
"ClientID": "64e833fffe5909d8",
"UplinkTopic": "up/gw/64e833fffe5909d8/0",
"DownlinkTopic": "dn/gw/64e833fffe5909d8/0"
}
},
"LoRaWAN": {
"Region": "cn470",
"Radio0": "470600000",
"Radio1": "enable",
"NsHost": "lora.ansitw.com",
"NsPort": "1700",
"GatewayID": "64e833fffe5909d8"
}
}
}**更改网关配置 **
直接修改Configuration中的内容,下发下来即可
{
"pkt": "downlink",
"Configuration": {
"STA": {
"Enable": false,
"SSID": "",
"Password": ""
},
"Management": {
"MQTT": {
"Enable": true,
"URL": "mqtt://broker.emqx.io",
"ClientID": "64e833fffe5909d8",
"UplinkTopic": "up/gw/64e833fffe5909d8/0",
"DownlinkTopic": "dn/gw/64e833fffe5909d8/0"
}
},
"LoRaWAN": {
"Region": "cn470",
"Radio0": "470600000",
"Radio1": "enable",
"NsHost": "lora.ansitw.com",
"NsPort": "1700",
"GatewayID": "64e833fffe5909d8"
}
}
}
回复:
{
"pkt": "downlinkRespone",
“result”:"success"
}
重启
{
"pkt": "downlink",
"cmd": {
"reboot": true
}
}
回复
{
"pkt": "downlink",
"Configuration": {
"STA": {
"Enable": false,
"SSID": "",
"Password": ""
},
"Management": {
"MQTT": {
"Enable": true,
"URL": "mqtt://broker.emqx.io",
"ClientID": "64e833fffe5909d8",
"UplinkTopic": "up/gw/64e833fffe5909d8/0",
"DownlinkTopic": "dn/gw/64e833fffe5909d8/0"
}
},
"LoRaWAN": {
"Region": "cn470",
"Radio0": "470600000",
"Radio1": "enable",
"NsHost": "lora.ansitw.com",
"NsPort": "1700",
"GatewayID": "64e833fffe5909d8"
}
}
}
{
"pkt": "downlinkRespone",
“result”:"success"
}
{
"pkt": "downlink",
"cmd": {
"reboot": true
}
}**升级 **
回复(收到升级命令)
*ThingsBoard MQTT***通道 **
配置通道通过MQTT进行数据交互,网关发送数据给云平台称为uplink,云平台发送命令给网关称为
downlink
有两条链路:
- 网关主动发送数据
telemetry_uplink
设备每隔一段时间会发送心跳包
设备在上电和配置信息更改时,会发送配置信息
- 云平台发送命令给网关
request_downlink,云平台发送命令给网关
respone_uplink,网关回复数据给云平台
其中:
telemetry_uplink_topic:v1/devices/me/telemetry //支持修改,支持修改的字符
串中有 ${SN},例如:devices/${SN}/telemetry
request_downlink_topic:v1/devices/me/rpc/request/${request_id} //支持修改,支持修改
的字符串中有 ${SN},例如:devices/${SN}/rpc/request
respone_uplink_topic: v1/devices/me/rpc/response/${request_id} //支持修改,支持修改
的字符串中有 ${SN},例如:devices/${SN}/rpc/response
例如网关本次消息的 request_id:10001,那么上下行通道分别为
telemetry_uplink_topic:v1/devices/me/telemetry
request_downlink:v1/devices/me/rpc/request/10001
respone_uplink: v1/devices/me/rpc/response/10001
{
"pkt": "downlinkRespone",
“result”:"success"
}
{
"pkt": "downlink",
"cmd": {
"upgrade": "http://192.169.4.53/esp32_sx1302.bin"
}
}
{
"pkt": "downlinkRespone",
“result”:"success"
}**网关信息包 **
设备在上电、配置被修改时发送
设备每1h,发送一次
{
"ts":1451649600512,
"values":
{
"pkt":"gw_info",
"SN":"64e833fffe5909d8", //设备序列号
"swver":"V1.0.1", //软件版本
"hwver":"V1.0.0", //硬件版本
"longitude": "24.56789", //经度
"latitude": "118.56789", //纬度
"altitude": "78.965", //海拔
"stat_cell_link":"", //stat是status的缩写,stat开头的都是只读的,cell是
cellular的缩写,这个是蜂窝的链路状态,NET_UP表示连接成功,NET_DOWN表示未连接上
"stat_cell_ip": "", //蜂窝获取到的IP
"stat_cell_IMEI": "", //蜂窝模组的IMEI
"stat_cell_IMSI": "", //SIM卡的IMSI
"stat_cell_ICCID": "", //SIM卡的ICCID
"stat_cell_CSQ": "", //蜂窝信号强度
"stat_eth_link": "", //ETH是ethernet的缩写,这个是以太网的链路状态,样式
为LINK_UP/NET_UP,其中LINK_UP表示网线有插入,LINK_DOWN表示网线未插入,NET_UP表示连接成功,
NET_DOWN表示未连接上
"stat_eth_mac": "", //以太网的MAC地址
"stat_eth_ip": "", //以太网的IP
"stat_eth_mask": "", //以太网的子网掩码
"stat_eth_gw": "", //以太网的网关
"stat_eth_dns1": "", //以太网的DNS1
"stat_eth_dns2": "", //以太网的DNS2
"stat_sta_link": "", //STA是wifi station的缩写,是指设备以station方式接
入WIFI AP,这个是WIFI的链路状态,NET_UP表示连接成功,NET_DOWN表示未连接上
"stat_sta_mac": "", //WIFI的MAC地址
"stat_sta_ip": "", //WIFI的IP
"stat_sta_mask": "", //WIFI的子网掩码
"stat_sta_gw": "", //WIFI的网关
"stat_sta_dns1": "", //WIFI的DNS1
"stat_sta_dns2": "", //WIFI的DNS2
"conf_sta_enable":"", //conf是cofiguration的缩写,sta是station的缩写,
sta_enable表示是否启用WIFI station,true表示启用,false表示不启用
"conf_sta_ssid":"", //配置的接入的wifi的ssid
"conf_sta_password":"", //配置的接入的wifi的密码
"conf_lorawan_region": "", //配置的LoRaWAN的region
"conf_lorawan_radio0":"", //配置的LoRaWAN的radio0
"conf_lorawan_radio1":"", //配置的LoRaWAN的radio1
"conf_lorawan_nshost":"", //配置的LoRaWAN的NS的host
"conf_lorawan_nsport":"", //配置的LoRaWAN的NS的port
"conf_lorawan_gatewayid":"", //配置的LoRaWAN的gatewayid
"mang_mqtt_url": "mqtt://thingsboard.com:6883", //mang是management的缩写,
此项为管理通道的MQTT URL,格式为mqtt://host:port
"mang_mqtt_clientid": "64e833fffe5909d8",//此项为MQTT clientID
"mang_mqtt_username": "", //此项为MQTT username
"mang_mqtt_password": "", //此项为MQTT password
"mang_mqtt_telemetry_topic": "v1/devices/me/telemetry", //此项目
thingsBoard的telemetry主题**心跳包 **
**更改网关配置 **
直接修改Configuration中的内容,下发下来即可
回复:
"mang_mqtt_request_topic": "v1/devices/me/rpc/request", //此项为
thingsBoard的RPC request主题
"mang_mqtt_respone_topic": "v1/devices/me/rpc/response", //此项为
thingsBoard的RPC respone主题,会再拼接request_id
}
}
**心跳包 **
{
"ts":1451649600512,
"values":{
"pkt":"heartbeat",
"SN":"64e833fffe5909d8"
}
}
**更改网关配置 **
直接修改Configuration中的内容,下发下来即可
{
"method": "modify_configuration", //gateway_reboot 是命令关键字
"params": {
"sta_enable": true,
"sta_ssid": "",
"sta_password": "",
"mang_mqtt_url": "mqtt://thingsboard.com:6883",
"mang_mqtt_clientid": "64e833fffe5909d8",
"mang_mqtt_username": "",
"mang_mqtt_password": "",
"mang_mqtt_telemetry_topic": "v1/devices/me/telemetry",
"mang_mqtt_request_topic": "v1/devices/me/rpc/request", // 此路径仅为
部分,实际发送时需要拼接一个 request_id
"mang_mqtt_respone_topic": "v1/devices/me/rpc/response", // 此路径仅为
部分,实际发送时需要拼接一个 request_id
"lorawan_region": "cn470",
"lorawan_radio0": "470600000",
"lorawan_radio1": "471400000",
"lorawan_nshost": "lora.ansitw.com",
"lorawan_nsport": "1700",
"lorawan_gatewayid": "471400000"
}
}
回复:
{
"result": "success",
"resp": { // 有返回结果的,放在此结构体里
"method": "modify_configuration"
}
}
查询网关状态及配置
{
"method": "query_gw_info", //gateway_reboot 是命令关键字
"params": { }
}
回复
{
"result": "success",
"resp": {
"method": "query_gw_info",
"pkt":"gw_info",
"SN":"64e833fffe5909d8", //设备序列号
"swver":"V1.0.1", //软件版本
"hwver":"V1.0.0", //硬件版本
"longitude": "24.56789", //经度
"latitude": "118.56789", //纬度
"altitude": "78.965", //海拔
"stat_cell_link":"", //stat是status的缩写,stat开头的都是只读的,cell是
cellular的缩写,这个是蜂窝的链路状态,NET_UP表示连接成功,NET_DOWN表示未连接上
"stat_cell_ip": "", //蜂窝获取到的IP
"stat_cell_IMEI": "", //蜂窝模组的IMEI
"stat_cell_IMSI": "", //SIM卡的IMSI
"stat_cell_ICCID": "", //SIM卡的ICCID
"stat_cell_CSQ": "", //蜂窝信号强度
"stat_eth_link": "", //ETH是ethernet的缩写,这个是以太网的链路状态,样式
为LINK_UP/NET_UP,其中LINK_UP表示网线有插入,LINK_DOWN表示网线未插入,NET_UP表示连接成功,
NET_DOWN表示未连接上
"stat_eth_mac": "", //以太网的MAC地址
"stat_eth_ip": "", //以太网的IP
"stat_eth_mask": "", //以太网的子网掩码
"stat_eth_gw": "", //以太网的网关
"stat_eth_dns1": "", //以太网的DNS1
"stat_eth_dns2": "", //以太网的DNS2
"stat_sta_link": "", //STA是wifi station的缩写,是指设备以station方式接
入WIFI AP,这个是WIFI的链路状态,NET_UP表示连接成功,NET_DOWN表示未连接上
"stat_sta_mac": "", //WIFI的MAC地址
"stat_sta_ip": "", //WIFI的IP
"stat_sta_mask": "", //WIFI的子网掩码
"stat_sta_gw": "", //WIFI的网关
"stat_sta_dns1": "", //WIFI的DNS1
"stat_sta_dns2": "", //WIFI的DNS2
"conf_sta_enable":"", //conf是cofiguration的缩写,sta是station的缩写,
sta_enable表示是否启用WIFI station,true表示启用,false表示不启用
"conf_sta_ssid":"", //配置的接入的wifi的ssid
"conf_sta_password":"", //配置的接入的wifi的密码
"conf_lorawan_region": "", //配置的LoRaWAN的region
"conf_lorawan_radio0":"", //配置的LoRaWAN的radio0
"conf_lorawan_radio1":"", //配置的LoRaWAN的radio1
"conf_lorawan_nshost":"", //配置的LoRaWAN的NS的host
"conf_lorawan_nsport":"", //配置的LoRaWAN的NS的port
"conf_lorawan_gatewayid":"", //配置的LoRaWAN的gatewayid
"mang_mqtt_url": "mqtt://thingsboard.com:6883", //mang是management的缩写,
此项为管理通道的MQTT URL,格式为mqtt://host:port**重启 **
回复
**恢复出厂设置 **
回复
**升级 **
"mang_mqtt_clientid":"64e833fffe5909d8",//此项为MQTT clientID
"mang_mqtt_username": "", //此项为MQTT username
"mang_mqtt_password": "", //此项为MQTT password
"mang_mqtt_telemetry_topic": "v1/devices/me/telemetry", //此项目
thingsBoard的telemetry主题
"mang_mqtt_request_topic": "v1/devices/me/rpc/request", //此项为
thingsBoard的RPC request主题
"mang_mqtt_respone_topic": "v1/devices/me/rpc/response", //此项为
thingsBoard的RPC respone主题,会再拼接request_id
}
}
**重启 **
{
"method": "gw_reboot", //gateway_reboot 是命令关键字
"params": {}
}
回复
{
"result": "success",
"resp": { // 有返回结果的,放在此结构体里
"method": "gw_reboot"
}
}
恢复出厂设置
{
"method": "gw_restore", //gw_restore 是命令关键字
"params": {}
}
回复
{
"result": "success",
"resp": { // 有返回结果的,放在此结构体里
"method": "gw_restore"
}
}
升级
{
"method": "gw_upgrade", //gateway_reboot 是命令关键字
"params": {
"url":"http://192.169.4.53/simple_ota.bin" //设备只支持HTTP的URL
}
}
回复(收到升级命令)
{
"result": "success",
"resp": { // 有返回结果的,放在此结构体里
"method": "gw_upgrade"
}
}
版权归原作者 余洋-255iot 所有, 如有侵权,请联系我们删除。