Evgeniy
В том примере приемный буфер 1 кб, а не под размер прошивки. Также и с передачей - зачем сразу под всю строку буфер выделять.
Vlad
бл... вот смотрите чо сервак счас выдает в ответ на chunked curl, в открытом виде кидаю, это результат от php-скриптика моего приемного: c:\!>curl -v -X POST https://pmaker.ru/post_big.php -H "Transfer-Encoding: chunked" -H "Content-Type: application/x-www-form-urlencoded" -d "3\r\nfoo\r\n3\r\nbar\r\n0\r\n\r\n" Note: Unnecessary use of -X or --request, POST is already inferred. * Host pmaker.ru:443 was resolved. * IPv6: (none) * IPv4: 31.41.40.19 * Trying 31.41.40.19:443... * schannel: disabled automatic use of client certificate * ALPN: curl offers http/1.1 * ALPN: server accepted http/1.1 * Connected to pmaker.ru (31.41.40.19) port 443 * using HTTP/1.x > POST /post_big.php HTTP/1.1 > Host: pmaker.ru > User-Agent: curl/8.13.0 > Accept: */* > Transfer-Encoding: chunked > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 44 bytes < HTTP/1.1 200 OK < Server: nginx/1.23.1 < Date: Thu, 26 Jun 2025 08:33:29 GMT < Content-Type: application/json < Content-Length: 599 < Connection: keep-alive < HTTP_TRANSFER_ENCODING: Not a chunked request. ---------------------------------Сначала $_POST: Array ( [3\r\nfoo\r\n3\r\nbar\r\n0\r\n\r\n] => ) Теперь 'php://input': 3\r\nfoo\r\n3\r\nbar\r\n0\r\n\r\n ---------------------------------Теперь пробуем парсить и чистить 'php://input':{ "received": "3\\r\\nfoo\\r\\n3\\r\\nbar\\r\\n0\\r\\n\\r\\n", "cleaned": "3\\r\\nfoo\\r\\n3\\r\\nbar\\r\\n0\\r\\n\\r\\n", "parsed": { "3\\r\\nfoo\\r\\n3\\r\\nbar\\r\\n0\\r\\n\\r\\n": "" }, "timestamp": "2025-06-26T11:33:29+03:00" }* Connection #0 to host pmaker.ru left intact c:\!>
т.е. curl передает Transfer-Encoding: chunked: 1) PHP рапортует что запрос - non-chunked 2) НО БЛЯ В $_POST - данные попадают !!!!111
Vlad
т.е. curl передает Transfer-Encoding: chunked: 1) PHP рапортует что запрос - non-chunked 2) НО БЛЯ В $_POST - данные попадают !!!!111
при этом, если в esp32: http.addHeader("Transfer-Encoding", "chunked"); то сразу же - Ошибка 400 (Bad Request)
Vlad
и при этом счас саппорт хостинга сказал, что у nginx: chunked_transfer_encoding = on и это default
Evgeniy
Если на сервере косяк с chunked, тогда разве будут работать загрузки файлов через форму?
Max
и при этом счас саппорт хостинга сказал, что у nginx: chunked_transfer_encoding = on и это default
Это не показатель того, что в PHP не прилетит одним куском, увы.
Evgeniy
И почему бы не сделать такой же запрос, как и на аплоад файлика
Vlad
при этом, если в esp32: http.addHeader("Transfer-Encoding", "chunked"); то сразу же - Ошибка 400 (Bad Request)
саппорт роет, сказали. но меня пока убивает, что curl - таки как-то данные пропихивает в $_POST, хоть и как есть, а с контроллера 400 bad request :(
Vlad
Если на сервере косяк с chunked, тогда разве будут работать загрузки файлов через форму?
там же Content-Length фиксированный, известный ? если да - то никаких проблем и не будет
Vlad
саппорт роет, сказали. но меня пока убивает, что curl - таки как-то данные пропихивает в $_POST, хоть и как есть, а с контроллера 400 bad request :(
хотя.... это значит логически обозначает, что ... проблема уже не в сервере, а в Arduino HTTPClient с заголовками
Evgeniy
Как аплоад любого другого файла. Дальше распарсить, на php это не сложно и в базу
Evgeniy
Главное версию формата не забыть в загаловке
ᅠDin
ты пробовал прошивать простейший скетч blink или wifi_connect ?
Да попробовал. Если загрузить блинк то светодиод моргает не равномерно, а в разнобой как будто какие-то "данные читает" и в монитор порта постоянно выводит теже данные. Если отключить светодиод то при перезагрузке 1 раз выводит данные и все. Вай фай Коннект тоже прошил, но к вай фай не подключается. Может этот адаптер какой-то касячный? А прошивка бутлоудера может чем то помочь?
Vlad
саппорт хостинга: >Вероятно такое поведение в заголовках из-за того, что после nginx у нас бекэндом обрабатывает PHP веб-сервер Apache :)
ㅤ
Ох запахло 800 💶
Vlad
мдеееее, на вопрос про PHP $_SERVER['HTTP_TRANSFER_ENCODING'] который может иметь значение 'chunked', саппорт ответил: >Сложный вопрос. Я думаю нужно вместо проверки $_SERVER каким-то иным образом проверять полученные данные. Насколько я помню, при использовании связки apache+nginx у нас были проблемы с корректным отображением каких-то данных в переменной $_SERVER. 😂 походу, с такими 1) серверами (свой VDS под каждый датчик настраивать - НЕ ПРЕДЛАГАТЬ 🤪) 2) HTTPClient глючащий с заголовками стоит забыть эту тему "chunked". подзадраллло уже з.ы. В HTTP/1.0 - chunked-передача не поддерживается.
Evgeniy
Один vds под все датчики нельзя?
Tonchik
Один vds под все датчики нельзя?
я вот про это же думаю, и разводить там виртуальные хосты под проект
Tonchik
скуль - один, новые базы под вирт хост
Vlad
неее, тут надо разделять сервера, НО !!!!
Evgeniy
Ого! Любопытно
Evgeniy
А покажешь код? Хотя ардуино фреймворком не полтзуюсь
Tonchik
неее, тут надо разделять сервера, НО !!!!
хм... ex Head Unix SA РБК Хостинга и после РБК, если что, — весь внимания)))
Vlad
https://pastebin.com/eP1isgJY Connecting to server... Sent chunk: test_id=12345& Sent chunk: dat Sent chunk: a=Hel Sent chunk: loWorld& Sent chunk: chunked=1 Response: HTTP_TRANSFER_ENCODING: Not a chunked request. ---------------------------------Сначала $_POST: Array ( [test_id] => 12345 [data] => HelloWorld [chunked] => 1 ) Теперь 'php://input': test_id=12345&data=HelloWorld&chunked=1 ---------------------------------Теперь пробуем парсить и чистить 'php://input':{ "received": "test_id=12345&data=HelloWorld&chunked=1", "cleaned": "test_id=12345&data=HelloWorld&chunked=1", "parsed": { "test_id": "12345", "data": "HelloWorld", "chunked": "1" }, "timestamp": "2025-06-26T13:06:13+03:00" } Connection closed
ㅤ
Так я с самого начала знал, что httpclient дурины не умеет в чанки. Прочел это где то
Vlad
Шо, опять 800 евро уходят телезрителям нейросетям?
ага. но вышло ж как: 1) проблематику обсудили, обсосали 2) сделали вывод - какой конкретно гад виновен. Вроде бы сервер (а его криворукие админы уж точно) и HTTPClient. 3) сформулировали уже ТОЧЕЧНО проблему главную Дипсику... ... и он, сссука, родил решение, БЕЗ проблемного гада.
Vlad
правда, тогда остается один вопросик :) какого хрена от curl - чанки не объединяются (хотя в куче и попадают сразу в PHP)... ну да кому оно нахер теперь интересно 😎 upd: хотя и это ясно: x-www-form-urlencoded подразумавает что на чанки _должны_быть_ расколоты именно key=value, а не просто текст
Resident
там же Content-Length фиксированный, известный ? если да - то никаких проблем и не будет
есть keep-alive =))) и длинна не обязательный заголовок и ещё это читал ? https://www.php.net/manual/en/features.file-upload.multiple.php
Evgeniy
могу ошибаться, но keepalive это механизм проверки соединения
Ruslan
я вот про это же думаю, и разводить там виртуальные хосты под проект
да заебень уже наконец прометеус и настрой графановых юзеров на доступ к разным хранилищам
Resident
могу ошибаться, но keepalive это механизм проверки соединения
ну если не указать длину тела запроса то до закрытия сокета будет висеть
Ruslan
всё, минутка ненависти вышла
Tonchik
всё, минутка ненависти вышла
как у тебя с собаковым тредом?
Resident
каждый запрос это полный цикл 1 tcp соединения
Ruslan
как у тебя с собаковым тредом?
пока забил хрен, переношу код с питона на го на другом проекте
Resident
соединение чтение, возможно ответ, закрытие
Аleks
Всем доброго дня. Хотел задать вопрос касаемо защиты прошивки от копирования в esp32. Через какую среду разработки это сделать проще всего ?
Аleks
Может есть у кого опыт реализации данной задачи ?
ilya
Здравствуйте, может кто-то сталкивался с таким? При запуске debug вылетает это окно, espressiv ide. Прошивается без проблем, что-то с OpenOCD, но я не понимаю что.
Денис
Всем привет, есть дисплей LCD 2004 I2C с али, Я так понял, что данный дисплей через i2c работает только с символами записанными в собственную память. Вопрос, его можно как-то перепрошить - добавить кириллицу. Желания искать, ждать новый нет
Денис
можно прошить 8 символов. остально только из ром
По i2c с esp никак их нельзя пробросить? Красить пиксели и тп...? Нужен весь алфавит
Sergey
Всем доброго дня. Хотел задать вопрос касаемо защиты прошивки от копирования в esp32. Через какую среду разработки это сделать проще всего ?
В есп32 невозможно запретить считывание прошивки, единственный варик использовать flash encryption
꙰꙰꙰꙰꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰
꙰꙰꙰꙰꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰
Но у него ESP8266 и просто вышел из строя стабилизатор на 3.3v
꙰꙰꙰꙰꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰⃟꙰꙰⃟꙰⃟꙰
Там контрольная сумма проверяется «стабом»
Хз, по факту плата прошивалась, но работать нормально отказывалась. Оказалось, что на выходе стабилизатора 1.9v, и после его замены всё заработало.
Nikita
Всем привет, может кто-то делал приложение на андроид для коммуникации с есп по средством блютуз? Может быть подскажите библиотеки веб интерфейса нормальные?
Vlad
Всем привет, может кто-то делал приложение на андроид для коммуникации с есп по средством блютуз? Может быть подскажите библиотеки веб интерфейса нормальные?
я делал. но не подскажу. :) чтобы ты остался жить на воле, а не в сумасшедшем домике. как я выжил после этой головоломки - до сих пор не понимаю.
Anton
кстати, я не понял как с блютуз 5.0 на есп32 работать, когда для провиженинга только 4.2 подходит, а вместе их нельзя собирать
Vlad
кстати, я не понял как с блютуз 5.0 на есп32 работать, когда для провиженинга только 4.2 подходит, а вместе их нельзя собирать
тоже интересно. я когда ковырялся - делал одну esp32 передатчиком (в составе датчика), вторую - приемником с USB-UART. а андроид-аппа просто для отладки передачи в прошивках.
Vlad
кстати, я не понял как с блютуз 5.0 на есп32 работать, когда для провиженинга только 4.2 подходит, а вместе их нельзя собирать
вот чо тут ДикПик накорябал, я не все понял даже: ————————————— 1. Поддержка Bluetooth в ESP32 ESP32 поддерживает Bluetooth 4.2 (BLE) и Bluetooth 5.0 (BLE), но с ограничениями: Bluetooth Classic (BR/EDR) — только до версии 4.2 (A2DP, HSP, SPP). Bluetooth Low Energy (BLE) — поддерживает 5.0, но не все функции (например, BLE Mesh есть, а BLE 5.0 High Speed (2M PHY) или Long Range (Coded PHY) работают не на всех чипах). 2. Провижининг и Bluetooth 5.0 Если вы говорите о провижининге (настройке устройства через BLE), то: ESP32 поддерживает BLE 5.0, но провижининг в ESP-IDF часто реализован на базе BLE 4.2 (из-за обратной совместимости). Можно ли использовать BLE 5.0 вместе с провижинингом? Да, но не все функции BLE 5.0 будут доступны. Например, ESP32 не поддерживает 2M PHY в режиме провижининга, но базовые функции (1M PHY) работают. 3. Можно ли "собирать вместе" BLE 4.2 и 5.0? Да, но с оговорками: ESP32 использует единый Bluetooth-стек (Bluedroid или NimBLE). Если провижининг завязан на 4.2, то 5.0-фичи (вроде Long Range) могут не работать одновременно. Но обычное BLE-общение (без провижининга) может использовать часть функций BLE 5.0.
Anton
ну вот у меня -с3, где есть бт/бле 5.0, а толка с него не вижу. и в конфигураторе белым по чёрному (у меня тёмная тема) написано, что два стека одновременно не будут работать
Sergey
У вас есть опыт использования данной процедуры шифрования?
Есть. Внимательно читаешь соответствующий раздел дважды а лучше трижды, и делаешь четко как там написано. А ещё запасаешься запасными процессорами, так как несколько из них неизбежно окирпичишь
Аleks
А почему? Нельзя даже стереть чип?
Там по моему efuse прожигаешь и дальнейшая прошивка не возможна
Sergey
Благодарю за информацию, попробую разобраться. Я так понимаю это осуществляется при помощи командной сроки?
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/security/flash-encryption.html Начните с прочтения раздела, большинство вопросов отпадет
Evgeniy
"To erase an ESP32's flash memory when flash encryption is enabled, you need to use the --force option with esptool.py, along with erasing the flash using the standard erase_flash command. This is because encryption prevents direct overwriting of the flash. " - Вроде можно стереть и с шифрованием
Sergey
А почему? Нельзя даже стереть чип?
Записать во флешку можно все что угодно) и стереть можно сколько хочешь раз) проблема не в этом
Evgeniy
Тогда странно, откуда кирпич
Sergey
Тогда странно, откуда кирпич
Например, можно потерять ключ шифрования. А есть ещё опция, когда ты в принципе не знаешь свой ключ
Evgeniy
Понял, значит проблема будет в том, чтобы прошить потом, если нет ключа