Сколько FPS я теоретически могу получить при потоковой передаче кадров с OV7670 при такой настройке?

Настройка:

OV7670 -> STM32F103... --USART--> ESP01 --UDP--> Gateway --> Internet --> Server

Я хочу добиться потоковой передачи в реальном времени.

Вот мой анализ:

  • Согласно техническому описанию OV7670, камера поддерживает 30 кадров в секунду для изображения 640×480.

  • Основываясь на спецификации ESP8266 (ESP01) и используя встроенную прошивку с AT-командами, я могу включить прозрачный режим для UART-WIFI по UDP. Это означает, что все данные, входящие от микроконтроллера через UART, будут напрямую пересылаться на сервер по UDP.

  • В техническом описании также указано, что AT-команды могут регулировать скорость передачи данных до максимального значения 115200×40 бод. Если один бод представлен 9 битами (включая 1 стоповый бит), то теоретическая скорость передачи данных составляет 41,472 Мбит/с. В целях безопасности используйте скорость передачи данных 115200×39 бод, при этом теоретическая скорость передачи данных составляет 4,4928 Мбит/с.

  • Поскольку я использую UDP в качестве транспортного протокола, мне необходимо ограничить размер буфера UDP. Вдохновившись видеотрансляциями YouTube, которые также используют UDP, я обнаружил, что 1357 байт — это эффективный размер пакета при анализе с помощью Wireshark.

  • Если я настрою OV7670 в формате RGB555 (15 бит), то 1 пиксель = 16 бит = 2 байта, оставляя 1 неиспользуемый бит в качестве старшего значащего бита (MSB) первого байта.

  • Чтобы максимально эффективно использовать неиспользуемый один бит, я планирую использовать его как флаг начала кадра. Если значение равно нулю, пиксель не является началом нового кадра; если значение равно единице, он обозначает начало нового кадра.

  • Используя этот поток байтов, задача микроконтроллера как буфера кадра (я предпочитаю говорить «байтовый буфер») заключается в том, чтобы просто пересылать по 1357 байтов с камеры (включая установку флага-индикатора кадра) в USART через DMA для ускорения процесса, поскольку это прямой доступ к памяти. Микроконтроллер ждёт заполнения буфера (до 1357 байтов), прежде чем отправить его в ESP8266.

  • Сервер преобразует этот поток байтов в кадры изображений, учитывая, что он понимает пользовательский протокол.

  • Каждый кадр потребует 320×240×2 160×120×2 байт для QVGA QCIF, или 1,2288 0,3072 Мбит на кадр. Следовательно, 30 кадров в секунду = 36,864 Мбит/с 15 кадров в секунду = 4,608 Мбит/с, что вполне соответствует пропускной способности USART-WIFI UDP чипа ESP8266 4,4928 Мбит/с.

Есть ли что-то, что я упустил в настройках/расчётах? Предположим, что сеть надёжна, а потери UDP-пакетов допустимы (обрабатываются сервером).

, 👍-1

Обсуждение

Если вам нужна производительность, почему бы не заменить схему хост STM32 -> модем ESP8266 на ESP32-S3? ESP8266 — одноядерный процессор, а UART очень медленный..., @hcheung

@hcheung экономическая эффективность, я видел на рынке использование esp8266+stm32f103+ov7670 дешевле, чем напрямую esp32-cam., @Muhammad Ikhwan Perwira

@hcheung Можете ли вы объяснить, почему вы сказали, что UART очень медленный?, @Muhammad Ikhwan Perwira

Вы до смешного переоцениваете производительность и возможности ESP8266. Ему приходится выполнять огромный объём вычислений для анализа AT-команд, декодирования текста в двоичные данные, многократного копирования отправляемых данных и поддержки сетевого стека. И вы не собираетесь запускать его последовательный порт на скорости «115200×40 бод», что бы это ни значило. 1 бод не «представлен 9 битами, включая стоповый бит»; в данном случае 1 бод означает 1 бит. Ваши оценки сильно расходятся с реальностью. А @hcheung говорит, что UART очень медленный, потому что он очень медленный. ESP8266 — неподходящий выбор для ваших целей., @romkey

@romkey Я обновил свои расчеты, они все еще смешные?, @Muhammad Ikhwan Perwira

Что делать, если я использую 8-битный GPIO на esp12 (esp8266), а затем пересылаю на UDP после буферизации 1357 байт?, @Muhammad Ikhwan Perwira

@MuhammadIkhwanPerwira 115200 бит/с — это биты в секунду, то есть 115200 / 10 бит (8 бит + 1 стартовый бит + 1 стоповый бит) = 11520 байт в секунду. Какую бы скорость потоковой передачи вы ни выбрали, последовательный порт станет узким местом., @hcheung

@hcheung Хост отправляет по 1357 байт. Оставляя много места размером 115200-1357 байт., @Muhammad Ikhwan Perwira

@hcheung Итак, узкое место — вычислительная мощность? Общий процессор или сетевой интерфейс внутри esp8266?, @Muhammad Ikhwan Perwira

Почему бы вам не попробовать? Иначе это просто самоисполняющееся пророчество., @hcheung

Хорошая идея, но, пожалуй, последую вашему совету использовать ESP32 (только чип). Оказывается, плата для разработки действительно дорогая, но дешёвая для чипа., @Muhammad Ikhwan Perwira


1 ответ


-1

Цитата из документации

Поскольку по умолчанию для связи между ESP-AT и главным микроконтроллером используется UART, а скорость передачи данных составляет 115200 бод. На аппаратном уровне верхний предел скорости передачи данных составляет 5 Мбит/с. Поэтому, если ожидается, что пропускная способность будет менее 5 Мбит/с, пользователь может использовать UART по умолчанию в качестве средства связи с главным микроконтроллером, при этом можно применить следующие методы оптимизации.

Другими словами, поскольку входящий поток составляет 4 Мбит/с, то просто используйте скорость 115200 бод.

Но речь шла об esp32, возможно, он похож на esp8266.

Также обратите внимание на интервал передачи AT+TRANSINTVL, который указывает на интервал между размерами UDP-пакетов. Мне нужно установить его равным 0, что означает, что данные сразу после получения от хоста (MCU) будут просто пересылаться в интернет.

Также отключите AT+SYSMSGFILTER=0 https://docs.espressif.com/projects/esp-at/en/latest/esp32/AT_Command_Set/Basic_AT_Commands.html#cmd-sysmsgfilter

Привет! Пропускная способность, которую мы протестировали в режиме сквозной передачи AT UART-WiFi, следующая: Пропускная способность TCP: AT TCP passthrough Tx 303 Кбит/с; Rx 302 Кбит/с при скорости передачи 420000 бод Пропускная способность UDP: сквозная передача UDP 250 Кбит/с; прием 250 Кбит/с при скорости передачи 420000 бод

Источник: https://bbs.espressif.com/viewtopic.php?t=2187

,

Как поток 4 Мбит/с преобразуется в скорость 115200 бод? В процитированном вами тексте этого нет., @StarCat