Зачем нужны шилды если есть одноплатники?

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Arhat109
Можно код обработки запросов увидеть?

16Мгц .. вполне достаточно чтобы отдавать HTTP и даже картинки с 4-х гектарной карты..
Статику? Могу поверить, с динамикой как?


poty
А где я говорил что микроконтроллеры не нужны? И где я предлагал гонять риалтайм на одноплатнике?
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
Так посмотрите вопрос, который вынесен в заголовок. Это ответ на Ваш вопрос "где я говорил...".
Вопрос о риалтайме является ответом на Ваш вопрос из заголовка. Я не знаю причину, по которой Вас интересует именно HTTP, причем именно JSON, или как Вы называете: динамика. Но кроме этой узкой ниши существует очень много всего другого, одно из этих "других" я и привел как ответ на Ваш вопрос.
Кстати, если уж на то пошло, веб-сервер на одноплатнике - тоже так себе затея, продукт далеко не для всего. Зачем же тогда говорить, что раз он позволяет чуть больше но требует для этого больше места, электричества, инфраструктуры, ..., то он может заменить простые решения там, где их достаточно?
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Так посмотрите вопрос, который вынесен в заголовок.
Зачем нужны шилды если есть одноплатники?
И?

Я не знаю причину, по которой Вас интересует именно HTTP, причем именно JSON, или как Вы называете: динамика.
Веб-морду делать как-то собираетесь?

этой узкой ниши
Устройства с веб мордой - узкая ниша? А что тогда широкая?

Зачем же тогда говорить, что раз он позволяет чуть больше но требует для этого больше места, электричества, инфраструктуры, ..., то он может заменить простые решения там, где их достаточно?
Блеан. Еще раз для тех кто неосилил первый пост в теме: зачем пытаться сделать из дохлого микрика одноплатник, навешивая на него шылды, если уже есть одноплатник, где нормальное железо и периферия изкоробки? Если нужен риалтайм - делаем связку из одноплатника + 1+ микроконтроллер.

Веб морды для микриков наверно что-то из разряда "смотри как я могу", с кучей всех возможных багов и уязвимостей.

Всё это конечно точка зрения прикладника... Но пока меня что-то никто не переубедил.
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
Тогда ещё раз! Кому нужна "веб-морда"? Для чего? Есть такие классы устройств, где это нужно. А есть - где это на фиг никому не сдалось! Будете спорить? Почитайте IoT. Не зацикливайтесь только на том, что знаете Вы и будет Вам счастье.
Второе. Если я разрабатываю систему (а сейчас именно распределённые системы являются трендом), то я "веб-морду" 100% не буду делать на устройстве. Сейчас куча устройств для дома настраиваются через Интернет-сайты в облаке на хороших серверах (у меня дома как минимум штук 10 таких устройств есть), поэтому решение сервера на одноплатнике - это уже, считайте прошлый век, оно никогда-то нормальным не было, с "всевозможными багами и уязвимостями".
Делаем связку одноплатник + микроконтроллер? А к микроконтроллеру - шилды? Или как он будет управлять периферией? А вообще... Шилды - это конструктор, понятийный аппарат для начинающих. Вот здесь, Алекс, допустим, сделал часы (не буду говорить про качество, но повторений - много, с этим не поспоришь). Где Вы в них видели шилды? Аналогичная ситуация со многими другими разработками. Но про часы я начал неспроста: есть некоторое количество людей, которые взяли микропроцессор, развели свою плату и сделали часы без платформы (Ардуино, или ещё какой)! Да, используется загрузчик Ардуино, но фактически получается одноплатник с микропроцессором!
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Есть такие классы устройств, где это нужно.
Которому не нужна сеть? Ну наздоровье, я уже заипался повторять.
Это ваше IoT как общается? Речь тут про пердуину, напоминаю. Мы здесь не обсуждаем промышленную разработку.

Сейчас куча устройств для дома настраиваются через Интернет-сайты в облаке на хороших серверах (у меня дома как минимум штук 10 таких устройств есть),
Фу бля. Отключат интернет, производитель отключит сервер - умное устройство превращается в дорогое тупое.
А как устройство будет получать настройки? То есть сеть таки нужна? И значит нужен сетевой обвес для микрика? А в каком формате передаются настроки? Какое-то бинарное говно вместо жысона?

оно никогда-то нормальным не было, с "всевозможными багами и уязвимостями".
Шо за херня? Там можно брать тот же питон, что и на взрослых серверах, например. Даже джанго возможно пойдет. HTTPS, SSH - тоже без проблем. У меня NAS на арме 650 мгц, полет нормальный. HTTPS есть и работает вполне шустро. 3 секунды страница не открывается, как на одном рутере.

А к микроконтроллеру - шилды? Или как он будет управлять периферией?
Ну речь тут о том чтобы не вешать на микрик функционал который может дать одноплатник. Про периферию не в курсе, я с этим еще не разбирался.

Удобство разработки прикладного софта на одноплатнике и микроконтроллере абсолютно не сравнимо. 2010-е против 80-х.
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
А что Вас так на JSON-е заело? :)
У микропроцессоров тоже есть бандлы с сетью, Вам об этом уже говорили. И отлично работают! Для своих задач.
Которому не нужна сеть?
Отключат интернет, производитель отключит сервер - умное устройство превращается в дорогое тупое.
То Вам нужна сеть, то не нужна.... :) Работает, всё работает, с сетью или без. Мне не нужно перенастраивать климатику в доме каждую секунду или пылесосу там программу менять. Это - не промышленность как Вы правильно изволили уточнить!
Про периферию не в курсе, я с этим еще не разбирался.
Ну так разберитесь! Вам об этом уже страниц несколько талдычат.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Arhat109
Можно код обработки запросов увидеть?
Статику? Могу поверить, с динамикой как?
Вы какой-то странный. Оно мне нафига? Поигрался, посмотрел и положил на полку .. это ХОББИ, а не продакшн. Я вот даже скоростей не снимал .. работает, справляется вполне сносно .. что ещё надо?

В продакшн (своем) у меня есть "микрофреймворк на ПХП из 10-и классов", который в целом тоже писался как "пародия на Зенд" ибо умеет практически все тоже самое, даже дебаг, профайл и этот .. о, мускуль с моделями.. DI, Router, Request, Response, Bootstrap, Layout, View .. в общем-то все есть даже пагинация и виджеты ..
2000 ревестов в секунду тестирование на .. core2duo E2200 в одну дырку - сам "фреймворк". Для справки: пустой Yii2 отдает на нем же аж .. 140 реквестов, а Laravel так только 70
и да, потребляемая память в миниуме .. 45 КИЛО байт. Против 2.5 - 4 Мега байт..

Что Вам даст "посмотреть код"? Почему он должен отдавать "динамику" как-то плохо?
И что такое "динамика" на Ардуино? Формирование ответа черех ПХП с кучей говна типа Ангуляра, Вуе и прочих бэкбонов .. нихт панимайт.

Ну и ещё за "посмотреть код". Вы тему нашли? прочли? Тогда вопрос ваще непонятен .. там же свой "линкер" который умеет работать с сегментированной памятью в 520 килобайт .. как Вы его будете смотреть в своих 2/4/8 килобайтах? Он жеж у Вас даже не скомпиляется.. :)
 

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
странно, что тс так и не въехал в тематику этого форума.
ну умный сильно, всё знает и умеет - есть куча специализированных форумов - там можно знанием и опытом блеснуть.
здесь ХОББББИ
кумекалка позволяет оценить порог вхождения в ардуиновскую тематику и в малинки-апельсинки-линухи-питоны...
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Вы какой-то странный. Оно мне нафига? Поигрался, посмотрел и положил на полку .. это ХОББИ, а не продакшн. Я вот даже скоростей не снимал .. работает, справляется вполне сносно .. что ещё надо?
Веб интерфейс работает? И не лагает? Про https / ssh спрашивать, или лучше не надо? :) Код веб фейса или пример работы таки можно увидеть?

порог вхождения в ардуиновскую тематику и в малинки-апельсинки-линухи-питоны...
Порог вхождения в нормальный веб интерфейс на пердуине ниже чем на питоне? У меня немного искаженное восприятие потому что я писал под веб на питоне, но всё же.

Почему он должен отдавать "динамику" как-то плохо?
Потому что ресурсов для этого нужно гораздо больше чем для того чтобы тупо байтики копировать. Таки можно код увидеть?

Вы тему нашли? прочли?
Даже не искал. Ссылку давайте - почитаю. Форум большой.

Что Вам даст "посмотреть код"?
Скорее всего, поржать и запостить на говнокод, увидеть себя лет 10-15 назад :)

В продакшн (своем) у меня есть "микрофреймворк на ПХП из 10-и классов", который в целом тоже писался как "пародия на Зенд" ибо умеет практически все тоже самое, даже дебаг, профайл и этот .. о, мускуль с моделями.. DI, Router, Request, Response, Bootstrap, Layout, View .. в общем-то все есть даже пагинация и виджеты ..
2000 ревестов в секунду тестирование на .. core2duo E2200 в одну дырку - сам "фреймворк". Для справки: пустой Yii2 отдает на нем же аж .. 140 реквестов, а Laravel так только 70
А что будет если вам питон показать? Боюсь подумать :)

и да, потребляемая память в миниуме .. 45 КИЛО байт. Против 2.5 - 4 Мега байт..
При минимуме в 256 Мб на одноплатниках - большая разница.

Впрочем для писателя добалю пример на три строчки. Непонятно только задлянафига.
прямую ссылочку можно?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn, на указанный кусок кода.
https://github.com/DmytroKorniienko/EmbUI/blob/main/EmbUI/EmbUI.cpp , строки 277-279, сейчас закомментировано, но тот же конфиг из памяти отдается чуть выше по /config . Берите фреймворк и изучайте, код открыт и всем доступен. Практическое его применение в теме по лампе, она на нем как раз и сделана, что не исключает использования в любых других проектах.
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Тело ответа откуда берется?

C++:
String config = deb();
Что это? Или это вообще не веб-морда?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Тело ответа откуда берется?
Ответа кому от кого? Клиенту формируется на сервере, клиент для сервера формирует у себя.
Что это? Или это вообще не веб-морда?
Код же вроде простой... что вам именно не понятно? Не смогли найти функцию что ли? :) Кошмар... Походу вы не настоящий сварщик. Вы даже вразумительный вопрос задать не можете. Плохо. Очень плохо.
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
Мы сейчас что обсуждаем? Код который ответ на http запрос создает?

Это веб-морда или что это такое? Не надо умничать, я веб-серваков явно побольше вас написал.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@perduina, это фреймворк, готовый, чтобы взять и из коробки получить нужный интерфейс. Описание того как с ним работать дано в файле Interface.txt. Я вам уже говорил - вы лентяй, который упорно не желает учиться. В общем-то я бы с вами вообще не возился, но мало ли, вдруг кому интересно будет. Ввиду того, что очень сомневаюсь, что вы найдете файл и практически уверен, что попросите на него ссылку, сразу оставлю его под спойлером. Потрудитесь хотя бы прочитать.

Формирование пакета

Браузер (далее клиент) формирует интерфейс, на основании JSON пакетов, формируемых лампой (далее сервер).

Для начала формирования интерфейса, нужно создать экземпляр класса Interface, передав в него указатель на транспорт и
память выделяемую на формирование фрейма.

Транспортом могут быть:
AsyncWebSocket - отправка всем подключенным клиентам
AsyncWebSocketClient - отправка конкретному клиенту
AsyncWebServerRequest - http. не рекомендуется, так как будет передан набор фреймов а не валидный JSON

Если при формировании пакета, память выделенная на фрейм будет исчерпана, произойдет сериализация текущего фрейма и его отправка.
После чего, фрейм будет очищен и формирование пакета продолжится. Чем меньше памяти выделяется на фрейм, тем за большее количество фреймов
будет отправлен пакет. Это влияет на скорость загрузки. Таким образом мы балансируем между потребляемой памятью и скоростью загрузки.

Пакеты могут быть двух видов:
json_frame_interface - формирование интерфейса
json_frame_value - формирование данных

Пример.
extern EmbUI embui;
AsyncWebSocket ws("/ws");
Interface *interf = new Interface(&embui, client);
interf->json_frame_interface("Огненная лампа");
...
interf->json_frame_flush();
delete interf;


Формирование интерфейса

Интерфейс состоит из секций. Корневая секция создается json_frame_interface, а закрывается и отправляется json_frame_flush.
Так же существуют вспомогательные секции. Создаются json_section_begin, закрывается json_section_end.
Виды вспомогательных секций:
json_section_menu - боковое меню
json_section_content - содержимое не встраивается в страницу, а замещает элементы с существующими ID
json_section_main - страница (приводит к замене текущей страницы)
json_section_hidden - встроенный скрытый блок
json_section_line - горизонтальная ориентация элементов

Все секции (кроме json_section_menu, json_section_content) являются хелперами к json_section_begin и могут быть
заменены ее вызовом с нужной комбинацией параметров.

Параметры json_section_begin:
name - id секции, используется для отправки данных.
label - если указан бедет выведен заголовок
main - секция является страницей
hidden - секция является скрываемым блоком
line - горизонтальная ориентация элементов

Мы можем создать скрытую секцию, аналог <form action="/mysect">:

interf->json_frame_interface("Огненная лампа");
interf->json_section_begin("mysect");
interf->button_submit("mysect", "Отправить");
interf->json_section_end();
interf->json_frame_flush();

ВНИМАНИЕ! Так же секцию создает контрол select. Он должен обязательно заканчиваться json_section_end.

interf->select(F("evList"), String(event.event), F("Тип события"), false);
interf->option(String(EVENT_TYPE::ON), F("Включить лампу"));
...
interf->option(String(EVENT_TYPE::pIN_STATE), F("Состояние пина"));
interf->json_section_end();

В секции помещаются контролы, все контролы могут брать данные как из глобального конфига, так и получать их на прямую.
void hidden(const String &id);
void hidden(const String &id, const String &value);

Контролы могут отправлять данные при изменении, или при сабмите секции. За это отвечает флаг directly.
void checkbox(const String &id, const String &label, bool directly = false);
void checkbox(const String &id, const String &value, const String &label, bool directly = false);

Описание некоторых специфических контролов.
hidden - скрытый контрол, не отображаемый в интерфейсе. Нужен для проброса состояния в некоторых сложных формах.
Пример использования - управление конфигурациями лампы.

constant - тоже, что и hidden но выводиться лейбл, как не активный но видимый пользователю элемент.
button - отправка параметра - значения кнопки. используется для обработки действия без доп. параметров (например загрузка страницы)
button_submit - отправка данных из секции.
button_submit_value - тоже, но дополнительно передается значение. если действий несколько (удалить, загрузить)
spacer - разделитель, может быть как линией, так и заголовком.


Формирование данных.

Сейчас данные клиентам приходят в двух случаях:
1. при приеме пакета post от одного клиента, данные рассылаются остальным клиентам.
2. периодически вызывается ф-я send_pub, которая транслирует клиентам параметры

interf->json_frame_value();
interf->value(F("pTime"), myLamp.timeProcessor.getFormattedShortTime(), true);
interf->value(F("pMem"), String(ESP.getFreeHeap()), true);
interf->json_frame_flush();


Обработка данных от клиента.

Клиент отправляет данные в случаях:
1. Нажатие на раздел меню
2. Нажатие на кнопку
3. Сабмит секции
4. Изменение параметра с флагом directly

Никакие данные автоматически не сохраняются!!!
ф-я post сканирует данные и определяет вероятный обработчик. После чего передает в нее JSON объект со всеми данными.

Регистрация обработчика параметра:

Обработчик представляет из себя ф-ю, которая принимает JSON объект с данными, обрабатывает их и формирует результат в виде
изменения интерфейса. Обработчик можно повесить на имя любого параметра. Но при обработке секции, разумнее повесить его на имя секции.
Так же обработчик можно установить на группу параметров "paramname*"

Обработка directly параметров одной ф-ей
embui.section_handle_add(F("bright"), set_effects_param);
embui.section_handle_add(F("speed"), set_effects_param);
embui.section_handle_add(F("scale"), set_effects_param);

Обрабока отправки данных из секции
embui.section_handle_add(F("set_wifi"), set_settings_wifi);

Обработка кнопки - загрузка секции
embui.section_handle_add(F("show_wifi"), show_settings_wifi);

Обработка флага переключателя
embui.section_handle_add(F("Mic"), set_micflag);

Обработка группы
embui.section_handle_add(F("evconf*"), show_event_conf);

Внимание!!! обработчик может быть вызван без передачи указателя на интерфейс или данные.

Обрабатываем данные, сохраняем в конфиг и НЕ формирует интерфейс
void set_eventflag(Interface *interf, JsonObject *data){
if (!data) return;
SETPARAM(F("Events"), myLamp.setIsEventsHandled((*data)[F("Events")] == F("true")));
}

Формируем страницу интерфейса и НЕ обрабатываем данные
void show_settings_event(Interface *interf, JsonObject *data){
if (!interf) return;
interf->json_frame_interface();
block_settings_event(interf, data);
interf->json_frame_flush();
}

И обрабатываем данные и формируем интерфейс
void set_effects_config_list(Interface *interf, JsonObject *data){
if (!interf || !data) return;
EFF_ENUM num = (EFF_ENUM)(*data)[F("effListConf")];
confEff = myLamp.effects.getEffect(num);
show_effects_config_param(interf, data);
}


Вызов обработчиков, как реакцию на внешние изменения. Нажатие кнопки, события, http, итп.

Так как существует множество мест, где состояние лампы меняется, я принял решение объединить обработчики.
Реализация в remote_action. Для каждого действия производиться симуляция передачи параметра в обработчик.


Обмен данными с глобальным конфигом.
Раньше ВСЕ параметры обязательно отображались в глобальный конфиг. Сейчас это не так.
В глобальный конфиг имеет смысл транслировать только те состояния, которые должны обязательно сохраниться после
перезагрузки лампы.

Для предотвращения случайной записи в конфиг, те параметры что небыли зарегистрированы в create_parameters будут проигнорированы.

Для синхронизации состояния лампы с параметрами после перезагрузки, используется sync_parameters.
Который так же симулирует вызов обработчика параметров. Таким образом мы избегаем множественного дублирования обработчиков в разных реализациях.
 
  • Лойс +1
Реакции: Arhat109

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Вам надо на arduino.ru там вас поймут ибо такие же головотяпы в разных СУНЦ МГУ да Ярославлей .. не были ещё? Сходите .. явно найдете себе подельников, которые сами ни разу ничего не делали, но зато апломбу .. да, там тоже "эксперды", аж судебные присутствуют. Они Вам внятно и пополчкам все разложут.
:LOL:
 

perduina

✩✩✩✩✩✩✩
2 Дек 2020
8
0
сами ни разу ничего не делали
Веб-приложения на питоне я писал и не раз, тред не читали? Вопрос насколько плавно оно пойдет на одноплатнике. Но думаю что пойдет.

Я вам уже говорил - вы лентяй, который упорно не желает учиться. В общем-то я бы с вами вообще не возился, но мало ли, вдруг кому интересно будет.
"Учить" оно меня пытается :) Если 20 раз рассказывает сколько я ему должен вместо того чтобы за 2 минуты найти нужный кусок - значит или само нихера не понимает, или оно слишком сложно.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Веб-приложения на питоне я писал и не раз, тред не читали? Вопрос насколько плавно оно пойдет на одноплатнике. Но думаю что пойдет.
Если писали, то в чем "вопрос" собственно? Взял одноплатник да проверил .. делов-то. Мог бы уже и доложить всему сообществу "насколько плавно", а не вопрошать, если писал канэшна.

Да и сама тема треда Вами как-то освещена однобоко, ибо при чем тут "веб" и название треда? Вы его, эт самое название - сами-то читали?
Напомню - Зачем нужны шилды если есть одноплатники?
Ну и? Когда будет ваш ответ на заговолок треда? Стока понаписали, а ответа так и не дали.. нихарашо-с, однако.
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
Вопрос: "Зачем нужны шилды если есть одноплатники?"
Ответы: №1, №2, №3. Попробуйте обучить ребёнка 7 лет Линуксу, полноценному програмированию и т.д. На этом можно было ветку закрывать.
Однако, нужно было выпендрить свою "прикладуху" (так HTTP-сервер может называть только ... "нехороший человек"!). Начались поиски того, что бы такого придумать, чтобы на одноплатнике пошло ("вроде, но не пробовал"), а на Ардуино - нет. То, что сейчас всё новое делается в облаке - всем понятно, кроме автора. и на фиг его умение (в чём я очень сомневаюсь, так как код простейшего сервера так и не был понят, под предлогом "на фиг нужно, но осуждаю") никому уже не упёрлось, но как же - нужно показать свою крутость.
А теперь - последнее: я НЕ применяю шилды, и никогда не применял, но Ардуино использую. Использую и дешёвые китайские платы с перезаписанным загрузчиком (т.е., формально, не Ардуино, но микропроцессоры разного класса). По дому раскиданы датчики (протечек стиралки, воды на кухне, температуры, влажности, качества воздуха, движения в коридоре для включения дежурного света ночью, ...) и подключены к умному дому MiHome с их контроллером (контроллер вставлен в розетку где-то в комнате, всё общение - через Bluetooth, который на али стоит рублей 50, НИКАКИХ WEB-морд!!!! всё управляется с любого места штатным приложением облака), аудиосистема большая и не всегда удачно управляется штатными пультами, закупил кучку маленьких ATtiny и сделал общее управление на Wi-Fi и Web-ПДУ (JSON не упёрся никуда) с автоматизацией, можно управлять обычным браузером, благо в Wi-Fi-точке можно прописать символический адрес, а не IP - обошлось дай бог рублей в 1000, да и то, многое из того, что сделал - было просто в наличии, как расходник. Сломался свет у дочери (в стене провод где-то порвался) - просто бросил провод к ближайшей розетке, а во включатель вставил маленькую Ардуинку со встроенным Bluetooth - и всё! На время поиска неисправности вопрос был решён. Да кучу всего! И многое из того, что я делал, питается от одной-двух батареек, которые я не менял уже года 2. Зачем мне одноплатники? И сделал бы я это на них? Или нужно было переделывать электричество в доме, писать многотомные Web-приложения (или отлавливать их разработчика, если брать готовое, и если чё ...)?..
 
Изменено:
  • Лойс +1
Реакции: PiratFox и Arhat109

PiratFox

★★★★★✩✩
13 Фев 2020
1,722
481
Микроконтроллер сосёт во всём кроме риалтайма и потребления. Порог вхождения в него разве что меньше, я думаю. Я бы вместо шилдов брал связку контроллер + одноплатник, не знаю только как их связать.
Так это, батенька, смотря для чего применять. Не будете же Вы могучие процессоры юзать как, скажем, контроллер термостата. Даже и с ПИД регулятором. С таким справится вполне и AtMEGA8, я думаю. Нафига микроскопом забивать гвозди?
"Порог вхождения в него разве что меньше, я думаю"
Сильно ошибаетесь. Программирование на С++ для простых контроллеров мало чем отличается от программирования чего-то ещё. Просто разное количество библиотек используется. Конечно, ардуино IDE - инструмент для новичков, но ведь эта штука так и была задумана. В этой среде можно писать, практически не соблюдая правил. Но попробуйте такое, скажем, в среде куб или, например, атмел студио. Компилер тут жеж нах пошлёт.
 
Изменено:
  • Лойс +1
Реакции: poty

Normalek

★✩✩✩✩✩✩
6 Авг 2021
140
39
микро-контролеры нужны, микро-контролеры важны! Взять современную технику, там их понапихано везде, ибо они не только светодиодом могут моргать! Вон человек умудрился свой игровой движок перенести