介绍一种在您使用的 micropython 中加速以太网的方法。
使用硬连线 TCP!/IP 增强您的 W5100S-EVB-PICO
介绍一种在您使用的 micropython 中加速以太网的方法。
首先,只有配备 WIZnet 芯片的 pico 才能实现这样的速度增强。 您是否知道 WIZnet 以太网芯片(W5100S 或 W5500)有两种模式?
它们是硬连线和 LWIP。
通过在HardWired模式下运行,网络物理层任务在以太网芯片上而不是MCU上执行,从而提高了网络速度和MCU效率。
提高速度的方法还有很多,还可以进一步增强,
但现在,我们只检查一下硬连线模式设置。
看看结果!
默认固件(747 Kbits/秒)=> 自定义固件(1.34 Mbits/秒)
提高约 74%!
这里介绍一下创建FW并使用iperf3进行测试的方法。
固件构建
下载代码的地方是来自官方的micropython GitHub存储库。
下载代码后,将其配置为 HardWired 模式。
我们唯一要修改的部分是 make 文件中的一行。
micropython/ports/rp2/boards/W5500_EVB_PICO/mpconfigboard.cmake
在第 4 行,禁用 LWIP 设置。
#set(MICROPY_PY_LWIP 1)
set(MICROPY_PY_LWIP 0)
现在,让我们继续构建。
README.md 中详细解释了构建方法。
https://github.com/micropython/micropython/blob/master/ports/rp2/README.md
虽然示例使用 Pico W,但由于我们使用的是 W5100S-EVB-PICO 或 W5500-EVB-PICO,因此我们需要对其中提到的命令进行轻微修改。
#W5100S-EVB-PICO
$ make BOARD= W5100S_EVB_PICO submodules
$ make BOARD= W5100S_EVB_PICO clean
$ make BOARD= W5100S_EVB_PICO
# W5500-EVB-PICO
$ make BOARD= W5500-EVB-PICO submodules
$ make BOARD= W5500_EVB_PICO clean
$ make BOARD= W5500_EVB_PICO
速度测试
我们应该验证一下改进是否真实,对吗? 我通常使用 iperf3。
首先,添加 iperf3 库并导入。 您可以在这里下载该库:
https://github.com/micropython/micropython-lib/blob/master/python-ecosys/iperf3/iperf3.py
使用以下示例。
您可以从以下 git 存储库下载它。
https://github.com/wiznetmaker/Hard_wired_WIZNET5K-Micropython/tree/main/examples/iperf3_test
修改定义的网络信息和服务器IP。 服务器 IP 是测试 PC 的 IP。
import machine
import network
import uiperf3
SERVER_IP= "192.168.11.100" #Test PC IP
DEVICE_IP = "192.168.11.101"
GATEWAY = "192.168.11.1"
NETMASK = "255.255.255.0"
DNS = "8.8.8.8"
def wiznet_init():
spi = machine.SPI(0, baudrate=2000000, mosi=machine.Pin(19), miso=machine.Pin(16), sck=machine.Pin(18))
nic = network.WIZNET5K(spi, machine.Pin(17), machine.Pin(20))
nic.active(True)
nic.ifconfig((DEVICE_IP, NETMASK, GATEWAY, DNS))
print('IP address :', nic.ifconfig())
def main():
wiznet_init()
uiperf3.client(SERVER_IP)
此外,请在您的 PC 上设置 iperf3。
从这里下载 iperf3。 (我用的是3.1.3版本。)
iPerf - Download iPerf3 and original iPerf pre-compiled binaries
安装完成后,从安装目录打开命令提示符,输入Server操作命令:
iperf3.exe -s
如果不起作用,请检查您的防火墙。
为了验证 LWIP 是否准确启用/禁用,我添加了日志。 在 /extmod/network_wiznet5k.c 文件中,有一个用于初始化 WIZnet 芯片的函数。
(仅供参考,如果想修改WIZNET5K相关功能,可以修改这段代码。)
分支根据 WIZNET5K_WITH_LWIP_STACK 的定义值发生。
如果启用LWIP_STACK,则将运行左侧的代码(第173行),如果禁用,则将执行右侧的代码(第351行)。
我计划向官方 MicroPython 存储库提交一个 Pull 请求。
我希望它能被接受,这样每个人都可以从更快的网络中受益。
此外,如果您需要基本的 MicroPython 示例,请尝试使用 WIZnet 官方 git 存储库上提供的示例。