esp_wifi_repeater, 全功能WiFi中继器( 正确
- 源代码名称:esp_wifi_repeater
- 源代码网址:http://www.github.com/martin-ger/esp_wifi_repeater
- esp_wifi_repeater源代码文档
- esp_wifi_repeater源代码下载
- Git URL:
复制代码
git://www.github.com/martin-ger/esp_wifi_repeater.git
- Git Clone代码到本地:
复制代码
git clone http://www.github.com/martin-ger/esp_wifi_repeater
- Subversion代码到本地:
复制代码
$ svn co --depth empty http://www.github.com/martin-ger/esp_wifi_repeater
Checked out revision 1.
$ cd repo
$ svn up trunk
git://www.github.com/martin-ger/esp_wifi_repeater.git
git clone http://www.github.com/martin-ger/esp_wifi_repeater
$ svn co --depth empty http://www.github.com/martin-ger/esp_wifi_repeater
Checked out revision 1.
$ cd repo
$ svn up trunk
全功能WiFi中继器( 正确: WiFi NAT路由器)
这是在esp8266和esp8285上的WiFi NAT路由器的实现。 它还支持包含 acl 。端口映射。流量调整。远程监控( 或者数据包嗅探) 和电源管理的包过滤防火墙。 对于网格中包含多个路由器的设置,一个新的模式"automesh"已经被包含在 https://github.com/martin-ger/esp_wifi_repeater#automesh-mode 。
典型的使用情况包括:
- 用于现有WiFi网络的简单范围扩展程序
- 电池供电的户外( 网格) 网络
- 为客户机设置具有不同 ssid/密码的附加WiFi网络
- 建立一个安全受限的物联网设备网络
- 无线流量分析监测探头
- 带有路由。acl和流量调整的网络实验
默认情况下,ESP充当STA和软 ap,通过它透明地转发任何IP流量。 因为它使用NAT不需要在网络侧或者连接的站点上都不需要。 Stations在 192.168.4.0/24 网络中默认通过DHCP配置,并从现有的WiFi网络接收它们的DNS响应地址。
测量显示,它可以以在两个方向上实现约 5个,所以甚至可以以使用流。
这里视频中解释了一些细节: https://www.youtube.com/watch?v=OM2FqnMFCLw
在WPA2企业上的注意事项( PEAP )
如果需要将WPA2企业网络与PEAP身份验证转换为WPA2-PSK网络的"转换器",请查看 https://github.com/martin-ger/esp_peap_psk 。 正在尝试将这个功能集成到这个项目中- 但是for在身份验证期间需要很多空闲堆。 所以我决定把它放在一个单独的项目中。
首次引导esp_wifi_repeater以以下缺省配置开始:
- ap_ssid: MyAP,ap_password: 无,ap_on: 1,ap_open: 1
- 网络:192.168.4.0/24
首次启动( 或者工厂重置) 后,它将提供一个带有开放AP和 ssid"myAp"的WiFi网络。 它还没有尝试自动连接到上行链路 AP ( 。因为它不知道有效的ssid或者密码) 。
通过一个简单的web接口或者完整配置通过控制台连接到这个WiFi网络并完成基本配置。
基本Web配置接口web接口允许配置基本转发功能所需的所有参数。 感谢rubfi的主要工作: https://github.com/rubfi/esp_wifi_repeater/ 将你的浏览器指向" http://192.168.4.1"。 这里页面应显示:
首先为上行链路WiFi网络输入适当的值,"sta设置"。 在开放网络中使用密码"无"。 如果你真的想使用automesh模式,请选中"automesh"框。 单击"连接"。ESP重新启动并将连接到WiFi路由器。 状态指示灯在几秒钟后闪烁。
如果你选择了 automesh,那么你就完成了配置。 在automesh模式下不需要配置"软AP设置",这些设置与"sta设置"相同。 同一ssid将由所有连接的ESP中继器提供。
如果你不使用 automesh,现在可以重新加载页面并更改"软AP设置"。 单击"集合集",再重新引导 ESP 。 现在它已经准备好转发新配置的软AP上的流量。 请注意,这些更改还影响配置接口,换句话说,要做进一步配置,通过一个新配置的WiFi网络连接到 ESP 。 如果你更改了( ESP在这个网络中始终有地址 x.x. x.1 ),请记住软AP网络的地址。
如果你愿意,可以标记"锁定"复选框并单击"锁定"。 现在无法更改配置,而不首先使用网络( 定义一个即使网络已经打开) 上行链路的WiFi密码进行解锁。
如果你想在网页界面中输入非ascii或者特殊字符,你必须使用http风格的十六进制编码如"my%20accesspoint"。 这将导致字符串"我的accesspoint"。 使用这里十六进制编码,你可以输入任意字节值,但 0 ( 出于内部原因) 除外。
如果你犯了一个错误,你失去了与ESP的任何联系,你仍然可以使用串行控制台恢复("复位 facory"请参见下面) 。
命令行 接口高级配置必须通过控制台接口上的命令行 完成。 这个控制台可以通过 115200波特或者通过tcp端口 7777 ( 比如 端口) 提供。 "192.168.4.1 7777"从连接的状态) 。
对于初始设置,请使用以下命令:
- 设置 ssid your_home_router s_ssid
- 设置密码 your_home_router s_password
- 设置 ap_ssid esp's_ssid"
- 设置 ap_password esp's_password"
- 显示( 用于检查参数)
- 保存
- 重置
如果你想输入非ascii或者特殊字符,你可以使用http样式十六进制编码( 比如 。 "my%20accesspoint") 或者仅在CLI上,作为带有反斜杠的快捷方式c 样式引号( 比如 。 。我的accesspoint") 这两种方法都将导致字符串"我的accesspoint"。
命令行 可以了解更多的命令:
基本命令
足够让它在几乎所有环境下工作。
- 帮助:打印简短的帮助消息
- 设置 [ssid|password] 值: 更改上行链路 AP ( 家庭路由器的WiFi配置)的设置,使用密码"无"打开开放网络。
- 设置 [ap_ssid|ap_password] 值: 更改 ESP ( 针对你的站点)的软ap的设置
- 显示 [config|stats]: 打印当前配置或者某些状态信息和统计信息
- 保存 [dhcp]: 将当前配置参数。acl和路由 entires [+ the current DHCP leases] 保存到 Flash
- 锁定 [ password ]: 保存和锁定当前配置,不允许更改。 如果已经设置了密码( 默认为上行链路WiFi的密码),则可以打开密码
- 解锁 : 解锁配置,需要锁定命令的密码
- 重置 [factory]: 重置 esp,'工厂'可选择将WiFi参数重置为默认值( 仅适用于串行控制台上的锁定设备)
- 退出:终止远程会话
高级命令
大多数设置命令只有在保存和重置后才有效。
Automesh配置
- 设置 automesh [0|1]: 选择,模式is是否打开或者关闭( 默认值),请参见这里的详细内容 https://github.com/martin-ger/esp_wifi_repeater#automesh-mode
- 设置 am_threshold : 设置"错误"连接的阈值( 在负数库中,默认 85,换句话说,-85数据库)
- 设置 am_scan_time 秒: 设置在进入睡眠之前,ESP在automesh模式下尝试查找上行链路AP的时间间隔( 0 个禁用,默认)
- 设置 am_sleep_time 秒: 设置如果没有找到上行链路 AP ( 0 禁用,默认值),则ESP在automesh模式下休眠的时间间隔( 秒)
无线配置
- 设置 ap_on [0|1]: 选择软ap是否已经禁用( ap_on=0 ) 或者启用( ap_on=1,默认)
- 设置 ap_open [0|1]: 选择软ap是否使用WPA2-PSK安全( 。ap_open=0,自动,如果设置了 ap_password ) 或者公开( ap_open=1 )
- 设置 auto_connect [0|1]: 选择是否应该继续尝试重新连接到 AP 。 auto_connect在第一次闪烁或者"重置工厂"后关闭( 0 ) 。 在输入新SSID时,它将自动在( 1 ) 上设置。
- 设置 ssid_hidden [0|1]: 选择软ap的SSID是否隐藏( ssid_hidden=1 ) 或者可见( ssid_hidden=0,默认)
- 设置 PHY_MODE [1|2|3]: 设置 WiFi ( 1 =b,2 =g,3 =n ( 默认值)的PHY_MODE
- 设置 bssid: xx: xx: xx: xx: xx: xx: xx:: 设置上行链路AP的特定 BSSID ( 默认 00: 00: 00:: 00: 00,表示任何状态)
- 设置 [ap_mac|sta_mac]: xx: xx: xx: xx: xx: xx: xx:: 设置地址和软件的MAC地址到用户定义的值( MAC地址第一个字节的位 0不能为 1 )
- 设置sta_mac随机:每次重新启动后设置新的随机 STA
- 设置sta_hostname的名称:: 设置STA的NAME ( 对上行链路AP可见)
- 设置 max_clients [1-8]: 设置可以达到软 ap ( esp实现极限)的STAs数量( 默认值为,默认值) 。
- 扫描:对ap进行扫描
- 连接:尝试使用当前配置的ssid和密码连接 AP 。
- 断开连接:与任何上行链路AP断开连接
tcp/ip配置
- ping IP地址: 检查与 ICMP echo 请求/应答的IP连接
- 设置网络 ip地址: 设置内部网络的IP地址,网络始终为/24, 路由器始终为 x.x. x.1
- 设置dns地址 dns地址: 设置通过DHCP分发到客户端的static DNS地址
- 设置 DNS DHCP: 配置来自DHCP的动态DNS地址,默认
- 设置ip地址 ip地址: 设置STA接口的static IP地址
- 设置 IP dhcp: 为STA接口配置动态IP地址,默认
- 设置网络掩码网络掩码: 为STA接口设置一个 static 网络掩码
- 设置 gw 地址: 设置STA接口的static 网关地址
- 显示 dhcp: 打印dhcp租约表的当前状态
路由
- 显示路由:显示当前路由表
- 路由清除:清除所有 static 路由
- 路由添加网络 gw:: 通过网关mtf将 static 路由添加到网络( 网络给定CIDR表示法('x 。x 。x 。x/n')
- 路由删除网络: 删除到网络的static 路由
- 接口 inX [up|down]: 在上或者下设置接口状态( 无IP路由/通讯通过下接口,默认: 向上)
- 设置 nat [0|1]: 选择是否软ap接口为 NATed ( nat=1,默认值) 或者( nat=0 ) 。 没有NAT透明转发来自内部STAs的流量不工作 ! 主要与 static 路由结合使用。
- portmap添加 [TCP|UDP] external_port internal_ip internal_port: 添加端口转发
- portmap删除 [TCP|UDP] external_port: 删除端口转发
防火墙/监视器配置
- acl [from_sta|to_sta] [TCP|UDP|IP] src src [ src_port ] desr-ip [ dest_port ] [allow|deny|allow_monitor|deny_monitor]: 向ACL添加新规则
- ACL [from_sta|to_sta] 清除:清除整个 ACL
- 显示 acl: 显示已经定义的acl和某些
- 设置 acl_debug [0|1]: 打开/关闭ACL调试输出- 拒绝的数据包将被记录到终端
- 设置 [upstream_kbps|downstream_kbps] 位比特率: 设置最大上行/下游比特率( 0 = 无限制,默认值)
- 设置 daily_limit limit_in_KB: 定义了最多可以由STAs传输的最大字节数( 0 = 无限制,默认值)
- 设置时区 hours_offset: 定义本地时区( 当一天在 00: 00结束时需要知道的地方)
- 监视 [on|off|acl] 端口: 在给定端口上启动和停止监视服务器
用户界面配置
- 设置 config_port portno: 设置控制台登录的端口号( 默认为 7777,0禁用远程控制台配置)
- 设置 web_port portno: 设置站点配置服务器的端口号( 默认为 80,0禁用站点配置)
- 设置 config_access 模式: 控制允许控制台和站点配置访问的网络( 0: 无访问权限,1: 只有内部,2: 仅外部,3: 两个( 默认值) )
芯片配置
- 设置速度 [80|160]: 设置CPU时钟频率( 默认 80 Mhz )
- 睡眠第二: 将ESP置于深度睡眠中,达到指定的秒数。 1和 4294之间的有效值( aprox 。 71分钟)
- 设置 status_led GPIOno: 为状态指示灯选择GPIO引脚( 默认 2,> 16已经禁用)
- 设置 hw_reset GPIOno: 为硬件工厂重置选择GPIO引脚( 默认 4,> 16已经禁用)
- 设置 ap_watchdog 秒: 如果不存在任何数据包,则设置AP看门狗超时( 秒从上行链路复位("无"= 不超时,默认)
- 设置 client_watchdog 秒: 如果没有接收到任何已经连接的客户端的数据包,则设置客户端看门狗超时( secs秒来自任何连接的客户端 resets resets none timeout timeout timeout default
- 设置 vmin 电压: 设置最小电池电压( 以mV为单位) 。 如果Vdd下降了,ESP就会进入睡眠状态。 如果 0,则没有发生任何情况
- 设置 vmin_sleep 秒: 设定ESP在低压下休眠的时间间隔
缺省配置GPIO2配置为使用以下指示来驱动状态 LED ( 连接到地):
- 永久启用:启动,但未成功连接到 AP ( 没有有效的外部 IP )
- 闪烁( 1秒): 工作,连接到 AP
- unperiodically闪烁:工作,内部网络中的流量
使用"设置 status_led GPIOno",GPIO引脚可以改变( 任何值> 16,比如"设置 status_led 255"将禁用状态指示灯完全禁用) 。 当配置为GPIO1时,它与 ESP-01 板上的内置蓝色LED一起工作。 但是,由于GPIO1也是UART-TX-pin这意味着串行控制台不工作。 配置被限制为网络访问。
硬件工厂复位在 4秒上的GPIO GPIO pull,中继器将执行出厂复位并使用默认配置重新启动。 使用"设置 hw_reset GPIOno",GPIO引脚可以改变( 任何值> 16,比如"设置 hw_reset 255"将禁用硬件工厂重置功能) 。
对于许多障板,包括ESP-01s和 NodeMCUs,最好使用 GPIO 0作为它,因为它使用的是。 但是,它不是默认的pin,因为它可能会干扰在闪烁时向下拉。 因这里,如果你想使用"设置 hw_reset 0" 0上的现有按钮,可以以在闪烁后用和"保存"配置它。 由硬件复位触发的工厂复位将不会重置配置的hw_reset GPIO号("复位工厂"从控制台执行) 。
端口映射为了允许外部网络的客户端连接到内部网络上的服务器端口,必须对端口进行映射。 外部端口映射到特定内部IP地址的内部端口。 将"portmap加"命令用于。 可以使用"显示"命令列出端口映射,并与当前配置一起保存。
但是,要确保所预期的设备侦听某个IP地址,必须确保该设备的IP地址一旦重新启动。 为此,可以在设备中配置固定IP地址,或者ESP必须记住它的DHCP租约。 这可以通过"保存 dhcp"命令实现。 它保存当前状态和所有DHCP租约,以便在重新启动后恢复它们。 DHCP租约可以用"显示统计信息"命令列出。
Automesh模式有时你可能希望在一行或者网格中使用几个esp_wifi_repeaters来覆盖较大的距离或者区域。 通常,这可以在没有任何问题的NAT路由器上完成,实际上你将有几层 NAT 。 但是,这意味着连接是有限的: 所有节点都可以与因特网通信,但是通常节点之间没有直接的IP连接。 当然,可用带宽会随着你所需要的带宽的增加而降低。 但是用户报告说,在一行中,即使 5 esp_wifi_repeaters也能很好地工作。
在这样的设置配置中,非常耗时且容易出错。 为了简化这一点,esp_wifi_repeater现在有了一个新模式: on automesh"。只需配置SSID和密码和 switch"automesh"。 ( 使用"设置 automesh 1"或者者在网络接口上,只选择复选框) 。 这将执行以下操作:
以这种方式配置的每个esp_wifi_repeater将在AP上自动提供与它连接到的相同 ssid/密码的WiFi网络。 客户端可以对原始网络或者重复的网络使用相同的WiFi设置。 配置了"automesh"的每个esp_wifi_repeater将首先搜索最好的其他AP来连接。 这是最接近原来的WiFi网络,并拥有最佳的信号强度( RSSI ) 。
信号强度很容易测量,但是这是最接近原有WiFi网络的一个,当你看到几个dbspace时。 因此,协议使用了一些肮脏的技巧: 在"automesh"模式下,esp_wifi_repeaters操作它的BSSID ( 实际上,符合 IEEE 802.11标准,这是"essid"因为它是一个 AP,但是SDK调用它"BSSID"),换句话说,是AP接口的MAC地址,每个信标帧每秒发送的时间间隔为1. 它使用格式:24: 24: mm: rr: rr: rr 。 "24: 24"只是转发器的唯一标识符( 有一个最小的概率,这与真实的ap MAC相碰) 。) 。 ""意味着"网格级别,这是跳到原始WiFi网络的距离。 最后三个"rr: rr"只是随机数,用来区分不同的静。 原始AP保留它的BSSID,即没有前缀" 24: 24"的换句话说,被识别为 root,称为 mesh 0.
现在每个esp_wifi_repeater都可以了解哪个esp_wifi_repeater最接近原来的WiFi网络,可以连接到它,并选择自己的BSSID 。 同时,内部网络的IP地址也被调整为网格级别: 10.24. m. 0 在链路层或者网络层上使用距离矢量协议将原始 WiFi AP作为 root 和重复节点创建为多个网格级别的树。 一旦检测到上行链路链路丢失,配置将重新启动。 这应该避免循环,因为在( vt - ) 配置中还没有发送BSSID的信标。
为了方便,"automesh"配置后的esp_wifi_repeater首先尝试检查,是否可以连接到上行链路 AP 。 如果发生这种情况,即使找到了正确的SSID,它假定用户错误并重置到工厂默认值。 成功连接后,一旦连接丢失或者重启,它将认为配置正确并继续尝试。
调优 Automesh
如果在范围内有多个,"错误"路径和更长的"好"路径( 连接质量好而坏) 之间可以能会出现交易。 参数 am_threshold 决定了一个错误的连接是什么: 如果扫描中的ienumerator小于这里阈值,则连接是坏的,而且路径具有一个更多的跳跃。 换句话说,给出的am_threshold 为 85,在扫描中检测到两个automesh节点: 第1 级和第2 级,具有第二级和第三级,第二级为 RSSI,则认为( -88 dB <- am_threshold ) 和B的链接太差,所以。 新的node 将成为一个级别 3 node,通过B 。 am_threshold 为正值,但表示负数据库。 较小的值更好。
如果希望深入了解automesh网络的拓扑结构,可以考虑将所有节点连接到MQTT代理,并让它们发布"拓扑结构"主题( 请参见下面) 和。 如果你现在订阅"/WiFi/+/system/Topology",你将得到所有的node 和链接信息包括需要重建完整图,并检测到在网格中弱链接。 TopologyInfo主题包含以下JSON结构,可以用于重建automesh网络的完整图形:
{
"nodeinfo" {
"id":"ESP_07e37e",
"ap_mac":"24:24:01:72:c7:f9",
"sta_mac":"60:01:bc:07:e3:7e",
"uplink_bssid":"00:1a:54:93:23:0a",
"ap_ip":"10.24.1.1",
"sta_ip":"192.168.178.33",
"rssi":"-66",
"mesh_level":"1",
"no_stas":"2"
},
"stas":[
{"mac":"5c:cf:45:11:7f:13","ip":"10.24.1.2"},
{"mac":"00:14:22:76:99:c5","ip":"10.24.1.3"}
]
}
如果你已经连接了 GPIO16,那么可以在automesh模式下使用两个参数 am_scan_time 和am_sleep_time电源管理。 引导后,esp_wifi_repeater扫描avilable上行链路 ap,am_scan_time 秒。 如果没有找到,它将转到 deepsleep am_sleep_time 秒,然后在重启( 。默认值为 0 = 为两个参数禁用) 后重试。
监视器从控制台可以在 [portno]") 上启动监视服务( ("监视器) 。 这里服务将内部网络的流量以pcap格式镜像到TCP流。 从外部网络中的一台计算机上,你现在可以实时观察内部网络的流量。 使用这里 比如 观察你的内部客户端在通信的互联网站点。 注意,这至少使esp和WiFi网络的负载增加了一倍。 在重负载下,这可能导致某些数据包被缩短或者甚至被丢弃在监视器会话中。 警告:让这个端口打开是一个潜在的安全问题。 来自本地网络的任何人都可以连接并观察你的流量。
防火墙ESP路由器有一个集成的基本防火墙。 acl ( 访问控制列表) 可以应用于软ap接口。 当路由器将其它物联网设备引入互联网时,这是物联网安全的基石。 软件可以用于防止第三方IoT设备,被滥用为恶意软件机器人,并保护你的家庭网络与个人计算机,平板电脑和手机在家庭自动化设备中可见。
这四个ACL列表被命名为"from_sta","to_sta","from_ap"和"to_ap",它们都是接口(""。表示connectes客户端的接口,""上行链路AP的接口)的传入和。 acl在"思科IOS风格"中定义。 以下示例允许将本地广播( 用于 DHCP ),UDP 53 ( DNS ) 和 TCP 1883 ( MQTT ) 发送到本地代理,任何其他数据包都将被阻止:
- acl from_sta清除
- acl from_sta IP任何 255.255.255.255 允许
- acl from_sta UDP任意 53允许
- acl from_sta TCP任何 192.168.0.0/16 1883允许
- acl from_sta IP任何拒绝
虽然"to_sta"方向的acl可以定义,但这通常不需要,因为反向方向是相当好的,因为它是由NAT的请求。
acl由过滤规则组成,每个包都处理这些规则。 每个规则由协议( IP,TCP或者 UDP ) 。源地址/端口。目的地址/端口以及操作"允许"或者"拒绝"组成。 在普通IP无端口的情况下,只提供地址。 IP规则包括TCP和UDP数据包。 地址可以以子网地址作为子网地址,比如 192.168.178.0/24. 也可以用作通配符,它在任何地址或者端口号上都可以使用。 一个规则由"acl"命令定义:
- acl [from_sta|to_sta|from_ap|to_ap] [TCP|UDP|IP] src src src [ src_port ] desr-ip [ dest_port ] [allow|deny|allow_monitor|deny_monitor ]
规则按照它们在列表中出现的顺序从上到下处理。 应用 MATCHES 数据包的第一个规则和determies是否允许( 并转发) 或者被拒绝的( 放下来) 。 这意味着,特殊情况,最后的一般规则。 如果ACL中有规则,则默认情况下所有不包含任何规则的包都是拒绝的。 因此,上面示例中的最后一个规则"。from_sta IP任何拒绝"并不是真正需要的,因为它是默认的。 如果ACL为空,则允许所有包。
ACL规则的定义也是自上而下的: 在列表的末尾总是添加一个新规则。 要更改 ACL,首先必须完全清除它,然后重新构建它。 acl与配置一起保存。 "显示 acl"将输出每个规则和被允许的和拒绝的数据包总数的点击次数和统计信息。
命令"设置 acl_debug 1"将所有被拒绝的包的摘要打印到控制台。 另外,MQTT主题可以发布这里摘要。 这可以用于防火墙配置以确定需要哪些规则才能使连接的设备正常工作。 它还给出了一个提示,如果意外的流量发生了,( 被拒绝) 。
更深入的分析服务可以使用( 甚至被拒绝的数据包在被丢弃之前被报告给监视器) 。 当使用"监视 acl 端口"命令启动监视器时,acl可以作为在线筛选器使用。 在通常情况下,所有定义为"allow_monitor"而不是"允许"和"deny_monitor"的规则都像通常一样处理,从而允许转发包,但它们也将包发送到监视器。 因这里一个规则列表,基本上"允许"或者"allow_monitor"所有包仍然有意义,因为它可以以在catpure时间内选择。 比如 列表:
acl from_sta清除
acl from_sta IP 192.168.0.0/16 任何 allow_monitor
acl from_sta IP任何允许
acl to_sta清除
acl to_sta IP任何 192.168.0.0/16 allow_monitor
acl to_sta IP任何允许
将允许所有包和从站点到 192.168.0.0/16 ( 本地) 子网的所有包和从 192.168.0.0/16 到站点的所有包。 当然,这样的过滤器也可以以在捕获完整的监视跟踪后应用,但是如果你已经经知道了。 它还可以使用"deny_monitor"代替拒绝来调试所有拒绝防火墙规则。
static-路由默认情况下AP接口是 NATed,因此任何连接到AP的node 都可以通过esp接口的STA透明地访问外部世界。 所以如果你不是一个真正的网络书呆子,就不需要做进一步的行动。
对于你对进一步网络配置感兴趣的thoses: 在这里项目中,eps IPv4协议栈已经得到了增强,支持了 static 路由: "显示路由"显示带有所有已经知路由的路由表,包括连接到连接的网络接口( AP和ptr接口)的链接。) 。 这两个接口之间的路由在没有furter配置的情况下工作。 可以通过"路由器添加 netword网关 。"命令设置其他路由到其他网络,这些路由来自Linux框或者路由器。 一个"保存"命令将路由表的当前状态写入 Flash 配置。
下面是一个简单的例子,可以用 static 路由来。 给出以下网络安装程序,通过中央主路由器连接到与ptr接口连接的两个 lua:
| 10.0.1.1 AP-ESP1-STA 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 STA-ESP2-AP 10.0.2.1|
每个ESP在它的AP后面有第二个网络,具有不同的网络地址: 如果不知道可以通过 192.168.1.20 访问 10.0.1.0,/24 和 10.0.2.0/24. ESP1可以ping到 ESP2,但不知道 10.0.2.1. 如果添加两个 static 路由,则会发生这里更改。 在ESP1上:
route add 10.0.2.0/24 92.168.1.20
在ESP2上:
route add 10.0.1.0/24 92.168.1.10
现在ESP1上的"ping 10.0.2.1"将会成功。 它被发送到 192.168.1.20,然后由ESP2应答。
现在在每个网络中,一个额外的客户机连接( 使用 10.0.1.2 和 10.0.2.2 地址):
| STA1 10.0.1.2 | <-> | 10.0.1.1 ESP1 192.168.1.10 | <-> |Home Router| <-> | 192.168.1.20 ESP2 10.0.2.1| <-> | STA2 10.0.2.2 |
现在,连接到本地地址服务器的客户端STA2都可以ping到 STA2,因为它首先将请求发送到默认路由器 ESP1,这知道到 10.0.2.0/24 地址的所有包都必须转发到 192.168.1.20. ESP2知道如何将它发送到 STA2. 这同样适用于其他方向的回复。
这样可以配置ESPs的多星拓扑,其中每个ESP及其STA客户端都可以访问彼此的服务器。 配置需要的路由可能有些痛苦- 但是在网络上做一个不错的练习。 下一步是在esp上移植一个动态路由协议,比如 RIP 。
比特率限制通过将upstream_kbps和downstream_kbps设置为值!= 0 ( 0是默认值),可以以限制特定于of的最大比特率。 这里值是适用于所有已经连接客户端的流量的限制。 将丢弃exeed所定义的比特率的数据包。 交通插头使用的"令牌桶"算法当前的比率为每秒四倍的比特率,允许在没有交通的情况下发射。
MQTT支持自 1.3版本以来,路由器在MQTT客户机( 感谢 Tuan PM的图书馆 https://github.com/tuanpmt/esp_mqtt 服务。) 中有一个构建。 这可以帮助将路由器/中继器集成到物联网中。 家庭自动化系统可以根据当前相关站的信息做出决策,它可以对中继器( ) 和中继站( ) 进行 switch的。 根据时间安排,或者它可以简单地用来监视负载。 路由器可以连接到本地MQTT代理,也可以连接到云中的公共可用代理。 但是,目前它不支持TLS加密。
默认情况下,MQTT客户机被禁用。 可以通过将配置参数"mqtt_host"设置为与"无"不同的主机名来启用它。 要配置 MQTT,可以设置以下参数:
- 设置 mqtt_host IP_or_hostname: MQTT代理("的IP或者主机名无"禁用MQTT客户机"
- 设置 mqtt_port 端口: 用于连接的MQTT代理的端口( 默认: 1883 )
- 设置 mqtt_user 用户名: 身份验证用户名("无"如果代理上不需要身份验证)
- 设置 mqtt_user 密码: 身份验证的密码
- 设置 mqtt_id clientId: 代理处客户端的Id ( 默认: ESPRouter_xxxxxx ) 从MAC地址派生
- 设置 mqtt_prefix prefix_path: 所有已经发布主题的前缀( 默认: "/WiFi/ESPRouter_xxxxxx/system", 再次从MAC地址派生)
- 设置 mqtt_command_topic command_topic: 订阅接收命令的主题,与控制台相同。 ( 缺省:"/WiFi/ESPRouter_xxxxxx/command","无"通过MQTT禁用命令)
- 设置 mqtt_interval 秒: 设置路由器publishs状态主题的间隔( 默认为: 15,0禁用状态发布)
- 设置 mqtt_mask mask_in_hex: 选择发布哪些主题( 默认: "ffff )
MQTT参数可以用"显示 MQTT"命令显示。
路由器可以定期发布以下状态主题:
- prefix_path/uptime: 自上一次复位以来系统正常运行时间( 掩码: 0 x0020 )
- prefix_path/vdd: mV中电源的电压( 掩模: 0 x0040 )
- prefix_path/bpsin: 从站点到AP的kb/: 0 x0800 )
- prefix_path/bpsout: 从AP到工作站的kb/( 掩码: 0 x0800 )
- prefix_path/bpd: 每天和到站的千字节( 掩码: 0 x0400 )
- prefix_path/ppsin: 数据包/从站到 AP ( 掩码: 0 x0200 )
- prefix_path/ppsout: 从AP到站的数据包/s ( 掩码: 0 x0200 )
- prefix_path/bin: 从站点到AP的总字节数( 掩码: 0 x0100 )
- prefix_path/轮次:从AP到站点的总字节( 掩码: 0 x0100 )
- prefix_path/nostations: 当前连接到AP的站点数( 掩码: 0 x2000 )
- prefix_path/topologyinfo: 带有 node的当前拓扑信息的JSON结构( 掩码: 0 x1000 )
此外,转发器还可以在事件基础上发布:
- prefix_path/join: 加入AP的工作站的MAC地址( 掩码: 0 x0008 )
- prefix_path/离开:离开AP的站点的MAC地址( 掩码: 0项)
- prefix_path/IP: 通过DHCP接收路由器时的IP地址( 掩码: 0 x0002 )
- prefix_path/ScanResult: 为"扫描"命令( 每个找到的AP一条消息)的结果单独创建主题( 掩码: 0 x0004 )
- prefix_path/acldeny: 一个数据包被ACL规则拒绝,并且已经被丢弃( 掩码: 0 x0080 )
可以使用以下主题配置路由器:
- command_topic: 路由器订阅本主题并将所有消息解释为命令行
- prefix_path/响应:在本主题上,路由器发布了 命令行 输出( 掩码: 0个 x0001 )
如果你现在希望路由器只发布 比如,它的IP和 命令行 输出,则将mqtt_mask设置为 0 x0001 | 0 x0002 | 0 x0040 ( ="mqtt_mask 。
基于 的电源管理中继器监测它的当前电源电压( 显示在"显示统计数据"命令) 。 如果 esp_init_data_default.bin, 中名为vdd33_const的107th 字节被设置为 255 ( 0xff ),则这里操作才有效。 最简单的方法就是将 esp_init_data_default_v08_vdd33.bin 写到 Flash ( 请参见下面) 中。
如果 vmin ( 在mV中,默认 0 ) 设置为 value>,电源电压低于该值,则它将进入深度睡眠模式,以秒为单位的vmin_sleep秒。 如果你已经连接GPIO16至 RST ( 在 esp-01 上很难焊接),则在这里间隔后重新引导它,尝试重新连接,并继续它的测量。 在配置和配置一起保存时,如果电源电压超过阈值,它将一直休眠。 如果你用电池供电,特别是( 锂电池) 电池,那么这些设置特别有用,你可以使用undercharge电池。 这样,一个 2900 mV-3000mV的值可能会有所帮助,因为它将功耗降低到最小,而且你还可以在损坏之前给电池充电或者更换电池。 如果你有直接连接到电池的专用电源,这才是合理的。 如果你有额外的逻辑,这将会耗尽电池。
你可以使用"睡眠"命令将ESP手动发送到睡眠状态。
警告:如果将 vmin 值保存到 Flash的最大电源电压,中继器将在重新启动后立即关闭。 然后,你必须将 blank.bin ( 或者其他文件) 闪烁到 0 x0c000来清除整个配置。
ENC28J60以太网支持( 实验)如果在 user_config.h 中启用HAVE_ENC28J60选项并重新编译项目,你将得到通过SPI连接的ENC28J60以太网网卡的支持。
通过SPI连接的连接必须是:
NodeMCU/Wemos ESP8266 ENC28J60
D6 GPIO12 <---> MISO
D7 GPIO13 <---> MOSI
D5 GPIO14 <---> SCLK
D8 GPIO15 <---> CS
D1 GPIO5 <---> INT
Q3/V33 <---> 3.3V
GND <---> GND
另外,你需要一个用于解耦GPIO15的晶体管,否则你的ESP将不再引导,请参见: https://esp8266hints.wordpress.com/category/ethernet/
现在,你可以配置新的以太网接口:
- 设置 eth_enable [0|1]: 启用/禁用SPI总线上的ENC28J60以太网网卡( 默认: 0 - 已经禁用
- 设置 eth_ip ip地址: 为ETH接口设置 static IP地址
- 设置 eth_ip dhcp: 为ETH接口配置动态IP地址,默认值
- 设置 eth_netmask 网络掩码: 为ETH接口设置一个 static 网络掩码
- 设置 eth_gw gw地址: 为ETH接口设置 static 网关地址
要构建这个二进制文件,你下载并安装 esp-open-sdk ( https://github.com/pfalcon/esp-open-sdk ) 。 确定,你可以编译并下载包含的"blinky"示例。
然后在单独的目录中下载这个源树,并在Makefile中调整BUILD_AREA变量和用户/user_config中所需的选项。 默认配置的更改可以在用户/config_flash 。c 中进行。 使用"制作"构建esp_wifi_repeater固件。 "Flash make将它的闪烁到esp8266上。
源树包括liblwip_open的二进制版本,以及我的esp-open-lwip fork 中所需的附加附加内容。 不需要额外的安装操作。 注意:只有在不希望使用预编译库时,请从 https://github.com/martin-ger/esp-open-lwip checkout源。 使用它替换esp-open-sdk树中的目录"esp-open-lwip"。 ""在esp_open_lwip目录中,再一次"make在上esp_open_sdk目录中进行清理。 这将编译一个包含nat特性的liblwip_open.a 。 用二进制替换 liblwip_open_napt.a 。
如果你想使用完整的预编译固件二进制文件,可以用" esptool.py --port/80m write_flash -fs 4MB -ff -fm dio 0 x00000固件/0x00000固件/0x10000 x10000固件/"( 使用 -fs 1MB 对它们使用) 。 对于 esp8285,你必须使用 -fs 1MB 和 -fm 。
在 Windows 上,可以使用 https://espressif.com/en/support/download/other-tools 提供的"。esp8266下载工具"对它的进行 Flash 。 从固件目录下载两个文件 0 x00000.bin 和 0 x10000.bin 。 对于通用 ESP12,NodeMCU或者 Wemos D1使用以下设置( 对于 ESP-01 更改 Flash 大小为"8mbit"):
如果设备上的"qio"模式失败,请尝试使用"dio"。 还可以查看"检测到的信息"以检查 Flash 芯片的大小和模式。
有时,特别是在旧ESP-01s上,Flash 中存在错误的或者不匹配的" esp_init_data_default.bin"版本。 如果来自上 Flash的固件文件正确,但重新启动后只看到串行和/或者GPIO2上的指示灯闪烁,请尝试初始化该扇区: 下载 https://github.com/martin-ger/esp_wifi_repeater/raw/master/firmware/esp_init_data_default_v08_vdd33.bin 并将它的Flash 为 0模块( 一些 ESP-01,Sonoff switch ) modules模块( 大多数 esp-01 ),或者 0模块个模块( 大多数 ESP-12,Wemos D1 ) 。 闪烁这个扇区也会初始化ADC来测量 Vdd ( 电源电压) 而不是外部输入。
如果下载的固件仍未正确启动,请检查附加的校验和是否可以能损坏二进制文件。
已知问题- 由于psd实现软硬度的限制,最多有 8个simultaniously连接站。
- ESP8266需要一个良好的电源,因为它在传输( 无线局域网的典型平均消耗量为 70 mA ) 时产生高达 170 mA的电流峰值。 如果你的ESP运行不稳定,并不时重新引导,请先检查电源。 在Vdd和Gnd之间有一个大电容,如果你遇到问题的话。
- 如果"显示统计信息"命令中的电源电压显示的值( 63996 ) 错误,则不正确配置 ADC 。 使用" esp_init_data_default_v08_vdd33.bin"初始化 ESP,如上面的章节所述。
- 17/Oct/2017 之后发布的所有固件都使用修补版本的SDK 2.1.0构建,它从Espressif中减轻了 KRACK ( https://www.krackattacks.com/ ) 攻击。