передача больших данных

Emmy

Member
добрый день. мне необходимо с пк отправить много данных а что бы esp8266 смогла их принять и самое главное быстро.

вопрос не как отправить с компьютера , вопрос как организовать прием и насколько это быстро получится
мне нужно передать код ик сигнала:
Raw (68): -24764 1900 -2000 250 -350 250 -350 250 -700 300 -700 300 -300 250 -400 200 -800 200 -800 200 -350 250 -400 200 -750 250 -750 250 -750 250 -750 250 -700 300 -700 250 -400 200 -750 250 -400 200 -350 250 -400 200 -400 200 -800 200 -800 200 -350 250 -350 250 -350 250 -700 300 -300 250 -750 250 -400 200 -400 200

за один пакет я явно не передам. посоветуйте как быть и быстро ли это будет. не нужно ли будет ждать 5 секунд прежде чем удаленно я на телевизоре громкость сделаю +1 например :)
надо как бы быстро/мгновенно
 

bg13

New member
добрый день. мне необходимо с пк отправить много данных а что бы esp8266 смогла их принять и самое главное быстро.

вопрос не как отправить с компьютера , вопрос как организовать прием и насколько это быстро получится
мне нужно передать код ик сигнала:
Raw (68): -24764 1900 -2000 250 -350 250 -350 250 -700 300 -700 300 -300 250 -400 200 -800 200 -800 200 -350 250 -400 200 -750 250 -750 250 -750 250 -750 250 -700 300 -700 250 -400 200 -750 250 -400 200 -350 250 -400 200 -400 200 -800 200 -800 200 -350 250 -350 250 -350 250 -700 300 -300 250 -750 250 -400 200 -400 200

за один пакет я явно не передам. посоветуйте как быть и быстро ли это будет. не нужно ли будет ждать 5 секунд прежде чем удаленно я на телевизоре громкость сделаю +1 например :)
надо как бы быстро/мгновенно
Во-первых, непонятно через что вам надо отправлять данные UART? UDP? TCP? HTTP?
Во-вторых, почему это не влезет в пакет? Всего 272 байта.
В-третьих, имеет смысл сжать данные - окромя первого числа, все остальное делиться на 50 (38, -40, 5, -7, 5, -7, 5, -14, 6, -14, 6, -6, 5, -8, 4, -16, 4, -16, 4, -7, 5, -8, 4, -15, 5, -15, 5, -15, 5, -15, 5, -14, 6, -14, 5, -8, 4, -15, 5, -8, 4, -7, 5, -8, 4, -8, 4, -16, 4, -16, 4, -7, 5, -7, 5, -7, 5, -14, 6, -6, 5, -15, 5, -8, 4, -8, 4). Итог - 71 байт.
В-четвертых, имеет смысл определить протокол ик, тогда, скорее всего, можно обойтись десятком байт.
В-пятых, 5 секунд не получиться в любом случае, если, конечно, все правильно написано. Самая главная задержка здесь - длинна самого ик сигнала.
 

Emmy

Member
bg13, спасибо за ответ - вы меня немного обнадежили
1) придется передать от 1 ардуине ко вротой через UDP, т.к. TCP он где то секунды 3 принимает.
2) тогда сколько максимальная длинна пакета в байтах?
3) первое число - большое - не имеет полезной информации. это привел пример. полезная информация начинается с маленьких цифр. делаить на 50 я опасаюсь т.к. если код какого нибудь пульта не будет делиться на 50 устройство будет не рабочим.. и еще знак минус превращается в плюс. т.е. минус опускается.
4) устройства разные. интересует именно дамп
5) самая главная задержка в 2х местах. 1) установка соденинения если это TCP, 2) передача полученных данных ардуине если скорость 9600 софтовая например. использовать только мегу? 3) деление пакетов? (ну если не нужно... то отпадает). вообще я передавал как строчку. видимо надо было создать массив..?

пожалуйста прошу так же развернуто все прокоментировать. это важно для меня
 

bg13

New member
bg13, спасибо за ответ - вы меня немного обнадежили
1) придется передать от 1 ардуине ко вротой через UDP, т.к. TCP он где то секунды 3 принимает.
2) тогда сколько максимальная длинна пакета в байтах?
3) первое число - большое - не имеет полезной информации. это привел пример. полезная информация начинается с маленьких цифр. делаить на 50 я опасаюсь т.к. если код какого нибудь пульта не будет делиться на 50 устройство будет не рабочим.. и еще знак минус превращается в плюс. т.е. минус опускается.
4) устройства разные. интересует именно дамп
5) самая главная задержка в 2х местах. 1) установка соденинения если это TCP, 2) передача полученных данных ардуине если скорость 9600 софтовая например. использовать только мегу? 3) деление пакетов? (ну если не нужно... то отпадает). вообще я передавал как строчку. видимо надо было создать массив..?

пожалуйста прошу так же развернуто все прокоментировать. это важно для меня
1. UDP в данном случае - правильный выбор, если пакет потеряется/поломается - это не критично, можно еще раз кнопку нажать.
2. Для UDP гарантированный размер пакета 512 байт, можно и больше, но зависит от оборудования, а я с размером UDP пакета для ESP8266 не экспериментировал.
3. Скорее всего можно делить на 50, т.к. это временные задержки, а они связаны с частотой несущей для ик. Т.е. для устройства приемника 480 или 500 - все равно.
4. А как быть с разными частотами? Если мне не изменяет память, то есть 36 кГц, 38 кГц и еще какие-то.
5. Вы используете AT прошивку? И, видимо, SoftSerial для создания 2-го UART? Я бы на вашем месте выкинул AVR и не зависел от UART. Тем более, что есть Arduino IDE для ESP8266. (по-моему, ик либа уже есть) То есть так - ESP с ик-приемником >>WIFI >> ESP c ик-передатчиком.
6. Массив имеет смысл создать - передавать надо числа а не символы.
 

pvvx

Активный участник сообщества
2. Для UDP гарантированный размер пакета 512 байт, можно и больше, но зависит от оборудования, а я с размером UDP пакета для ESP8266 не экспериментировал.
= один MSS (размер пакета), MSS во всех SDK = 1460 байт. Определяется в опциях LwIP, пример: https://github.com/pvvx/esp8266web/blob/master/app/include/lwipopts.h#L937
Если работаете с espconn из SDK очень старых версий, то там ограничение было в 1024 байта и именно у espconn, а не у системы.
В новых SDK есть либа liblwip_536.a - у неё отличие именно в размере MSS = 536 байт.
 
Последнее редактирование:

Emmy

Member
максимальная длинна кода 500 байт я ставлю (после правки библиотеки ИК в ручную с 100)
4) а что может быть сразными частотами? я передаю 38 или 36 в начале пакета на такой и моделирую и еще количество повторов передаю. 5 раз повторить код на частоте 36. или 1 раз на частоте 38кгц
5) я использую ардуинку. использовал мегу т.к. в ней есть UART хардварный.
6) пожалуйста мини пример так будет выглядить? грубо гворя
int TV[255]
TV[1]=..
TV[2]..
заполнил
esp8266.Println(TV,DEX) /Отправка??? так передается массив?
?????

спасибо за инфу о пакетах - уже хорошо
 

pvvx

Активный участник сообщества
В сети масса рабочих проектов с приемом в буфер по UDP для отображения на светодиодных лентах.
Смотрите 'tmp2net' и всякие ws2812 и подобное...
Как я понял у вас отличие только в том, что принятые данные направляются в драйвер ИК, а не на светодиодную ленту...
Пример для чистого SDK уже просили и делал https://github.com/pvvx/esp8266web/blob/master/app/user/tmp2net.c
Вариантов масса.
 
Последнее редактирование:

bg13

New member
= один MSS (размер пакета), MSS во всех SDK = 1460 байт. Определяется в опциях LwIP, пример: https://github.com/pvvx/esp8266web/blob/master/app/include/lwipopts.h#L937
Если работаете с espconn из SDK очень старых версий, то там ограничение было в 1024 байта и именно у espconn, а не у системы.
В новых SDK есть либа liblwip_536.a - у неё отличие именно в размере MSS = 536 байт.
Спасибо за информацию, значит, по-минимуму, получается 20 байт заголовок + 512 тело. По консервативному умолчанию.
 

bg13

New member
максимальная длинна кода 500 байт я ставлю (после правки библиотеки ИК в ручную с 100)
4) а что может быть сразными частотами? я передаю 38 или 36 в начале пакета на такой и моделирую и еще количество повторов передаю. 5 раз повторить код на частоте 36. или 1 раз на частоте 38кгц
5) я использую ардуинку. использовал мегу т.к. в ней есть UART хардварный.
6) пожалуйста мини пример так будет выглядить? грубо гворя
int TV[255]
TV[1]=..
TV[2]..
заполнил
esp8266.Println(TV,DEX) /Отправка??? так передается массив?
?????

спасибо за инфу о пакетах - уже хорошо
4. Приемник на 38 может не схватить команды на 36 кГц. И наоборот.
6. Если это посылка буфера по UART для arduino, тогда см. https://www.arduino.cc/en/Serial/Write
 

pvvx

Активный участник сообщества
Спасибо за информацию, значит, по-минимуму, получается 20 байт заголовок + 512 тело. По консервативному умолчанию.
Неа. По минимуму для современного сетевого оборудования - 1460 байт, максималка уже далеко за 64 килобайта. Та библиотека с 536 - это извращение от китайцев для оборудования до 1988 года :).
Подробнее
http://www.cyberguru.ru/networks/protocols/ip-fragmentation-page3.html
https://ru.wikipedia.org/wiki/Maximum_transmission_unit
 
Последнее редактирование:

Emmy

Member
хорошо, в принципе мне всего лишь нужно изменить способ передачи в моей текущей прошивки.
если я передавать буду так же символвами . например букву A= то его код равен 65. соотвественно грубо говоря передам ASBSJWNADBASAS и декодирую потом эти данные на массив 65 184 54 и т.д.
вопрос это так же будет занимать 1 байт? 1 символ = байту? при передачи ввиде строки . не особо хотелось усложнять скетч.
 

Emmy

Member
пока что мои тесты. взял крутяшный пульт который имеет базу с кодами от разной техники. и запустил излучение с него. я собрал в ком порте 20000 импульсов. отсортировал в ексель.
минимальный импульс 50, максимальный 8950. если делить на 50 то получается 179. все в пределах.... интересненько
 

Emmy

Member
что бы знать на сколько делить что бы сжать данные которые собираюсь передавать.. действительно получается делить можно на 50 для сжатия ..... ведь на выходе получается с учетом пиков все возможной техники - число от 0 до 117. т.е. 1 байт. проверял совет данный мне постом выше. Отличный совет. огромное спасибо.
но вот с передачей вы меня обманули :)
вот тест.

я передаю по UDP пакет. там тупо цифры от нуля до 9. выяснял сколько влазает в один пакет за одну передачу. как я писал выше я планировал декодировать единичку по таблице асски и получить число от нуля до 255, что бы потом умножить на 50 и передать в драйвер ИК.
но увы мне удалось передать за один раз только 54 байта. почему? вопрос к экспертам.
 

Emmy

Member
оказывается нужно тоже увеличивать скорость для Serial. не только у вай фая.
я то просто для вай фая поднял макс скорость до 115200, а вот на порту USB не поднял ( было 9600) который выводит информацию о принятых пакетах
как только я это сделал - я стал видеть что принимаю гораздо больше пакетов... чем мне писал Serial
Где же вы были раньше .... я так мучался

 
Последнее редактирование:

Emmy

Member
pvvx, я на меге сделал... все отлично. телевизор включается и выключается.
а теперь скачал ардуино IDE для esp8266 и смог там прием и передачу сделать UDP с компьютера.очень быстро все работает.
теперь как мне подключить Irremote к ардуино IDE для esp8266
что делать...!?..........
 

kod.begemot

New member
Вот у меня почти то же самое, на дуине сделал, а вот с ESP не получается. Подгружаю библиотеку - не компилируется, не совместима очевидно.
 
Сверху Снизу