https://github.com/zanjie1999/esp32_nat_router
esp32_nat_router-master工程下載下傳位址
ESP32-S2配置成以太網+AP,兩個接口之間的NAT路由轉發不正常。
以太網部分是從\esp-idf\examples\ethernet\basic例程驗證完成後移植過來的。
(1)PC1可以正常連接配接ESP32-S2-AP,并得到DHCP 配置設定的位址192.168.4.5,可以正常通路912.168.4.1,ESP32-S2以太網接口可以DHCP從外部路由器正常得到IP位址192.168.3.89。
C:\Users\wei>ping 192.168.4.1
正在 Ping 192.168.4.1 具有 32 位元組的資料:
來自 192.168.4.1 的回複: 位元組=32 時間=14ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=16ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=7ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=8ms TTL=255
192.168.4.1 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 7ms,最長 = 16ms,平均 = 11ms
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 位元組的資料:
來自 192.168.3.89 的回複: 位元組=32 時間=10ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=10ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=6ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=21ms TTL=255
192.168.3.89 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 6ms,最長 = 21ms,平均 = 11ms
//無法到達HUAWEI-WIFI路由器了
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 位元組的資料:
請求逾時。
請求逾時。
請求逾時。
請求逾時。
192.168.3.1 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
(2)換一台PC2連接配接華為WIFI路由器,
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 位元組的資料:
來自 192.168.3.1 的回複: 位元組=32 時間=1ms TTL=64
來自 192.168.3.1 的回複: 位元組=32 時間=1ms TTL=64
來自 192.168.3.1 的回複: 位元組=32 時間=1ms TTL=64
來自 192.168.3.1 的回複: 位元組=32 時間=1ms TTL=64
192.168.3.1 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 1ms,最長 = 1ms,平均 = 1ms
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 位元組的資料:
來自 192.168.3.89 的回複: 位元組=32 時間=3ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=3ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=3ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=3ms TTL=255
192.168.3.89 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 3ms,最長 = 3ms,平均 = 3ms
(3)通過如下if 0,隻保留ethernet_init(),PC2是可以ping通EPS32-S2以太網接口的,說明以太網接口移植是沒有問題的
if(1){
ethernet_init(static_ip, subnet_mask,gateway_addr, base_mac_addr);
if (0) WiFi_AP_init(ap_ssid, ap_passwd, ap_ip);
}
else{
// Setup WIFI
wifi_init(ssid, passwd, static_ip, subnet_mask, gateway_addr, ap_ssid, ap_passwd, ap_ip);
}
C:\Users\wei>ping 192.168.3.89
正在 Ping 192.168.3.89 具有 32 位元組的資料:
來自 192.168.3.89 的回複: 位元組=32 時間=31ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=2ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=3ms TTL=255
來自 192.168.3.89 的回複: 位元組=32 時間=2ms TTL=255
192.168.3.89 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 2ms,最長 = 31ms,平均 = 9ms
什麼原因?如何解決?
仔細看,上面來自 192.168.3.89 的回複: 位元組=32 時間=31ms TTL=255,TTL=255說明是最後了。
觀察esp32_nat_router-master工程原始狀态,PC1(192.168.4.2)ping如下三個位址:,TTL好像并沒有提供什麼線索。
C:\Users\wei>ping 192.168.3.86
正在 Ping 192.168.3.86 具有 32 位元組的資料:
來自 192.168.3.86 的回複: 位元組=32 時間=4ms TTL=255
來自 192.168.3.86 的回複: 位元組=32 時間=5ms TTL=255
來自 192.168.3.86 的回複: 位元組=32 時間=3ms TTL=255
來自 192.168.3.86 的回複: 位元組=32 時間=22ms TTL=255
192.168.3.86 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 3ms,最長 = 22ms,平均 = 8ms
C:\Users\wei>ping 192.168.4.1
正在 Ping 192.168.4.1 具有 32 位元組的資料:
來自 192.168.4.1 的回複: 位元組=32 時間=5ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=4ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=7ms TTL=255
來自 192.168.4.1 的回複: 位元組=32 時間=35ms TTL=255
192.168.4.1 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 4ms,最長 = 35ms,平均 = 12ms
C:\Users\wei>ping 192.168.3.1
正在 Ping 192.168.3.1 具有 32 位元組的資料:
來自 192.168.3.1 的回複: 位元組=32 時間=20ms TTL=63
來自 192.168.3.1 的回複: 位元組=32 時間=28ms TTL=63
來自 192.168.3.1 的回複: 位元組=32 時間=16ms TTL=63
來自 192.168.3.1 的回複: 位元組=32 時間=17ms TTL=63
192.168.3.1 的 Ping 統計資訊:
資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估計時間(以毫秒為機關):
最短 = 16ms,最長 = 28ms,平均 = 20ms
原工程用了如下函數
ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL) );//
結合以太網接口,改用如下函數,估計這個有差異。
ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL));
esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx); - 猴子上樹 - 部落格園esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx){ if (s_event_init_flag) { return ESP_
https://www.cnblogs.com/whigym/p/9132284.html
經過排除這隻是前後兩種不同的格式,修改後還是不能再以太網和AP之間轉發。
進一步分析,ESP32-S2内部沒有路由協定,比如RIP,估計隻能固定兩個端口模式的NAT,預設隻能STA和AP之間嗎?
2022-01-05一個新線索:以太網端口上電就接着網線,可以配置設定到IP位址;一開始沒有接網線,或重新插拔後都不能配置設定到IP位址,感覺是DHCP Client異常。
需要進一步查官方資料