• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Передача сигнала IP-камеры через WiFi с помощью WT32-ETH01

ОлегК

New member
Имеются: плата WT32-ETH01 на контроллере ESP32 с интегрированным WiFi и поддержкой Ethernet, а также IP-камера с Ethernet-интерфейсом BLK18C-0222-38X38_S. Передо мной стоит задача по передаче сигнала IP-камеры через WiFi. Можно ли организовать преобразование сигнала камеры с помощью WT32-ETH01? Как настроить плату? Куда смотреть?
 

Atom

Member
Но судя ао описалову камеры, там уже имеется Ethernet. Попробуйте тогда из esp32 сделать бридж с блэкджеком и dhcp, подклучив через W5500 (к примеру).
 

ОлегК

New member
ESP32-CAM я не применяю из-за того, что место съемки располагается на удалении от места вещания WiFi.
Плата WT32-ETH01 поддерживает протоколы IPv4, TCP/UDP.
W5500 не требуется. Нужны советы по плате WT32-ETH01.
 

Atom

Member
точно. платка уже с разведенным ethernet.


Но схематики ее правда не удалось найти.
Управляется по АТ.
Пробовали?

настраиваются обе сети, а далее страница 23 - вся магия перекачки данных.

Если не заведется, то стоит попробовать
 

aZholtikov

Active member
Имеются: плата WT32-ETH01 на контроллере ESP32 с интегрированным WiFi и поддержкой Ethernet, а также IP-камера с Ethernet-интерфейсом BLK18C-0222-38X38_S. Передо мной стоит задача по передаче сигнала IP-камеры через WiFi. Можно ли организовать преобразование сигнала камеры с помощью WT32-ETH01? Как настроить плату? Куда смотреть?
Посмотрите здесь: https://github.com/espressif/esp-iot-solution/tree/release/v1.1/examples/eth2wifi
 

aZholtikov

Active member
Тонкости настройки этой платы:
1. До инициализации ETH подать HIGH на GPIO16.
2. При первой подаче питания ETH в любом случае не запустится - нужен RESET (EN "коротнуть" на GND).

Мой проверенный код инициализации ETH на этой плате:

Код:
    esp_netif_init();
    esp_event_loop_create_default();
    gpio_config_t config = {0};
    config.intr_type = GPIO_INTR_DISABLE;
    config.mode = GPIO_MODE_OUTPUT;
    config.pin_bit_mask = (1ULL << GPIO_NUM_16);
    config.pull_down_en = GPIO_PULLDOWN_DISABLE;
    config.pull_up_en = GPIO_PULLUP_DISABLE;
    gpio_config(&config);
    gpio_set_level(GPIO_NUM_16, HIGH);
    esp_netif_config_t esp_netif_config = ESP_NETIF_DEFAULT_ETH();
    esp_netif_t *esp_netif_eth = esp_netif_new(&esp_netif_config);
    eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
    eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
    eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();
    esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);
    esp_eth_phy_t *phy = esp_eth_phy_new_lan87xx(&phy_config);
    esp_eth_config_t esp_eth_config = ETH_DEFAULT_CONFIG(mac, phy);
    esp_eth_handle_t esp_eth_handle = NULL;
    esp_eth_driver_install(&esp_eth_config, &esp_eth_handle);
    esp_netif_attach(esp_netif_eth, esp_eth_new_netif_glue(esp_eth_handle));
    esp_event_handler_instance_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, NULL, NULL);
    esp_event_handler_instance_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &eth_event_handler, NULL, NULL);
    esp_eth_start(esp_eth_handle);
 

ОлегК

New member
Мой проверенный код инициализации ETH на этой плате:
У меня есть некоторый опыт программирования ESP32-CAM, ESP8266 с использованием Arduino IDE. Предложенный код инициализации не похож на те программы. А как загрузить этот код?
 

ОлегК

New member
По AT не получилось. Возможно, нужно заливать специальную AT-прошивку.

Пытаюсь запустить пример eth2ap из espressif/esp-idf. Из описания примера:
Общности на уровне MAC между Ethernet и WiFi упрощают пересылку пакетов из Ethernet в Wi-Fi и наоборот. Этот пример иллюстрирует, как реализовать простой "маршрутизатор", который поддерживает только пересылку пакетов между портом Ethernet и интерфейсом Wi-Fi AP. В этом случае Ethernet должен играть роль WAN (т.е. он может получать доступ к внешней сети), чтобы мобильное устройство могло получить доступ к Интернету, когда оно подключается к ESP32 через Wi-Fi. В этом примере ESP32 работает как мост между Ethernet и Wi-Fi, и он не будет выполнять никаких действий на уровне Layer3 и более высоком уровне, что означает, что нет необходимости инициализировать стек TCP/IP.
Рассматриваю этот пример как возможный ответ на мой первоначальный вопрос.
В настоящее время застрял на следующем этапе. Среди WiFi-сетей появляется нужная - eth2ap. При ее выборе после ввода пароля подключения не происходит.

ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:7172
load:0x40078000,len:15556
load:0x40080400,len:4
0x40080400: _init at ??:?

ho 8 tail 4 room 4
load:0x40080404,len:3904
entry 0x40080640
I (30) boot: ESP-IDF v5.3-dev-1922-g5454d37d49 2nd stage bootloader
I (30) boot: compile time Feb 28 2024 21:18:27
I (32) boot: Multicore bootloader
I (36) boot: chip revision: v1.1
I (40) boot.esp32: SPI Speed : 40MHz
I (45) boot.esp32: SPI Mode : DIO
I (49) boot.esp32: SPI Flash Size : 4MB
I (54) boot: Enabling RNG early entropy source...
I (59) boot: Partition Table:
I (63) boot: ## Label Usage Type ST Offset Length
I (70) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (78) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (85) boot: 2 factory factory app 00 00 00010000 00100000
I (93) boot: End of partition table
I (97) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=21244h (135748) map
I (152) esp_image: segment 1: paddr=0003126c vaddr=3ffb0000 size=04024h ( 16420) load
I (158) esp_image: segment 2: paddr=00035298 vaddr=40080000 size=0ad80h ( 44416) load
I (176) esp_image: segment 3: paddr=00040020 vaddr=400d0020 size=70de0h (462304) map
I (334) esp_image: segment 4: paddr=000b0e08 vaddr=4008ad80 size=0c740h ( 51008) load
I (366) boot: Loaded app from partition at offset 0x10000
I (366) boot: Disabling RNG early entropy source...
I (378) cpu_start: Multicore app
I (387) cpu_start: Pro cpu start user code
I (387) cpu_start: cpu freq: 160000000 Hz
I (387) cpu_start: Application information:
I (390) cpu_start: Project name: eth2ap
I (395) cpu_start: App version: 1
I (399) cpu_start: Compile time: Feb 28 2024 21:18:21
I (405) cpu_start: ELF file SHA256: bb4f60c7d...
I (410) cpu_start: ESP-IDF: v5.3-dev-1922-g5454d37d49
I (417) cpu_start: Min chip rev: v0.0
I (422) cpu_start: Max chip rev: v3.99
I (427) cpu_start: Chip rev: v1.1
I (432) heap_init: Initializing. RAM available for dynamic allocation:
I (439) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (445) heap_init: At 3FFB7768 len 00028898 (162 KiB): DRAM
I (451) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (457) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (464) heap_init: At 400974C0 len 00008B40 (34 KiB): IRAM
I (471) spi_flash: detected chip: generic
I (474) spi_flash: flash io: dio
I (479) main_task: Started on CPU0
I (489) main_task: Calling app_main()
I (519) wifi:wifi driver task: 3ffbeb20, prio:23, stack:6656, core=0
I (519) wifi:wifi firmware version: 550bce5
I (519) wifi:wifi certification version: v7.0
I (519) wifi:config NVS flash: enabled
I (519) wifi:config nano formating: disabled
I (529) wifi:Init data frame dynamic rx buffer num: 32
I (529) wifi:Init static rx mgmt buffer num: 5
I (539) wifi:Init management short buffer num: 32
I (539) wifi:Init dynamic tx buffer num: 32
I (539) wifi:Init static rx buffer size: 1600
I (549) wifi:Init static rx buffer num: 10
I (549) wifi:Init dynamic rx buffer num: 32
I (559) wifi_init: rx ba win: 6
I (559) wifi_init: accept mbox: 6
I (559) wifi_init: tcpip mbox: 32
I (569) wifi_init: udp mbox: 6
I (569) wifi_init: tcp mbox: 6
I (569) wifi_init: tcp tx win: 5760
I (579) wifi_init: tcp rx win: 5760
I (579) wifi_init: tcp mss: 1440
I (589) wifi_init: WiFi IRAM OP enabled
I (589) wifi_init: WiFi RX IRAM OP enabled
I (2469) eth2ap_example: Ethernet Started
I (2469) eth2ap_example: Ethernet Link Up
I (2469) phy_init: phy_version 4791,2c4672b,Dec 20 2023,16:06:06
I (2469) main_task: Returned from app_main()
I (2549) wifi:mode : softAP (b0:a7:32:08:1f:97)
I (2549) wifi:Total power save buffer number: 16
I (2549) wifi:Init max length of beacon: 752/752
I (2549) wifi:Init max length of beacon: 752/752
I (52399) wifi:new:<1,1>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (52399) wifi:station: bc:f4:d4:4f:25:cf join, AID=1, bgn, 40U
I (52459) eth2ap_example: Wi-Fi AP got a station connected
I (52609) wifi:<ba-add>idx:2 (ifx:1, bc:f4:d4:4f:25:cf), tid:0, ssn:1, winSize:64
I (97809) wifi:station: bc:f4:d4:4f:25:cf leave, AID = 1, bss_flags is 658531, bss:0x3ffb8b1c
I (97809) wifi:new:<1,0>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (97809) wifi:<ba-del>idx:2, tid:0
I (97819) eth2ap_example: Wi-Fi AP got a station disconnected
I (108299) wifi:new:<1,1>, old:<1,0>, ap:<1,1>, sta:<255,255>, prof:1
I (108299) wifi:station: bc:f4:d4:4f:25:cf join, AID=1, bgn, 40U
I (108349) eth2ap_example: Wi-Fi AP got a station connected
I (108409) wifi:<ba-add>idx:2 (ifx:1, bc:f4:d4:4f:25:cf), tid:0, ssn:1, winSize:64
I (153799) wifi:station: bc:f4:d4:4f:25:cf leave, AID = 1, bss_flags is 658531, bss:0x3ffb8b1c
I (153799) wifi:new:<1,0>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (153809) wifi:<ba-del>idx:2, tid:0
I (153809) eth2ap_example: Wi-Fi AP got a station disconnected
I (220469) eth2ap_example: Ethernet Link Down
E (220479) wifi:NAN WiFi stop
I (220479) wifi:flush txq
I (220479) wifi:stop sw txq
I (220479) wifi:lmac stop hw txq
I (230469) eth2ap_example: Ethernet Link Up
I (230479) wifi:mode : softAP (b0:a7:32:08:1f:97)
I (230479) wifi:Total power save buffer number: 16
I (230479) wifi:Init max length of beacon: 752/752
I (230479) wifi:Init max length of beacon: 752/752
I (232469) eth2ap_example: Ethernet Link Down
E (232479) wifi:NAN WiFi stop
I (232479) wifi:flush txq
I (232479) wifi:stop sw txq
I (232479) wifi:lmac stop hw txq
I (234469) eth2ap_example: Ethernet Link Up
I (234479) wifi:mode : softAP (b0:a7:32:08:1f:97)
I (234479) wifi:Total power save buffer number: 16
I (234479) wifi:Init max length of beacon: 752/752
I (234479) wifi:Init max length of beacon: 752/752
I (253389) wifi:new:<1,1>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (253389) wifi:station: bc:f4:d4:4f:25:cf join, AID=1, bgn, 40U
I (253439) eth2ap_example: Wi-Fi AP got a station connected
I (253599) wifi:<ba-add>idx:2 (ifx:1, bc:f4:d4:4f:25:cf), tid:0, ssn:1, winSize:64
I (298789) wifi:station: bc:f4:d4:4f:25:cf leave, AID = 1, bss_flags is 658531, bss:0x3ffb93d8
I (298789) wifi:new:<1,0>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (298799) wifi:<ba-del>idx:2, tid:0
I (298799) eth2ap_example: Wi-Fi AP got a station disconnected
I (370469) eth2ap_example: Ethernet Link Down
E (370479) wifi:NAN WiFi stop
I (370479) wifi:flush txq
I (370479) wifi:stop sw txq
I (370479) wifi:lmac stop hw txq
I (372469) eth2ap_example: Ethernet Link Up
I (372479) wifi:mode : softAP (b0:a7:32:08:1f:97)
I (372479) wifi:Total power save buffer number: 16
I (372479) wifi:Init max length of beacon: 752/752
I (372479) wifi:Init max length of beacon: 752/752
I (470469) eth2ap_example: Ethernet Link Down
 

aZholtikov

Active member
Я подозреваю проблему в этом:
  • All Layer 3 (TCP/IP functions) on the ESP32 are disabled, including the SoftAP DHCP server. This means that devices must be able to access another DHCP server (for example on a Wi-Fi router connected via ethernet) or should use statically assigned IP addresses.
 

ОлегК

New member
Я подозреваю проблему в этом:
  • All Layer 3 (TCP/IP functions) on the ESP32 are disabled, including the SoftAP DHCP server. This means that devices must be able to access another DHCP server (for example on a Wi-Fi router connected via ethernet) or should use statically assigned IP addresses.
Спасибо, aZholtikov,
До этого плату WT32-ETH01 без успеха я соединял по ethernet c ip-камерой со статическим ip-адресом.
Теперь я соединил WT32-ETH01 кабелем к роутеру - и смог подключиться ноутбуком к WiFi-сети eth2ap! С доступом к Интернету.
Как же все таки передать сигнал IP-камеры через WiFi?
 

aZholtikov

Active member
Могу предложить только такой (предположительный) алгоритм проверки возможности подключения (физически проверить не на чем).
Шаг должен быть успешным перед выполнением следующего.
1. При таком подключении с ноутбука можно зайти на роутер по IP (предположим 192.168.1.1)?
2. Подсоединяем камеру во второй LAN роутера. Можно с ноутбука зайти на камеру по ее IP (предположим 192.168.1.139)?
3. Если все успешно соединяем камеру и ESP кабелем (Не забываем, что кабели подключения устройства к роутеру и устройства к устройству отличаются "распайкой". Возможно будет нужен кабель подключения ПК - ПК.). Настраиваем статику на камере и на ESP в части ETH. По идее должно заработать.
 

ОлегК

New member
Спасибо за рекомендации!
1. При таком подключении с ноутбука можно зайти на роутер по IP (предположим 192.168.1.1)?
2. Подсоединяем камеру во второй LAN роутера. Можно с ноутбука зайти на камеру по ее IP (предположим 192.168.1.139)?
3. Если все успешно соединяем камеру и ESP кабелем (Не забываем, что кабели подключения устройства к роутеру и устройства к устройству отличаются "распайкой". Возможно будет нужен кабель подключения ПК - ПК.). Настраиваем статику на камере и на ESP в части ETH. По идее должно заработать.
Шаги 1 и 2 успешны. rtsp-поток камеры, подключенной к роутеру, переданный через кабель и далее через сеть eth2ap, был воспроизведен в VLC на ноутбуке.
Следующий шаг при удалении роутера из схемы не успешен. Сеть eth2ap доступна, но не подключается. Прямой и перекрестный кабель - результат один.
Привожу файл частично sdkconfig. Какие параметры там можно изменить?
Код:
#
# Example Configuration
#
CONFIG_EXAMPLE_WIFI_SSID="eth2ap"
CONFIG_EXAMPLE_WIFI_PASSWORD="12345678"
CONFIG_EXAMPLE_WIFI_CHANNEL=1
CONFIG_EXAMPLE_MAX_STA_CONN=4
# end of Example Configuration

#
# Example Ethernet Configuration
#
CONFIG_ENV_GPIO_RANGE_MIN=0
CONFIG_ENV_GPIO_RANGE_MAX=39
CONFIG_ENV_GPIO_IN_RANGE_MAX=39
CONFIG_ENV_GPIO_OUT_RANGE_MAX=33
CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y
# CONFIG_EXAMPLE_ETH_PHY_IP101 is not set
# CONFIG_EXAMPLE_ETH_PHY_RTL8201 is not set
CONFIG_EXAMPLE_ETH_PHY_LAN87XX=y
# CONFIG_EXAMPLE_ETH_PHY_DP83848 is not set
# CONFIG_EXAMPLE_ETH_PHY_KSZ80XX is not set
CONFIG_EXAMPLE_ETH_MDC_GPIO=23
CONFIG_EXAMPLE_ETH_MDIO_GPIO=18
CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=16
CONFIG_EXAMPLE_ETH_PHY_ADDR=1
# CONFIG_EXAMPLE_USE_SPI_ETHERNET is not set
# end of Example Ethernet Configuration

#
# Ethernet
#
CONFIG_ETH_ENABLED=y
CONFIG_ETH_USE_ESP32_EMAC=y
CONFIG_ETH_PHY_INTERFACE_RMII=y
CONFIG_ETH_RMII_CLK_INPUT=y
# CONFIG_ETH_RMII_CLK_OUTPUT is not set
CONFIG_ETH_RMII_CLK_IN_GPIO=0
CONFIG_ETH_DMA_BUFFER_SIZE=512
CONFIG_ETH_DMA_RX_BUFFER_NUM=10
CONFIG_ETH_DMA_TX_BUFFER_NUM=10
# CONFIG_ETH_IRAM_OPTIMIZATION is not set
CONFIG_ETH_USE_SPI_ETHERNET=y
# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
# CONFIG_ETH_USE_OPENETH is not set
# CONFIG_ETH_TRANSMIT_MUTEX is not set
# end of Ethernet

#
# PHY
#
CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
CONFIG_ESP_PHY_MAX_TX_POWER=20
# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0
# end of PHY
IP-адрес камеры - статический. Можно ли в камере что-то настроить?
 

aZholtikov

Active member
Покопался в документации... По всей видимости выбран не очень верный пример для решения задачи.

Попробуйте этот - Example 2 - Ethernet & WiFi AP, DHCP Server

По моему это то, что нужно (возможно придется "поколдовать" с добавлением нужного сетевого модуля).
 

aZholtikov

Active member
WT32-ETH01 у меня одна и используется по полной (ESP-NOW шлюз).
Через пару дней на подходе W5500. Переведу шлюз на связку ESP32 + W5500 и WT32-ETH01 освободится.
Тема очень интересная. Надеюсь к мартовским праздникам "родится" успешное решение задачи, если меня никто не опередит конечно... ;-)
 
Сверху Снизу