Anonymous
Dony
Это первая проблема, которую я сам за 4 часа поиска не смог решить
Dony
Да не воинствующий я... У меня реально нет времени учить с нуля си... На работе я хотя бы тоже на питоне скрипты пишу и немного в нем шарю. Си это новый мир и пока на это просто нет времени...
Dony
И потом весь этот адруиновский ide это тоже тот ещё геммор. Thonny простой как двери и в нем легко кодить.
Max
PlatformIO возьми. Ардуиновское IDE - не IDE, так, блокнот с подсветкой.
Dony
Так всё... Blynk для меня умер. Один умный индус посоветовал adafruit... Начну завтра смотреть что это такое. Но оно умеет в микропитон.
Max
Если в РФ, то у меня для тебя неприятные новости...
Quiero vivir en España
Доброй ночи. 40 КБайт ОЗУ ESP8266 заняты массивом char data [40960];, куда круглосуточно пишутся данные. Массив закольцован и, поскольку постоянно занят весь, нет смысла указывать его конец (где начало, там и конец, на 1 меньше). Указал первый символ: int start = 20961; Вывести его в Serial легко: for (int i = 0; i<4096;i++){ int p = i+start; if (p>=4096){p=p-4096;} Serial.print(data[p]); } Не проверял, но должно работать. Я же работаю с вебсокетом и передавать 4096 раз по 1 байту ESP не хочет, в консоли браузера ошибка - соединение закрыто. Вопрос: как передать мои данные за один раз начиная с условного 20961 символа по 20960. Вроде, data+start выведет массив начиная с 20961 символа по 4096. Но это лишь половина массива.
Anonymous
Так ему уже сегодня говорили про блок
Max
Оно что не работает?
Да, подбанили всю страну после известных событий.
Max
А vpn?
Можно, если не лениво
Max
Доброй ночи. 40 КБайт ОЗУ ESP8266 заняты массивом char data [40960];, куда круглосуточно пишутся данные. Массив закольцован и, поскольку постоянно занят весь, нет смысла указывать его конец (где начало, там и конец, на 1 меньше). Указал первый символ: int start = 20961; Вывести его в Serial легко: for (int i = 0; i<4096;i++){ int p = i+start; if (p>=4096){p=p-4096;} Serial.print(data[p]); } Не проверял, но должно работать. Я же работаю с вебсокетом и передавать 4096 раз по 1 байту ESP не хочет, в консоли браузера ошибка - соединение закрыто. Вопрос: как передать мои данные за один раз начиная с условного 20961 символа по 20960. Вроде, data+start выведет массив начиная с 20961 символа по 4096. Но это лишь половина массива.
Если ты делаешь кольцевой буфер, то правильнее держать два указателя - один на чтение, другой на запись, чтобы случайно не вычитать больше, чем уже записалось и не огрести повторно старые данные. Кормить вэбсокет проще бакетами, например, по килобайту, чтобы в пакет влезали. К слову, есть такая операция - остаток от деления, она проще и дешевле if. Будет как-то так i = (i + STEP) % BUFFER_SIZE;
Quiero vivir en España
Это понятно. Ты за раз все 40к пишешь?
Да. Пробую - очень шустро работает.
Max
А выгружаешь тоже разом 40к?
Max
А если один тред начал писать, а второй еще не дочитал?
Quiero vivir en España
А выгружаешь тоже разом 40к?
В ESP данные приходят байт по 100-200, затирая старые.
Max
Ну т.е. если повторно старые данные прилетят - не западло?
Quiero vivir en España
А если один тред начал писать, а второй еще не дочитал?
40 кбайт пополняются блоками по 150 байт
Quiero vivir en España
Ну т.е. если повторно старые данные прилетят - не западло?
У данных есть ID, отдельный массив. Прилетают данные с существующим ID - просто игнорирую.
Max
i = (i + STEP) % BUFFER_SIZE; Так быстрее что ли будет?
Не сильно. Просто обычно так делают.
Max
Проблема, как я понял, не от этого
Max
Ну и на границу 4 байт тож полезно выровнять.
Quiero vivir en España
Собственно, вопрос. Могу ли я без дополнительных переменных разбить массив char data[40960] на два блока: 1. один - с 20000 символа по 40960, 2. второй - с нулевого по 19999? На первый вопрос, кажется, знаю ответ: data+20000 - это указатель на 20000-й элемент массива. А вторая часть как?
Quiero vivir en España
А зачем разбивать? Хренарь прям целиком в вэбсокет
Как? Мне важно начать с определённого места.
Quiero vivir en España
Имя массива и есть указатель на начало
А мне нужно не с начала, а с 20000 символа до 40960, а потом с 0 по 19999.
Max
А какой тип массива?
Quiero vivir en España
char
Max
char *start_ptr = p + 20000; len_start = 20960; char *next_ptr = p; len_next = 20000;
Max
Но это не совсем правильно
Max
Спецвикторина - почему? Олды - молчать.
Max
Да-да, клоуна нужно ставить)
Quiero vivir en España
char *start_ptr = p + 20000; len_start = 20960; char *next_ptr = p; len_next = 20000;
Вы только указатели и переменные объявили. А вывести (передать функции) как?
Max
Вы только указатели и переменные объявили. А вывести (передать функции) как?
Выести в вэбсокет? Ну камон, это ж гуглится. write какой-нибудь.
Max
ws.binary((uint32_t)client_id, (uint8_t*)binary, (size_t)len);
Max
Если сокет бинарный
Quiero vivir en España
Выести в вэбсокет? Ну камон, это ж гуглится. write какой-нибудь.
Вы, видимо, не поняли вопроса Ещё раз: websocket.sendTXT(1, data); отправляет клиенту 1 весь массив data с 0 по 40000 символ. Мне же нужно отправить data с 20000 по 19999 символ. И да, повторный вызов sendTXT разрывает соединение. Пишут, что между вызовами должно пройти 200 мсек.
Max
Нуль-терминированные строки, привет К&Р.
Max
Кстати, странно, у вэбсокета вроде должен быть метод засылки с длиной.
Max
Тогда можно без нуль-терминации
Quiero vivir en España
Max
Двумя пачками, да
Dony
Можно, если не лениво
Заработало 😀👍 Адафрукт рулит.
Max
Заработало 😀👍 Адафрукт рулит.
Поздравляю. Слабо впн на еспхе замутить?))
Anonymous
Приветствую вас. Появилось нескольк мест в арбитражной команде,набирают людей на пролив конкретной связки. Если опыта нет пройдёте обучение в формате совместного пролива. Для работы предоставляем практически весь рабочий материал,деньги под контроль не берём
Dony
Поздравляю. Слабо впн на еспхе замутить?))
Не всё сразу... Для начала нужно прочитать маны и посмотреть несколько умных индусов...
Anonymous
Приветствую вас. Появилось нескольк мест в арбитражной команде,набирают людей на пролив конкретной связки. Если опыта нет пройдёте обучение в формате совместного пролива. Для работы предоставляем практически весь рабочий материал,деньги под контроль не берём
@
Не всегда. Вот возьми наушники. Телефон лежит заблокированный и с выключенным экраном. Наушники достал из коробка и они таки тудунь подключились
Когда речь про BLE то про тот старый аудио-блютуз а также старые беспроводные компорты сразу забываем, BLE протокол медленный и в наушники оно не умеет. Только относительно редкие пакеты. Либо advertising + последующий коннект с обменом, либо режим маяка beacon
@
Сделал сопряжение на ble телефона и esp32. Как теперь сделать авто Коннект или получить индикацию что спаренный телефон рядом?
Спаренный телефон такого для BLE нет понятия. Это не тот старый блютуз со спариванием, есть те кто к девайсу коннектится после адвертайзинга или кто принимает рассылки маяка
@
Бля а я как лох до сих пор джойстик с айпадом спариваю
Я хз что за джойстики у айпадов, но именно BLE я раскапывал и намучался с ним до аллергии на BLE
Бт или бле всё-таки
Тфу блин точно
@
Тфу блин точно
С бт никаких таких проблем
@
Тфу блин точно
Кстати вопрос а у айфона можно отключить отсылку BLE адвертайзинга?
@
А то я сканер включаю и вижу соседей в доме с айфонами
@
Там одна кнопка
Для андроида есть много BLE сканеров которые хватают все что в адвертайзинге, например браслеты соседей
Хз что это на маков не выдает. Под ограничение апи
@
Хз что это на маков не выдает. Под ограничение апи
Надо развернуть, так будет больше инфы в том числе по производителю, или попробовать законнектиться
Я подозреваю апи не отдает. Коннект делает коннект.
В ios с этой хуйней строго