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

Делюсь опытом stm32 esp8266 ат команды самодельная wifi камера

STM32 wifi камера
Детали:stm32f4, ov2640 камера и esp01 за 1 бакс)
Использую режим transparent transmission mode
В видео используется скорость 921600 бод .Сейчас поднял до 2000000 это даже не половина от максимальной заявленной Baudrate range: 110 to 115200*40 (4.608 Mega).
Картинка JPEG 800x600 в среднем весит 14килобайт передача занимает на скорости в 2ляма 100ms.
Сейчас работаю над оптимизацией работы с DMA, должно убрать еще 100-200 ms на захват данных в во фреймбуфер.Я тестировал ESP32 камеру так там 2-6 кадров было 800 на 600 .Это уже на данные момент сравнимо с моими результатами.
 

Алексей.

Active member
На esp32 пробрасывал rtp видео поток, получаемый с другого mcu.
Из за неожиданных лагов, картинка начинает разваливаться (на 264-м кодеке из-за запоздавших слайсов вылезают неприятные артефакты), работает не стабильно, может начать разваливаться через 5 минут или через минуту.
В общем такое не продать, пришлось отказаться от этого модуля.
 

pvvx

Активный участник сообщества
На ESP8266 уходит много ресурсов (тактов CPU) на задачу помещения данных в RAM с внешних интерфейсов без использования DMA (есть жалкое подобие) и нет места для необходимой буферизации видео-потока к средним рабочим условиям WiFi. У ESP32 аналогично - желательного объема буфера для видео низкого разрешения нет.

ESP позволяют передавать необходимый поток исключительно из своей QSPI-Flash. При этом среднестатистическая скорость TCP находиться в пределах 1МБ в сек, а при UDP – 1.2..1.5 МБ при условии работы ESP8266 на 160 МГц, близкой зоне AP, одного участника - данной ESP и роутера + довольно чистого эфира рабочего канала WiFi. Чего в городе – “днем с огнем не сыщешь”.
 

pvvx

Активный участник сообщества
В видео используется скорость 921600 бод .Сейчас поднял до 2000000 это даже не половина от максимальной заявленной Baudrate range: 110 to 115200*40 (4.608 Mega).
Непрерывный поток данные с COM порта в TCP выше 3-х мегабит ESP8266 не протягивает. UART сидит на общей низко-скоростной шине и масса тактов CPU уходит на выемку блоков из его FIFO. В идеальных условиях (ESP8266 и роутер в железном ящике) получите к пределу 5 Мбит UART.
Картинка JPEG 800x600 в среднем весит 14килобайт передача занимает на скорости в 2ляма 100ms.
А когда его обрабатывать - прилеплять заголовки, и передавать по WiFi?
 
Непрерывный поток данные с COM порта в TCP выше 3-х мегабит ESP8266 не протягивает. UART сидит на общей низко-скоростной шине и масса тактов CPU уходит на выемку блоков из его FIFO. В идеальных условиях (ESP8266 и роутер в железном ящике) получите к пределу 5 Мбит UART.

А когда его обрабатывать - прилеплять заголовки, и передавать по WiFi?
На 3Мегабит на вышло. действительно возникли проблемы.Добился 5 кадров в секунду на 2мегабитах (800x600),(двойной фрейм буфер пока первая часть передается ,вторая наполняется ,). Приблизительный размер картинки указывал.
Я тестировал ESP32CAM там 2-7 FPS. Я считаю, что у меня очень не плохой результат.

Есть альтернативные прошивки , чтобы еще чуточку выжать?Или 3Мегабита, это придел из-за низко скоростной шины.

Может есть вариант прошивки,моста SPI-WIFI? И что из этого соединения можно получить ?

Картинки идут в JPEG можно даже в браузере их "проигрывать" нужно просто необходимые заголовки дабовалять.
Но в режиме моста не выйдет.А так картинки на лету обрабатываются openCV, у каждой картинки есть признак начало и конец JPEG .Программа ищет начало и конец показывает и удаляет обработанные из принятых TCP пакетов.
 

Алексей.

Active member
Может есть вариант прошивки,моста SPI-WIFI? И что из этого соединения можно получить ?
На одном ядре что у esp8266, собрались и wifi и интенсивный поток с spi получать? Драйвер wifi всё может испортить. Начали на spi транзакцию и в это время драйвер wifi подожрал ресурсы и с spi получили каку.
 

pvvx

Активный участник сообщества
На одном ядре что у esp8266, собрались и wifi и интенсивный поток с spi получать? Драйвер wifi всё может испортить. Начали на spi транзакцию и в это время драйвер wifi подожрал ресурсы и с spi получили каку.
Это как выйдет "кака" при SPI мастер на ESP?
У ESP8266 есть конфигурация как у обычного внешнего модуля WiFi на шину типа "обгрызанной" SDIO (QSPI)...
C Flash на шине QSPI ESP8266 без проблем передает непрерывный поток в 1 мегабайт в TCP, что есть к 8 Мбит в сек.
 

pvvx

Активный участник сообщества
Разбор с SPI ESP8266 был в 2015 году и я уже многое не помню, но помню, что на Arduino вам не достичь даже 1 мегабайта в сек, т.к. необходимо корректировать всё, включая доп. команды компилятору и свои драйвера для SPI на чистом СИ (или ASM :))
 

Алексей.

Active member
Это как выйдет "кака" при SPI мастер на ESP?
У ESP8266 есть конфигурация как у обычного внешнего модуля WiFi на шину типа "обгрызанной" SDIO (QSPI)...
C Flash на шине QSPI ESP8266 без проблем передает непрерывный поток в 1 мегабайт в TCP, что есть к 8 Мбит в сек.
Нее, у меня esp32 слейвом работал, таск что с spi-ем работал, был на первом ядре, на нулевом ему wifi драйвер мешал.
Без проблем и 2 мегабайта (точнее 1.8-1.9) получалось.
 

pvvx

Активный участник сообщества
Нее, у меня esp32 слейвом работал, таск что с spi-ем работал, был на первом ядре, на нулевом ему wifi драйвер мешал.
Без проблем и 2 мегабайта (точнее 1.8-1.9) получалось.
В чистом поле, с одним устройством у роутера в метре :)
1.8-1.9 мегабайта - это пиковое значение при TCP у ESP32, примерно равное UDP, когда все ACK ложатся ровно и передается от двух полных пакетов на 1 ACK...
При этом чип нехило греется, если AP удалена и возможен троттлинг.
 

Алексей.

Active member
В чистом поле, с одним устройством у роутера в метре :)
1.8-1.9 мегабайта - это пиковое значение при TCP у ESP32, примерно равное UDP, когда все ACK ложатся ровно и передается от двух полных пакетов на 1 ACK...
При этом чип нехило греется, если AP удалена и возможен троттлинг.
По этим причинам модуль заменен иа медиатек ;)
 
2Mbit в режиме transparent transmission mode моде работает практически без ошибок.Этого за глаза чтобы передать 6FPS 800x600, как у ESP32CAM но пока у меня 2-3 FPS.Где то есть проблемы , вопрос решается надеюсь все выгорит и сравним две камеры на разных архитектурах)
 

pvvx

Активный участник сообщества
2Mbit в режиме transparent transmission mode моде работает практически без ошибок.Этого за глаза чтобы передать 6FPS 800x600, как у ESP32CAM но пока у меня 2-3 FPS.Где то есть проблемы , вопрос решается надеюсь все выгорит и сравним две камеры на разных архитектурах)
2Mbit это 195 килобайт в сек. 2000000/10/1024=195.3125
Картинка JPEG 800x600 в среднем весит 14килобайт
195.3/14=13.95 кадров.

При “transparent transmission mode” от Espressif с буфером в 2 килобайта (2048 байт) влезает в 2 TCP пакета. Один полный (1460 байт) и один заполнен на треть (588 байт).
В итоге дикие потери на формирование, разбивку на пакеты, ожидания ACK... Ну это Espressif – у них всё так :)

ESP8266 AT Instruction Set: Enter transparent transmission, with a 20-ms interval between each packet, and a maximum of 2048 bytes per packet.

Если считать, что передача занимает нуль мс, то Espressif заявляет, что в секунду в их AT “transparent transmission mode” передается всего 5 пакетов по 2048 байт.
2048*5 = 10240 байт в сек всего... :)

Возьмите хотя-бы устаревшую Прошивка TCP2UART переходника с настройкой по Web и там без проблем сможете заливать в UART 3 мегабита сплошным потоком или 10 мегабит но уже блоками... но лучше найдите более современный вариант TCP-UART...
 
Возьмите хотя-бы устаревшую Прошивка TCP2UART переходника с настройкой по Web и там без проблем сможете заливать в UART 3 мегабита сплошным потоком или 10 мегабит но уже блоками... но лучше найдите более современный вариант TCP-UART...
Хотел обойтись АТ командами но все-таки придется пробовать другие прошивки.Залил сегодня фото в память МК(STM32) и гонял его на разных скоростях на 2Mbit с 20 ms на каждый 2048 байт более и менее но этого не достаточно для меня( Не хватает чуть чуть) судя по логам моей программы.
До этого был написан тест передачи байт, каждый байт различался на единицу . На принимающей стороне контролировалась разница между байтами по модулю равна =1 либо 255 тест прошел нормально и без задержек на скорости 2 Мбита и я уперся, что все должно быть ОК 5 FPS не проблема для ESP01 и дело не в передаче пакетов.
 
@pvvx но 2FPS она все таки выдает) и без задержек .Спасибо буду пробовать альтернативные прошивки.
 
@pvvx скачал fullflash_and_webfs_054a залил оба файла.
настройки не менял, кроме как Baud 2000000.Подключаюсь с компа к TCP серверу порт 12345 стандартные настройки .Пока все печально возможно, что из за того, что я использовал модуль см фото.(там UART_TTL переходник на плате его не отключить) либо еще чего надо в настройках?wifi.jpg uart.jpg FUHCR7XIVO7W21V.LARGE.jpg
 
@pvvx дошел до 15 страницы, а там "Для ускорения работы Web до 1 Мегабайта в сек требуется отключать отладочные сообщения. Иначе скорость TCP падает ниж 500 кило в сек, даже если DEBUG UART выставлена на 3 000 000 Baud."

Попробую ....
 
Все печально.Перенастроил на 3076923

Отключил все делаю простой тест с мк вывожу фото которое загрузил в память мк на скорости 3076923.


Debug выключил в логах wireshark вроде все норм.не использую CTS/RTS так в ESP01 их не будет.На изображении дефекты. и обновляется как оч медленно.А должно около 5 FPS.
Код:
while(1){
      if(DEBUG)printf("start tx %d ms\r\n",currentTimeMs);
           for(i = 0; i < 16081; i++)    {//test 2
             USART3_Transmit(foto[i]);
             //if(i%2048==0)Delay(25);
         }
         if(DEBUG)printf("stop tx %d ms\r\n",currentTimeMs);   
         Delay(100);
}
За секунду успевает приходить 10 пакетов 1514, 1460*10=14600 в секунду, а я вроде как передаю в 5 раз больше?
Где я накосячил) похоже не настроен мой уарт на 3Мбита,
да нет по логам все ок

start tx 1913 ms
stop tx 1980 ms
start tx 2080 ms
stop tx 2147 ms
start tx 2247 ms
stop tx 2314 ms
start tx 2414 ms
stop tx 2481 ms
start tx 2581 ms
stop tx 2648 ms
start tx 2748 ms
stop tx 2815 ms
start tx 2915 ms
stop tx 2982 ms
start tx 3082 ms
stop tx 3149 ms
start tx 3249 ms
stop tx 3316 ms
start tx 3416 ms
stop tx 3483 ms
start tx 3583 ms
stop tx 3650 ms
start tx 3750 ms
stop tx 3817 ms
start tx 3917 ms
stop tx 3984 ms
start tx 4084 ms
stop tx 4151 ms
start tx 4251 ms
stop tx 4318 ms
start tx 4418 ms
stop tx 4485 ms
start tx 4585 ms
stop tx 4652 ms
start tx 4752 ms
stop tx 4819 ms
start tx 4919 ms
 

Вложения

Прочитал с 1 по последнюю)) https://esp8266.ru/forum/threads/proshivka-tcp2uart-perexodnika-s-nastrojkoj-po-web.146/
автор проделал большую работу и все его зае... своими жалобами.
Залил fullflash_and_webfs_061 для ESP01 все настройки по умолчанию, кроме скорости UART 3076923. Выдает 5 FPS работает замечательно, лаги иногда есть.Это скорее из за того, что не используются CTS/RTS и перезаписываю не отправленный буфер ESP01 .
Спасибо автору за проделанную работу.
 
Сверху Снизу