• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

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 не получается. Подгружаю библиотеку - не компилируется, не совместима очевидно.
 
Сверху Снизу