Перемещение WEB сервера с ардуино
- Войдите на сайт для отправки комментариев
Всем привет!
У меня дома уже несколько лет работает система автоматизации, состоящая из 6 Arduino (DUE, NANO) и других устройств, соединенных ModBus. Управление через Web сервер на SD карте ethernet шильда W5500 на одной из DUE.
В этой системе не устраивает скорость работы ethernet шильда с веб мордой. Особенно при удаленном доступе, когда часть пакетов просто не прогружается.
Последняя библиотека ethernet2 не много ускорила работу, но кардинально ничего не поменялось.
Принято решение переезда Web морды на малину, либо на другой мини ПК.
Возникает вопрос, как передавать данные с главной Arduino (на которую Modbus тянет все данные с других), на этот web сервер.
Пока вижу только только ethernet/MQTT.
Но возникает вопрос ускорит ли это работу этой связки?
И второй вопрос, какие еще возможны варианты общения Arduino с Web сервером?
Кроме малины можно на ESP32 перетащить веп.
На ESP32 сделать веб и связать c DUE? Связать напрямую UARTом?
Потому что заменить полностью DUE ESPшкой по пинам не получится, много всего висит у меня на ней.
А вообще ESP32 достаточно для нормальной работу html, ajax?
Ооо круто, DUE+SD+W5500
Вопрос, как Вы это все подружили по SPI?
у меня заработало только когда я поднял SD на софтверном SPI
На аппаратном что только ни делал, ничего не помогало. Даж аппаратный буфер поставил с управлением от CS для MOSI...
Все равно оно не взлетало. Как только инициализировал SD , w5500 , да и 5100 тоже работать переставали.
не могли бы Вы поделиться сетапом и способами обращения
сейчас то, сто делал на дуе поднял на 8266, с расширителями psf. Даже ее много, для чего хватает.
если due не тянет приемлемо, то проблема в программисте
Ооо круто, DUE+SD+W5500
Вопрос, как Вы это все подружили по SPI?
у меня заработало только когда я поднял SD на софтверном SPI
На аппаратном что только ни делал, ничего не помогало. Даж аппаратный буфер поставил с управлением от CS для MOSI...
Все равно оно не взлетало. Как только инициализировал SD , w5500 , да и 5100 тоже работать переставали.
не могли бы Вы поделиться сетапом и способами обращения
сейчас то, сто делал на дуе поднял на 8266, с расширителями psf. Даже ее много, для чего хватает.
Ну вообще я удивлен, что вы столкнулись с такой проблемой, так как у меня всё это дело работало и на 5100 и на 5500 разными библиотеками без каких либо проблем. А железо пробовали менять? Пины не заняты, которые связаны с SPI?
Нет, не заняты, но по отдельности на SPI и sd и w5x00 работали отлично, вместе никак, при том, что на меге вообще нормально
всякие расширенные возможности использовали?
SPI.begin(4);
// устанавливаем для этого устройства коэффициент деления тактовой частоты 21
SPI.setClockDivider(4, 21);
// инициализируем шину для устройства, подключенного к выводу 10
SPI.begin(10);
// устанавливаем для этого устройства коэффициент деления тактовой частоты 84
SPI.setClockDivider(10, 84);
если due не тянет приемлемо, то проблема в программисте
Ну, что программист я не важный - с этим не поспоришь. Но понятие приемлемо для всех разное. Например удаленный доступ по средствам PPTP/L2TP работает плохо, DUE отдает так долго, что заканчивается таймаут и пакеты уходят не полные, информация теряется.
Кстати на 5100 и Ethernet1 было даже заметно визуально, как прогружается строчка за стройкой кода из примера.
Странно на меге у меня страницы мухой грузятся из sd через 5100
Вообще странно, что дискуссия перешла в русло достаточно ли быстро работает DUE, в сети по миру и по рунету, есть много обсуждений, которые заканчиваются тем, что полноценную веб морду на ардуино не сделать.
Правда на этой DUE, 2600 строк кода, задействованы все три UART, треть пинов, несколько ethernet клиентов и др.
Что такое "полноценную"? Нормальную можно сделать, только упарываться надо.
А что есть полноценная морда? Можете ли показать примеры?
Ибо дуя достаточно мощная штука
есть много обсуждений, которые заканчиваются тем, что полноценную веб морду на ардуино не сделать.
А начинаются они тем, что под ардуино подразумевается uno, которая примерно в 25 раз медленее due
есть много обсуждений, которые заканчиваются тем, что полноценную веб морду на ардуино не сделать.
А начинаются они тем, что под ардуино подразумевается uno, которая примерно в 25 раз медленее due
Там как правило не в ардуине дело. 5100 редкая гадость.
В крайнем в своем проекте, когда захотел WEB-интерфейс, так доцепил ESP8226. Сразу только в одну сторону, просто на просмотр как оно работает. Прямо на подвернувшийся свободный пин, на нем софтовую передачу ногодрыгом аж на скорость 250000бод. Чтоб код на ардуине не тормозить сильно. UART ESP8226 справился на удивление хорошо. Принимаем в ESP8226, сохраняем, а как спросят - конвертим данные и отдаем HTML. Очень легко взлетело.
С чего это 5100 - гадость? Нормальный чип.
вопрос с обсуждения выбора архитектуры переметнулся на обсуждение частностей )))
Вопрос был только один: "ускорит ли это работу этой связки?". И ответ - "работу связки ускорит замена программиста".
По архитектуре все доступное ардуинщику уже предложено, несмотря на отсутствие заявленных требований к производительности веб-интерфейса.
Ну кому и гадость нормой становится. По 8КБ на входной и выходной буфер, да еще и на 4 сокета. Это по 2КБ на сокет. Это серьезно? При обычном размере пакета в езернете 1,5КБ. То есть влазит только один пакет. Стоит передать немного больше и окажется второй принимать некуда. А первый вычитывать по SPI со скоростью на порядок ниже езернетовских 100Мбит.
Этот отстой кое как работает только в идеальной ситуации: низкие потоки данных, отсутствуют отклонения в размерах пакетов, не нарушен их порядок следования и т.д. Т.е. 5100 - минимально возможная реализация стека ТСР, которая может работать при идеальных условиях, и парит мозги при любом отклонении, причем хрен поймешь что ей именно не нравится, часто просто не нравится роутер.
И при всем этом оно еще имеет наглость грется.
Ну кому и гадость нормой становится. По 8КБ на входной и выходной буфер, да еще и на 4 сокета. Это по 2КБ на сокет. Это серьезно? При обычном размере пакета в езернете 1,5КБ. То есть влазит только один пакет.
Больше одного пакета и не надо, лол. Они всё равно уходят строго по очереди. Как и 100 мбит для веб-интерфейса для поделки на паре нанок. .
Я, конечно, извиняюсь, но зачем восьмибитному МК на 100 мегабит керогазить? Он что, DPI реализует что ли или на нем фабрика коммутирующая собрана? Там SPI быстрее захлебнется, чем хотя бы 10 мбит утилизируется.
По памяти чип можно переконфигурить под один сокет. У ENC28J60 вообще памяти нет и ничего, вполне себе работает.
На первых RBPi Ethernet через USB был заведен. Порт на 100, а толку на 10мбит. И ничего, никто не говорил, что это дерьмо.
Если уйти от субъективного быстро\медленно, то меня не устраивает, что при удаленном доступе через PPTP/L2TP с пробросом портов, мой сервер на ардуино работает очень не стабильно (половина страницы не догружается, xml/ajax запросы не обновляются, приходится много раз перезагружать страницу).
При этом web интерфейсы главного роутера, одного роутера за ним, ресивера видеонаблюдения работает отлично, почти, как при локальном обращении к ним.
всякие расширенные возможности использовали?
SPI.begin(4);
// устанавливаем для этого устройства коэффициент деления тактовой частоты 21
SPI.setClockDivider(4, 21);
// инициализируем шину для устройства, подключенного к выводу 10
SPI.begin(10);
// устанавливаем для этого устройства коэффициент деления тактовой частоты 84
SPI.setClockDivider(10, 84);
расширенные возможности не пробовал и даже не знал о них. При параметрах, которые вы приводите удалось ускорить работу?
Если уйти от субъективного быстро\медленно, то меня не устраивает, что при удаленном доступе через PPTP/L2TP с пробросом портов, мой сервер на ардуино работает очень не стабильно (половина страницы не догружается, xml/ajax запросы не обновляются, приходится много раз перезагружать страницу).
При этом web интерфейсы главного роутера, одного роутера за ним, ресивера видеонаблюдения работает отлично, почти, как при локальном обращении к ним.
Ну так и делай веб-морду на том, на чем нравится. Например на малинке-апельсинке, а данные пусть скидываются в SQL/MQTT/просто текстовый файл. На малинке/апельсинке есть нормальные UART к которому можно приделать модбас, так будет еще проще.
По надежности: у меня на стенке на гвоздике висит апельсинка Orange Pi Zero. с 512М ОЗУ. Она выполняет роль WiFi принт и сканер сервера. К ней, через USB хаб, подключено Самсунговское лазерное МФУ и цветной струйник HP.
Вот её аптайм, взятый только что. И то 84 дня назад я её перезагружал после накатывания обновлений ;)))
wlad@orangepizero:~$ w
12:52:39 up 84 days, 20:30, 1 user, load average: 0.00, 0.01, 0.05
При этом web интерфейсы главного роутера, одного роутера за ним, ресивера видеонаблюдения работает отлично, почти, как при локальном обращении к ним.
И это логично, т.к. их разработкой занимались люди долго и за хорошие деньги. На mega2560+W5100 я поднимал веб с ajax для системы мониторинга. Лично меня почти удовлетворяло (графики не было вообще). Inspiritus его видел, тыкал.
Давайте, перефразирую вопрос.
В связи с кривостью программиста\загруженности DUE есть необходимость переноса Web сервера с DUE.
Рассматривается вариант переноса на Orange Pi Zero\малина\ESP32.
Вопрос, какую связь организовать между DUE и Orange Pi Zero\малина\ESP32.
Есть возможность разнеси их и посадить на Ethernet/WIFI, есть возможность поставить рядом и соединить по UART, посадить на Modbus (отдельный от основной модбас сети).
В случае Ethernet/WIFI только SQL/MQTT?
По чистому UART? Написать свой протокол?
Рассматривается вариант переноса на Orange Pi Zero\малина\ESP32.
Вопрос, какую связь организовать между DUE и Orange Pi Zero\малина\ESP32.
Есть возможность разнеси их и посадить на Ethernet/WIFI, есть возможность поставить рядом и соединить по UART, посадить на Modbus (отдельный от основной модбас сети).
Orange Pi Zero\малина\ESP32 имеют стандартные способы подключения к LAN. Но так же имеют и 3,3V TTL, который, как я понимаю, такой же, как и в DUE. Поэтому ответ: хоть просто двумя проводами (UART/I2C), хоть по WiFi/Ethernet. И в том и другом случае что-то придется дописывать, но в первом случае меньше затраты на присоединение.
"Унутре" у малинки/апельсинки обычный Линукс. Напиши обработку УАРТ на любимом языке. Под Линух есть фсё, кроме виндовой экзотики (типа C#). Я бы выбрал Питон, но не настаиваю, может тебе Перл ближе?
Ну кому и гадость нормой становится. По 8КБ на входной и выходной буфер, да еще и на 4 сокета. Это по 2КБ на сокет. Это серьезно? При обычном размере пакета в езернете 1,5КБ. То есть влазит только один пакет.
Больше одного пакета и не надо, лол. Они всё равно уходят строго по очереди.
ууу какой дремучий... так мы, значить, не знаем как сеть работает. "Если дейтаграмма прибывает с нарушением порядка, сегменты TCP, которые инкапсулированы в дейтаграмме, с высокой степенью вероятности будут в беспорядке."
https://intuit.ru/studies/professional_retraining/943/courses/2/lecture/...
Учись, студент. Это первая же ссылка из гугла, но там очень много гадостей, которые в принципе должен любой узел обрабатывать.
У-ходят, солнце. Не ПРИ-
А твоя ссылка лишь описывает, почему они могут и ПРИ-ходить по одному, не испытывая серьезных проблем.
А он и не могЕт на 100МБ. На 100 w5100 могЕт, но SPI его держит, узкое место. Скорость нужна чтоб не висеть МК все время в отправке и приеме данных. Есть и другие дела. Например ща у меня выдаются страницы по 100-200КБ HTML, чтоб ее выпихнуть по тому SPI десятые доли секунды уйдет. А работу кто делать будет? В архитектуре с ардуино+w5100 боюсь такое даже не реализуемо. А с esp8266 - запросто, причем в проекте изначале без веба сделанном, как пришлепка за день-другой.
У-ходят, солнце. Не ПРИ-
А твоя ссылка лишь описывает, почему они могут и ПРИ-ходить по одному, не испытывая серьезных проблем.
Беспорядок на столе беспорядок в голове. А беспорядок в голове - бред в сообщении. Наведи порядок на столе, шоле. Потом рассмотри w5100 как девайс между ардуино и роутером и поймешь, что пока не укажешь откуда ПРИ- и куда У- толку не будет.
Ссылка описывает именно "Транспортный уровень. Протокол управления передачей (Transmission Control Protocol — TCP)" где там, по одному? ))))
Давайте, перефразирую вопрос.
В связи с кривостью программиста\загруженности DUE есть необходимость переноса Web сервера с DUE.
Рассматривается вариант переноса на Orange Pi Zero\малина\ESP32.
Вопрос, какую связь организовать между DUE и Orange Pi Zero\малина\ESP32.
Есть возможность разнеси их и посадить на Ethernet/WIFI, есть возможность поставить рядом и соединить по UART, посадить на Modbus (отдельный от основной модбас сети).
В случае Ethernet/WIFI только SQL/MQTT?
По чистому UART? Написать свой протокол?
Излишне мощная штука для одной ардуины. У меня на Orange Pi , правда не зеро, а РС крутится. Тоже на стене перед рабочим столом висит. Домашний веб-сервер под апачей (в т.ч. мультимедиа) интерфейсы с внешнего мира на 4 поделки+ к ней напрямую по USB нана подключена (кстати, тоже вариант подключения, даже дров USB не потребовалось!!). К нане куча хлама, датчикм, экран, приемопередатчиками на 433МГц. Она типа для попробовать чего. Еще к Orange Pi РС на i2c висит ADS1115.
Для домашних ESP - Orange Pi как агрегатор, промежуточное звено для выхода в внешний мир и клиент периодически ходящий к ESP для получения данных, логирования и пр., внесения в БД (MySQL+PHP, но есть и сишный модуль) иногда обработки. Но HTML сами ESP выдают. Про ajax ничего не скажу. Хорошего ничего. Где нужно динамику - Websocket. Он безупречен.
//В случае Ethernet/WIFI только SQL/MQTT?
MQTT - херня. Не юзаю. Чего он рядом с SQL в вопросе - не понял.
//По чистому UART? Написать свой протокол?
Ну в крайнем случае я так и сделал. Протокол простейший. Односторонний для мониторинга, фиксированной длины 16байт. Стартовый байт, два байта счетчика контроля последовательности (боялся на 250Кбод пропуски будут - а нифига, излишнее вышло, за то теперь знаю что на такой скорости ESP бессбойная) 12 байт первичных данных с датчика и результатов их обработки, ну и CRC. И такое передается десятки раз в секунду. А ESP их собирает и выдает в HTML набранное за последние 3 минуты. Ну и еще кой-шо, графики там, немного управления ... Так сотни килобайт HTML и получается. А Orange Pi, кроме связи с внешним миром этой ESP, еще раз в минуту запрашивает такой HTML в режиме 24*7 и хранит его на терабайтнике. Для отладки - блеск просто. Любой сбой всегда не пропадает.
sadman41, Logik, inspiritus, wdrakula всем большое спасибо. Очень много ценной информации и направлений для размышления и проработки.
А он и не могЕт на 100МБ. На 100 w5100 могЕт, но SPI его держит, узкое место. Скорость нужна чтоб не висеть МК все время в отправке и приеме данных. Есть и другие дела.
Могёт-не могёт - второй вопрос. Первый - зачем такая сетевая скорость восьмибитному чипу, а вернее - его хозяину? Он, поди, на корове колхозные поля ещё пашет...
Просто прийми как должное, у некоторых МК кроме блинка еще чето делает. Могеш открыть раздел проекты и почитать варианты использования...
Ну, раз опять в бутылку полез, то я откланиваюсь.