TCP/IP 适配器迁移指南¶
TCP/IP 适配器是在 IDF V4.1之前使用的网络接口抽象组件。本文档概述了从 tcpip_adapter 移出至其后继者 ESP-NETIF 的过程。
更新网络连接代码¶
网络软件栈初始化¶
只需将 tcpip_adapter_init()
替换位 esp_netif_init()
。请注意,ESP-NETIF 初始化 API 可返回标准错误代码,还可以使用 esp_netif_deinit()
进行去初始化。
此外,还需将 #include "tcpip_adapter.h"
替换为 #include "esp_netif.h"
。
创建网络接口¶
TCP/IP 适配器静态定义了三个接口:
- Wi-Fi Station
- Wi-Fi AP
- 以太网
网络接口的设计应严格参考 ESP-NETIF,以使其能够连接到 TCP/IP 软件栈。
例如,在 TCP/IP 软件栈和事件循环初始化完成后,Wi-Fi 的初始化代码必须显示调用 esp_netif_create_default_wifi_sta();
或 esp_netif_create_default_wifi_ap();
。
请参阅这三个接口的初始化代码示例:
更换其他 tcpip_adapter API¶
所有 tcpip_adapter 函数都有对应的 esp-netif。具体请见 esp_netif 的内容:
默认事件处理程序¶
事件处理程序已经从 tcpip_adapter 移动到相应的驱动程序代码。从应用程序的角度来看,这不会带来任何影响,所有事件仍以相同的方式处理。 请注意,在与 IP 相关的事件处理程序中,应用程序代码通常以 esp-netif 结构体的形式接收 IP 地址(不是 LwIP 结构,但兼容二进制格式)。 这是打印地址的首选方式:
ESP_LOGI(TAG, "got ip:" IPSTR "\n", IP2STR(&event->ip_info.ip));
而不是
ESP_LOGI(TAG, "got ip:%s\n", ip4addr_ntoa(&event->ip_info.ip));
由于 ip4addr_ntoa()
为 LwIP API,因此 esp-netif 还提供了替代函数 esp_ip4addr_ntoa()
,但整体而言仍推荐上述方法。
IP 地址¶
推荐使用 esp-netif 定义的 IP 结构。请注意,在启用默认兼容性时,LwIP 结构体仍然可以工作。 * esp-netif IP address definitions