Объекты те же, язык тоже практически тот же.Alex писал(а):А если на C/C++ , то это практически новый проект, всё придётся переписать заново.
Arduino Mega Server
Модератор: Alex
-
- Сообщения: 110
- Зарегистрирован: Пт авг 14, 2015 11:24 am
- Благодарил (а): 3 раза
- Поблагодарили: 6 раз
Re: Arduino Mega Server
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Разбор этого самого заголовка есть в shell скрипте. Пример находится в модуле для CyberWrt прошивке для роутеров. У меня исходников не сохранилось: http://cyberwrt.ru/demo/index.php?categories=Utilites
Можно попросить исходник у админа форума, либо залить на роутер CyberWrt и установить модуль, исходники скачаются при этом.
Называется модуль Обновление (update). В нём же есть клиентская часть. Я тут где-то уже приводил ссылку на забугорный ресурс с самой идеей:
http://cyber-place.ru/showpost.php?p=12044&postcount=45
Можно попросить исходник у админа форума, либо залить на роутер CyberWrt и установить модуль, исходники скачаются при этом.
Называется модуль Обновление (update). В нём же есть клиентская часть. Я тут где-то уже приводил ссылку на забугорный ресурс с самой идеей:
http://cyber-place.ru/showpost.php?p=12044&postcount=45
Код: Выделить всё
#!/bin/bash
OIFS="$IFS"
read boundary
read disposition
read ctype
read junk
#Holy fuck, this sucks!
#Due to \n\r line breaks we have 2 extra bytes per line read,
#6 + 2 newlines == 10 junk bytes
a=${#boundary}
b=${#disposition}
c=${#ctype}
a=$((a*2+b+c+d+10))
IFS="${IFS}&:"
set $QUERY_STRING
dir=$1
file=$2
SIZE=$((HTTP_CONTENT_LENGTH-a))
echo "Content-Type: text/html"
echo ""
echo "Upload complete, $SIZE bytes stored<br>"
echo "Written to $dir, filename $2 ($dir/$file)<br>"
dd ibs=1 obs=512 count=$SIZE of=$dir/$file
Россия навсегда!
-
- Сообщения: 130
- Зарегистрирован: Пн окт 28, 2013 5:06 pm
- Откуда: Молдова
- Благодарил (а): 11 раз
- Поблагодарили: 10 раз
Re: Arduino Mega Server
Alex вопрос к тебе, пытаюсь запустить модуль Electro в AMS так вот ты там используешь 13 датчиков силы тока и 1 датчик уровня напряжения, так вот мне 13 портов не надо, для начала только 1 на всю квартиру а дальше посмотрим.
И я так понимаю нужно просто изменить значение const int MAX_UI_SENSORS = 1; // max 14
Теперь ещё вопрос у меня нету пока датчика уровня напряжение я заказал готовый с китая и пока он идёт я буду без него, так вот будет ли модуль работать без датчика напряжения и где мне закоментировать временно пин датчика напряжения, он как я понимаю = 0
И я так понимаю нужно просто изменить значение const int MAX_UI_SENSORS = 1; // max 14
Теперь ещё вопрос у меня нету пока датчика уровня напряжение я заказал готовый с китая и пока он идёт я буду без него, так вот будет ли модуль работать без датчика напряжения и где мне закоментировать временно пин датчика напряжения, он как я понимаю = 0
Server: Raspberry Pi 3 B+
OS: Rasbian
OS: Rasbian
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
MAX_UI_SENSORS = 2, с единицей будет только напряжение.
Без блока напряжение будет 0 и следовательно мощность будет ноль. Комментировать напряжение я не пробовал, скорее всего не получится.
Без блока напряжение будет 0 и следовательно мощность будет ноль. Комментировать напряжение я не пробовал, скорее всего не получится.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Заменитель кроссвордов для программистов.
Этот кусок кода нужно переделать в функцию с циклом или рекурсивную. Сейчас она выбирает 4 маркера, а нужно без ограничений на кол-во маркеров. (код Ардуино)
Маркеры 2-х байтовые.
Этот кусок кода нужно переделать в функцию с циклом или рекурсивную. Сейчас она выбирает 4 маркера, а нужно без ограничений на кол-во маркеров. (код Ардуино)
Маркеры 2-х байтовые.
Код: Выделить всё
int markerPos = checkMarker2(0, MAX_BUFFER_SIZE - 1);
if (markerPos > -1) {
sendDelta(0, markerPos, sclient);
insertBlock(buff[markerPos + 1], sclient);
int markerPos2 = checkMarker2(markerPos + 2, MAX_BUFFER_SIZE - 1);
if (markerPos2 > -1) {
sendDelta(markerPos + 2, markerPos2, sclient);
insertBlock(buff[markerPos2 + 1], sclient);
int markerPos3 = checkMarker2(markerPos2 + 2, MAX_BUFFER_SIZE - 1);
if (markerPos3 > -1) {
sendDelta(markerPos2 + 2, markerPos3, sclient);
insertBlock(buff[markerPos3 + 1], sclient);
int markerPos4 = checkMarker2(markerPos3 + 2, MAX_BUFFER_SIZE - 1);
if (markerPos4 > -1) {
sendDelta(markerPos3 + 2, markerPos4, sclient);
insertBlock(buff[markerPos4 + 1], sclient);
sendDelta(markerPos4 + 2, MAX_BUFFER_SIZE, sclient);
} else {
sendDelta(markerPos3 + 2, MAX_BUFFER_SIZE, sclient);
}
} else {
sendDelta(markerPos2 + 2, MAX_BUFFER_SIZE, sclient);
}
} else {
sendDelta(markerPos + 2, MAX_BUFFER_SIZE, sclient);
}
} else {
sclient.write(buff, rsize);
}
Re: Arduino Mega Server
Писал без отладки и быстро - просто в редакторе
ЭТО ФУНКЦИЯ
ЭТО ОСТАТОК ОТ ВАШЕГО КОДА
ЭТО ФУНКЦИЯ
Код: Выделить всё
int MarkerPosX(int mPosX, int mPosX2, ТИП sclientX, ТИП buffX, ТИП rsizeX, int rekursiv) {
// ТИП sclientX, ТИП buffX, ТИП rsize
// Не знаю тип и видимость этих переменных
// Поставьте их тип
// Если они глобальные можно убрать из вызова функции и убрать ...Х у них
int mPos;
if (mPosX > -1) {
sendDelta(mPosX2 + 2, mPosX, sclientX);
insertBlock(buffX[mPosX + 1], sclientX);
mPos = checkMarker2(mPosX + 2, MAX_BUFFER_SIZE - 1);
rekursiv++; // это счетчик глубины рекурсии. Может надо контролировать глубину?
MarkerPosX{mPos, mPosX, sclientX, buffX, rsizeX, rekursiv};
}
else {
if(rekursiv = 1){
sclientX.write(buffX, rsizeX); // это выполняем если глубина рекурсии = 1
}
else {
sendDelta(mPosX2 + 2, MAX_BUFFER_SIZE, sclientX)
}
}
return;
}
Код: Выделить всё
int markerPos = checkMarker2(0, MAX_BUFFER_SIZE - 1);
MarkerPosX(markerPos, -2, sclient, buff, rsize, 1);
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Спасибо за ответ. Пока ждал, сам успел решить эту задачу.Писал без отладки и быстро - просто в редакторе

Код: Выделить всё
void markersWorks(int pos, EthernetClient cl) {
if (pos > rsize - 2) {return;}
int markerPos = checkMarker(pos, rsize - 1);
if (markerPos > -1) {
sendDelta(pos, markerPos, cl);
insertBlock(buff[markerPos + 1], cl);
markersWorks(markerPos + 2, cl);
} else {
if (pos == 0) {
cl.write(buff, rsize);
} else {
sendDelta(pos, rsize, cl);
}
}
}
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Изменение стиля, дизайна и функциональности одним кликом. Был один сайт — стал другой. Просто ставите галочку и перегружаете страничку и всё.
Брендирование. Стиль кашей компании или интернет-магазина одним кликом. Вы можете продавать не просто Ардуино-железо, но и готовые решения на его основе.
Брендирование. Стиль кашей компании или интернет-магазина одним кликом. Вы можете продавать не просто Ардуино-железо, но и готовые решения на его основе.
- Вложения
-
- 1
- 1.jpg (130.84 КБ) 14820 просмотров
-
- 2
- 2.jpg (126.32 КБ) 14820 просмотров
-
- 3
- 3.jpg (122.97 КБ) 14820 просмотров
- Рейтинг: 1.16%
-
- Сообщения: 2
- Зарегистрирован: Чт авг 20, 2015 11:43 am
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: Arduino Mega Server
Ребята, привет!
Во-первых, спасибо вам огромное, что взялись за этот труд! Веб-сервера под Ардуино нормального действительно пока нет.
Я сам долгое время пытаюсь написать свой сервер, но пока все неудачно. Вот, нашел вас сначала на Tostere, среди ответов, потом на Geektimes, и теперь пришел на форум за последней версией, и сломал мозг…
Теперь хочу вас пожурить да поругать.
1. Я занимаюсь робототехникой, и в моем случае веб-сервер выгружает в браузер посльзователя управляющий интерфейс. Причем здесь ВНУТРЕННЯЯ МОРДА сервера, на которой вы сосредоточились на 33х страницах форума, я, извините, понять не могу.
2. Вторая актуальная тема у вас, это загрузка файлов обратно на сервер. Это разве тема Ардуино-сервера? При наличии SD-арты то? Ну, ладно… для интернет-магазина может и нужно… ну, для удаленного администрирования, возможно… А вот для начала работы, пожалуй, нужен сам сервер, который на запросы GET выдает таки корректно и многопоточно html-код и файлы css и js. Все, остальное, это расширенный функционал.
3. Друзья, я все могу понять, могу понять нелюбовь к githubу, могу понять нехватку ресурсов для модерации форума… но все же, почему для того, чтобы достать таки последнюю версию вашего продукта нужно пробежаться по кучи перекрестных ссылок начиная с гиктаймс и потом на форуме помереть таки в поисках заветного поста с последней версией!? Ну почему в первом посте до сих пор висит ссылка на САМУЮ ПОСЛЕДНЮЮ и АКТУАЛЬНУЮ версию 0.11, а все последние скриншоты даны для 0.12? Почему!? Почему на 29 странице версия 0.12 была анонсирована, а вплоть до 33й ссылки на нее как не было так и нет!? Так где можно взять ПОСЛЕДНЮЮ версию, братцы?
4. Теперь о серьезном. Перечитывая в который раз обсуждение, пришел в выводу, что ваш сервер работает ТОЛЬКО с модулем w5100. Это так? Если так, то, о Боги!, да почему же!!!???
Как устроены все wifi шилды для ардуино – они пробрасывают запросы с wifi в UART – всё, т.е. вообще всё! Никаких других алгоритмов. Что пришло в запросе, то проброшено в UART. Дальше парсим и отдаем обратно что требовалось. Нюансы есть в самом железе wifi, какой чип сколько соккетов поддерживает, есть ли аппаратная поддержка режима сервера, а не только клиента и т.д. Но и это всего лишь нюансы. Так, например, на не поддерживающем в железе режим сервера чипе от Rovio, можно все эмулировать программно. За исключением одного соккета, это действительно проблема…
Ребята, в общем, что нужно сделать с вашим сервером, чтобы отвязать его от конкретного чипа wifi, и превратить в полноценный Ардуино веб-сервер, который работает с заданным UART портом?
Чипов wifi под Ардуино много, но все они сидят на UERTe, и каждый подбирает чип по нужде, кому по энергопотреблению, кому по количеству одновременных сессий, и т.д. Ни внутренняя морда сервера, ни плюшки с заливкой файлов особой роли не играют. Сервера самого под Ардуино человеческого нет, вот проблема…
Поэтому труд ваш велик и слежу за ним с могучим интересом. Помог бы чем с удовольствием, но круг интересов моих в робототехнике ограничен только самим сервером, только выгрузкой управляющего интерфейса. Подскажите, все же, где взять последнюю версию?
Во-первых, спасибо вам огромное, что взялись за этот труд! Веб-сервера под Ардуино нормального действительно пока нет.
Я сам долгое время пытаюсь написать свой сервер, но пока все неудачно. Вот, нашел вас сначала на Tostere, среди ответов, потом на Geektimes, и теперь пришел на форум за последней версией, и сломал мозг…
Теперь хочу вас пожурить да поругать.
1. Я занимаюсь робототехникой, и в моем случае веб-сервер выгружает в браузер посльзователя управляющий интерфейс. Причем здесь ВНУТРЕННЯЯ МОРДА сервера, на которой вы сосредоточились на 33х страницах форума, я, извините, понять не могу.
2. Вторая актуальная тема у вас, это загрузка файлов обратно на сервер. Это разве тема Ардуино-сервера? При наличии SD-арты то? Ну, ладно… для интернет-магазина может и нужно… ну, для удаленного администрирования, возможно… А вот для начала работы, пожалуй, нужен сам сервер, который на запросы GET выдает таки корректно и многопоточно html-код и файлы css и js. Все, остальное, это расширенный функционал.
3. Друзья, я все могу понять, могу понять нелюбовь к githubу, могу понять нехватку ресурсов для модерации форума… но все же, почему для того, чтобы достать таки последнюю версию вашего продукта нужно пробежаться по кучи перекрестных ссылок начиная с гиктаймс и потом на форуме помереть таки в поисках заветного поста с последней версией!? Ну почему в первом посте до сих пор висит ссылка на САМУЮ ПОСЛЕДНЮЮ и АКТУАЛЬНУЮ версию 0.11, а все последние скриншоты даны для 0.12? Почему!? Почему на 29 странице версия 0.12 была анонсирована, а вплоть до 33й ссылки на нее как не было так и нет!? Так где можно взять ПОСЛЕДНЮЮ версию, братцы?
4. Теперь о серьезном. Перечитывая в который раз обсуждение, пришел в выводу, что ваш сервер работает ТОЛЬКО с модулем w5100. Это так? Если так, то, о Боги!, да почему же!!!???
Как устроены все wifi шилды для ардуино – они пробрасывают запросы с wifi в UART – всё, т.е. вообще всё! Никаких других алгоритмов. Что пришло в запросе, то проброшено в UART. Дальше парсим и отдаем обратно что требовалось. Нюансы есть в самом железе wifi, какой чип сколько соккетов поддерживает, есть ли аппаратная поддержка режима сервера, а не только клиента и т.д. Но и это всего лишь нюансы. Так, например, на не поддерживающем в железе режим сервера чипе от Rovio, можно все эмулировать программно. За исключением одного соккета, это действительно проблема…
Ребята, в общем, что нужно сделать с вашим сервером, чтобы отвязать его от конкретного чипа wifi, и превратить в полноценный Ардуино веб-сервер, который работает с заданным UART портом?
Чипов wifi под Ардуино много, но все они сидят на UERTe, и каждый подбирает чип по нужде, кому по энергопотреблению, кому по количеству одновременных сессий, и т.д. Ни внутренняя морда сервера, ни плюшки с заливкой файлов особой роли не играют. Сервера самого под Ардуино человеческого нет, вот проблема…
Поэтому труд ваш велик и слежу за ним с могучим интересом. Помог бы чем с удовольствием, но круг интересов моих в робототехнике ограничен только самим сервером, только выгрузкой управляющего интерфейса. Подскажите, все же, где взять последнюю версию?
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Sterpa, а зачем вам вообще сервер на Arduino? Для вашей задачи подошёл бы просто роутер в качестве шлюза: Ethernet - UART. Так делают, к примеру, в роботе CyberBot2 на cyber-place форуме.
Я бы лично использовал вообще протокол Modbus-RTU для управления. Тогда в Arduino был бы код, реализующий modbus-slave устройство. Если использовать роутер в качестве шлюза, то modbus-master делается на скриптах. Тогда весь протокол обмена идёт по стандартным спецификациям. Другое дело, что подавляющее большинство робототехников являются любителями и не могут освоить промышленные протоколы для последовательных интерфейсов. От чего постоянно выдумывают велосипеды.
Я бы лично использовал вообще протокол Modbus-RTU для управления. Тогда в Arduino был бы код, реализующий modbus-slave устройство. Если использовать роутер в качестве шлюза, то modbus-master делается на скриптах. Тогда весь протокол обмена идёт по стандартным спецификациям. Другое дело, что подавляющее большинство робототехников являются любителями и не могут освоить промышленные протоколы для последовательных интерфейсов. От чего постоянно выдумывают велосипеды.
Россия навсегда!