0


ESP32+SX1302=目前市场上最低成本LORAWAN网关=成本低于300元

**项目介绍 **

本项目是ESP32+SX1302,做成LoRaWAN 多通道GW,支持packet-forward

开发环境

IDF:V5.2.1

IDE:VSCode+ESP-IDF插件

PCBA****示意图

**固件烧录 **

**接线 **

1.烧录程序时接这个口,ESP32烧程序是先让设备进入烧录模式(先按住BOOT0按键,然后按下EN按

键,此时ESP32重启,进入烧录模式,然后松开BOOT0按键,ESP32停留在烧录模式)

Note:

  1. 如果使用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

**验收测试方法 **

  1. 烧录程序,可正常烧录

  2. 烧录后,重新上电,RUN指示灯,0.5s间隔闪烁

  3. 连接设备的WIFI热点(ssid:LoRaGW-xxxxxx 密码:loragwwifi),浏览器输入(http://192.168.4.1),

可看到设备的配置页面

  1. 测试以太网,将设备接入路由器,设备能以DHCP方式获取到IP,说明以太网功能正常

  2. 设备联网后,SX1302和GNSS模块启动,将设备的GWID(GWID默认为SN)录入到NS服务器,可在

NS服务器上看到网关上线,说明SX1302功能正常

  1. 插入4G SIM,拔掉网线,4G正常获取到IP地址,说明4G功能正常

  2. 将GNSS放到室外有GNSS信号的地方,可以获取到经纬度和海拔,说明GNSS功能正常

  3. 至此,各硬件功能都验证完成,测试通过

**网关配置通道 **

*标准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

有两条链路:

  1. 网关主动发送数据

telemetry_uplink

设备每隔一段时间会发送心跳包

设备在上电和配置信息更改时,会发送配置信息

  1. 云平台发送命令给网关

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"

}**网关信息包 **

  1. 设备在上电、配置被修改时发送

  2. 设备每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"

}

}


本文转载自: https://blog.csdn.net/weixin_43803528/article/details/140661804
版权归原作者 余洋-255iot 所有, 如有侵权,请联系我们删除。

“ESP32+SX1302=目前市场上最低成本LORAWAN网关=成本低于300元”的评论:

还没有评论