Тоже иногда кажется, что в раст надергали самых вГлазаДолбительных практик с кучи языков. Вот как форматировать код который использует async await с безымянными функциями, да так чтобы он нормально читался? В этих случаях заставляю себя вспомнить трёхэтажные регэкспы в перле чтобы успокоиться.
Была идея сделать из андроид приставки подобие AirPlay. Подключал оптический выход приставки к оптическому входу ресивера с акустикой. Дебиан запускал с microSD и настраивал там PulseAudio для получения аудиопотока из сети и трансляцию его на оптический выход. Трансляция аудио с другой линукс машины без вопросов. С windows куча приседаний начиная от виртуальной звуковой карты, либо портированного PulseAudio, еще какой-то софт с гитхаба пробовал, всё не понравилось. Преследовали щелчки если буферизацию маленькую ставил, отставание звука от видео, отваливались клиенты если транслировал с двух источников, приставка не справлялась с передискретизацией аудио, и другие "прелести". Тогда отложил эту идею в долгий ящик, даже не опробовав трансляцию со смартфона. Ваша статья пробудила воспоминания, надо будет опять изучить вопрос.
Такой вариант предусмотрен, в ответ отправляется 302 Temporary Redirect.
Там еще есть предложение использовать в качестве IP адреса 8.8.8.8 ссылаясь на жестко заданный адрес DNS сервера в андроид. Но это получается то же самое, что и любой глобальный адрес. И не понятно что же тут конкретно сработало. А вот как перенаправить пакет с DNS запросом в адрес 8.8.8.8 на локальный DNS сервер на 192.168. на esp32 я чёт с наскока не придумаю.)
Касательно перехвата запросов, DNS server из примеров esp32 перехватывает вообще все запросы, в логах это видно. Это дело я первым делом проверил. Потом обратил внимание, что если адрес локальный у портала, то в настройках Wi-Fi в смартфоне есть кнопка "требуется настройка" (могу путать, уже подзабыл) и она ведет на портал, но сам портал, при подключении к точке доступа, не выскакивает. Если найдется в будущем решение этой заморочки, то я изменю адрес на локальный.
WiFiManager - отличный проект, он использует фреймворк Arduino, я фреймворк Arduino не использую. Есть еще менеджер Wi-Fi https://github.com/tonyp7/esp32-wifi-manager тоже очень хороший проект, использует парадигму очередей сообщений и базовый фреймворк ESP-IDF. Из-за этого исходники читаются не очевидно и кое где не используются возможности ESP-IDF фреймворка. Там некрасиво (по моему скромному мнению) написан обработчик http запросов. Ещё esp32-wifi-manager всегда запускается в полном объеме, с вебсервером, с очередями. Я решил чуток все это исправить и остановиться уже не смог.) Но за то изучил html с css и JS.
Такое поведение Captive Portal наблюдается на всех локальных адресах, на указанных вами Captive Portal тоже автоматически не вылезает. Поискал опять, и опять ничего толкового не нашел.
С андроид смартфонов Captive Portal на локальных адресах типа 192.168.4.1 сам не выскакивает. Но если адрес назначить глобальный, типа 200.200.200.1, то Captive Portal на андроид смартфоне выскочит сам. Исследовал этот вопрос пока писал https://github.com/uqfus/esp32-wifi-provision-care для esp32. С чем связано могу только догадываться, на стэкексчендже такое решение нашел без указания на источник, а конкретных руководящих документов на этот счет не нашел.
... только необходимо изучить язык разметки html, изучить стили css, ну и javascript. Учитывая их "совершенно не строгую типизацию" переменных, разработка интерфейса скатывается в "добавил свойство в css, перегрузил страницу в браузере, с удивлением обнаружил, что свойство не применимо в текущем контексте". Лыко и мочало начинай с начала. Но наше "наиболее" перевешивает все.
Стоит посмотреть сколько процессов вообще крутится на ESP32 uxTaskGetNumberOfTasks. У меня 11 показывает в скетче осуществляющем только соединение Wi-Fi.
Вы очень болезненно отреагировали на мой комментарий. Я тоже на критику болезненно реагировал сразу после вуза.)
Если вы пишете для себя то пишите как вам удобно и как вам красиво. А если пишете для других людей, а опубликованная статья подразумевает, что вы написали этот код не только для себя, то пишите код так, чтобы другим людям было приятно его читать. А то получится, что вы "изобрели вечный двигатель открытого типа", но никто не смог в документации разобраться как он работает.
Касательно комментирования кода. Многие имена переменных совершенно ни о чем не говорят при первом взгляде, когда в голове еще нет контекста. Я бы даже предложил провести минификацию исходного кода, и меньше объема занимать будет, и читаемость не ухудшится.)
О магических константах - 42. Вы сразу же должны понять что это за константа такая.)
Блокировки побудили меня наконец-то подключиться к туннельному брокеру и получить IPv6. В принципе настройки просты, но есть подводные камни. Конкретно у меня конфиг от туннельного брокера сразу не заработал, надо было убрать одну строку. Зато после запуска порадовала магия SLAAC. На всех компьютерах, виртуальных машинах, смартфонах, планшетах, умной колонке, и даже устройствах умного дома - появился IPv6 адрес. Проверил, все они стали доступны извне. Ютюб тоже стал загружаться.
Оптический кабель приходит в роутер от провайдера, и этот роутер работает в режиме бриджа. Просто роутер от провайдера устарел, но как преобразователь оптики в медь работает великолепно. Далее медным патчкордом до роутера основного. Потом медным патчкордом до сервера. На сервере крутится виртуалка. В виртуалке настроен сетевой интерфейс, создан туннельный интерфейс до туннельного брокера, настроен и запущен демон SLAAC. Ну и везде включена маршрутизация пакетов IPv6. Вот такая матрешка, работающая матрешка.
Перелез с samba на ksmbd. Все равно он уже есть в ядре, да и контроллер домена и все такое мне без надобности.
А еще полезно поставить пакет wsdd2 тогда на компьютерах с windows файловые сервера будут отображаться в сетевом окружении.
От поверхности земли до точки максимального натяжения 35 786 км. Башня высотой 10 км уменьшит длину троса на 0,0279%. "busted" - MythBusters.
"Плотность воздуха на уровне моря (1,225кг/м3):
Ветровое давление = 0.5 * 1,225 * (15)^2 ≈ 137,06 Па"
при 90 м/с (324кмч) ≈ 4960Па, правда таких ветров не бывает на Земле.
Как думаете, ветровое давление 4,96кПа на трос с прочностью на разрыв 120ГПа как-то вообще влияет? "busted" - MythBusters.
ЗЫ. Над тросом в космос великие умы думали, куда уж мне, а тем более Вам.)
Вы посмотрите иллюстрацию в статье и найдите там точку максимального натяжения троса. Эта точка не на поверхности земли и "башенку" там не построить.
Тоже иногда кажется, что в раст надергали самых вГлазаДолбительных практик с кучи языков. Вот как форматировать код который использует async await с безымянными функциями, да так чтобы он нормально читался? В этих случаях заставляю себя вспомнить трёхэтажные регэкспы в перле чтобы успокоиться.
Была идея сделать из андроид приставки подобие AirPlay. Подключал оптический выход приставки к оптическому входу ресивера с акустикой. Дебиан запускал с microSD и настраивал там PulseAudio для получения аудиопотока из сети и трансляцию его на оптический выход. Трансляция аудио с другой линукс машины без вопросов. С windows куча приседаний начиная от виртуальной звуковой карты, либо портированного PulseAudio, еще какой-то софт с гитхаба пробовал, всё не понравилось. Преследовали щелчки если буферизацию маленькую ставил, отставание звука от видео, отваливались клиенты если транслировал с двух источников, приставка не справлялась с передискретизацией аудио, и другие "прелести". Тогда отложил эту идею в долгий ящик, даже не опробовав трансляцию со смартфона. Ваша статья пробудила воспоминания, надо будет опять изучить вопрос.
Картинка с кабелями сгенерирована. Текст не читаем.
Огорчает (немножечко) отсутствие ASIC майнеров околокиловаттной мощности. Три киловатта это много.
Такой вариант предусмотрен, в ответ отправляется 302 Temporary Redirect.
Там еще есть предложение использовать в качестве IP адреса 8.8.8.8 ссылаясь на жестко заданный адрес DNS сервера в андроид. Но это получается то же самое, что и любой глобальный адрес. И не понятно что же тут конкретно сработало. А вот как перенаправить пакет с DNS запросом в адрес 8.8.8.8 на локальный DNS сервер на 192.168. на esp32 я чёт с наскока не придумаю.)
Касательно перехвата запросов, DNS server из примеров esp32 перехватывает вообще все запросы, в логах это видно. Это дело я первым делом проверил. Потом обратил внимание, что если адрес локальный у портала, то в настройках Wi-Fi в смартфоне есть кнопка "требуется настройка" (могу путать, уже подзабыл) и она ведет на портал, но сам портал, при подключении к точке доступа, не выскакивает. Если найдется в будущем решение этой заморочки, то я изменю адрес на локальный.
WiFiManager - отличный проект, он использует фреймворк Arduino, я фреймворк Arduino не использую. Есть еще менеджер Wi-Fi https://github.com/tonyp7/esp32-wifi-manager тоже очень хороший проект, использует парадигму очередей сообщений и базовый фреймворк ESP-IDF. Из-за этого исходники читаются не очевидно и кое где не используются возможности ESP-IDF фреймворка. Там некрасиво (по моему скромному мнению) написан обработчик http запросов. Ещё esp32-wifi-manager всегда запускается в полном объеме, с вебсервером, с очередями. Я решил чуток все это исправить и остановиться уже не смог.) Но за то изучил html с css и JS.
Такое поведение Captive Portal наблюдается на всех локальных адресах, на указанных вами Captive Portal тоже автоматически не вылезает. Поискал опять, и опять ничего толкового не нашел.
https://github.com/esp8266/Arduino/commit/adf2b14a6a1493b324d8e176a1519af76bd7e5fb
С андроид смартфонов Captive Portal на локальных адресах типа 192.168.4.1 сам не выскакивает. Но если адрес назначить глобальный, типа 200.200.200.1, то Captive Portal на андроид смартфоне выскочит сам. Исследовал этот вопрос пока писал https://github.com/uqfus/esp32-wifi-provision-care для esp32. С чем связано могу только догадываться, на стэкексчендже такое решение нашел без указания на источник, а конкретных руководящих документов на этот счет не нашел.
Ну и касательно прошивки через подключение устройства через USB, вам не лень подключать, и отключать, приносить, и уносить esp32? Можно добавить обработчик POST запроса и прошивать устройство по сети с использованием curl. Пример тут смотрите https://github.com/uqfus/esp32-wifi-provision-care/tree/main/examples/esp32-firmware-upload-ota-example
... только необходимо изучить язык разметки html, изучить стили css, ну и javascript. Учитывая их "совершенно не строгую типизацию" переменных, разработка интерфейса скатывается в "добавил свойство в css, перегрузил страницу в браузере, с удивлением обнаружил, что свойство не применимо в текущем контексте". Лыко и мочало начинай с начала. Но наше "наиболее" перевешивает все.
Стоит посмотреть сколько процессов вообще крутится на ESP32 uxTaskGetNumberOfTasks. У меня 11 показывает в скетче осуществляющем только соединение Wi-Fi.
Добавил анимации к кнопке по гайду https://habr.com/ru/companies/netologyru/articles/655337/ и получилось красиво.
Вы очень болезненно отреагировали на мой комментарий. Я тоже на критику болезненно реагировал сразу после вуза.)
Если вы пишете для себя то пишите как вам удобно и как вам красиво. А если пишете для других людей, а опубликованная статья подразумевает, что вы написали этот код не только для себя, то пишите код так, чтобы другим людям было приятно его читать. А то получится, что вы "изобрели вечный двигатель открытого типа", но никто не смог в документации разобраться как он работает.
Касательно комментирования кода. Многие имена переменных совершенно ни о чем не говорят при первом взгляде, когда в голове еще нет контекста. Я бы даже предложил провести минификацию исходного кода, и меньше объема занимать будет, и читаемость не ухудшится.)
О магических константах - 42. Вы сразу же должны понять что это за константа такая.)
Блокировки побудили меня наконец-то подключиться к туннельному брокеру и получить IPv6. В принципе настройки просты, но есть подводные камни. Конкретно у меня конфиг от туннельного брокера сразу не заработал, надо было убрать одну строку. Зато после запуска порадовала магия SLAAC. На всех компьютерах, виртуальных машинах, смартфонах, планшетах, умной колонке, и даже устройствах умного дома - появился IPv6 адрес. Проверил, все они стали доступны извне. Ютюб тоже стал загружаться.
Оптический кабель приходит в роутер от провайдера, и этот роутер работает в режиме бриджа. Просто роутер от провайдера устарел, но как преобразователь оптики в медь работает великолепно. Далее медным патчкордом до роутера основного. Потом медным патчкордом до сервера. На сервере крутится виртуалка. В виртуалке настроен сетевой интерфейс, создан туннельный интерфейс до туннельного брокера, настроен и запущен демон SLAAC. Ну и везде включена маршрутизация пакетов IPv6. Вот такая матрешка, работающая матрешка.
Лапша из if не читаема. Воспользовались бы switch-case вариантом.
Велосипедов полон код. Особенно доставило ваше "!0".
С комментариями переборщили, следует писать код так чтобы он был понятен с минимумом комментариев.
"Магических" констант в коде не должно быть, ваша переменная SostWiFi постоянно сравнивается с этими "магическими" константами.
Писал captive portal для esp32, подключил фреймворк бутстрап через CDN, запустил и... тут-то до меня дошло, что на esp32 интернета-то ещё пока нету.)
А есть что где почитать подробнее? Гуглится только "пирогенетическая переработка древесины" но там кислоты на выходе, да и катализаторов никаких нет?
Я бы на вашем месте пошел бы ещё дальше. Убрал бы ворота совсем. Нет ворот нет проблем.)