Arduino Mega Server

Модератор: Alex

cg_shura
Сообщения: 110
Зарегистрирован: Пт авг 14, 2015 11:24 am
Благодарил (а): 3 раза
Поблагодарили: 6 раз

Re: Arduino Mega Server

Сообщение cg_shura » Пт авг 14, 2015 10:36 pm

Alex писал(а):А если на C/C++ , то это практически новый проект, всё придётся переписать заново.
Объекты те же, язык тоже практически тот же.
Аватара пользователя
uni
Сообщения: 191
Зарегистрирован: Вс июл 26, 2015 9:21 pm
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Arduino Mega Server

Сообщение uni » Пт авг 14, 2015 10:55 pm

Разбор этого самого заголовка есть в shell скрипте. Пример находится в модуле для CyberWrt прошивке для роутеров. У меня исходников не сохранилось: http://cyberwrt.ru/demo/index.php?categories=Utilites
Можно попросить исходник у админа форума, либо залить на роутер 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
Россия навсегда!
annakin
Сообщения: 130
Зарегистрирован: Пн окт 28, 2013 5:06 pm
Откуда: Молдова
Благодарил (а): 11 раз
Поблагодарили: 10 раз

Re: Arduino Mega Server

Сообщение annakin » Сб авг 15, 2015 3:19 pm

Alex вопрос к тебе, пытаюсь запустить модуль Electro в AMS так вот ты там используешь 13 датчиков силы тока и 1 датчик уровня напряжения, так вот мне 13 портов не надо, для начала только 1 на всю квартиру а дальше посмотрим.
И я так понимаю нужно просто изменить значение const int MAX_UI_SENSORS = 1; // max 14
Теперь ещё вопрос у меня нету пока датчика уровня напряжение я заказал готовый с китая и пока он идёт я буду без него, так вот будет ли модуль работать без датчика напряжения и где мне закоментировать временно пин датчика напряжения, он как я понимаю = 0
Server: Raspberry Pi 3 B+
OS: Rasbian
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб авг 15, 2015 6:15 pm

MAX_UI_SENSORS = 2, с единицей будет только напряжение.

Без блока напряжение будет 0 и следовательно мощность будет ноль. Комментировать напряжение я не пробовал, скорее всего не получится.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб авг 15, 2015 6:15 pm

Заменитель кроссвордов для программистов.

Этот кусок кода нужно переделать в функцию с циклом или рекурсивную. Сейчас она выбирает 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);
                } 
ЛAA
Сообщения: 1
Зарегистрирован: Вт авг 18, 2015 12:44 am
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение ЛAA » Вт авг 18, 2015 1:01 am

Писал без отладки и быстро - просто в редакторе
ЭТО ФУНКЦИЯ

Код: Выделить всё

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); 
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вт авг 18, 2015 5:13 pm

Писал без отладки и быстро - просто в редакторе
Спасибо за ответ. Пока ждал, сам успел решить эту задачу. :) Вот правильный ответ (проверено на практике).

Код: Выделить всё

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);
        }
    }
} 
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср авг 19, 2015 6:29 pm

Изменение стиля, дизайна и функциональности одним кликом. Был один сайт — стал другой. Просто ставите галочку и перегружаете страничку и всё.

Брендирование. Стиль кашей компании или интернет-магазина одним кликом. Вы можете продавать не просто Ардуино-железо, но и готовые решения на его основе.
Вложения
1.jpg
1
1.jpg (130.84 КБ) 14820 просмотров
2.jpg
2
2.jpg (126.32 КБ) 14820 просмотров
3.jpg
3
3.jpg (122.97 КБ) 14820 просмотров
За это сообщение автора Alex поблагодарил:
Sterpa (Чт авг 20, 2015 12:38 pm)
Рейтинг: 1.16%
Sterpa
Сообщения: 2
Зарегистрирован: Чт авг 20, 2015 11:43 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Sterpa » Чт авг 20, 2015 12:36 pm

Ребята, привет!
Во-первых, спасибо вам огромное, что взялись за этот труд! Веб-сервера под Ардуино нормального действительно пока нет.
Я сам долгое время пытаюсь написать свой сервер, но пока все неудачно. Вот, нашел вас сначала на 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

Сообщение uni » Чт авг 20, 2015 3:11 pm

Sterpa, а зачем вам вообще сервер на Arduino? Для вашей задачи подошёл бы просто роутер в качестве шлюза: Ethernet - UART. Так делают, к примеру, в роботе CyberBot2 на cyber-place форуме.

Я бы лично использовал вообще протокол Modbus-RTU для управления. Тогда в Arduino был бы код, реализующий modbus-slave устройство. Если использовать роутер в качестве шлюза, то modbus-master делается на скриптах. Тогда весь протокол обмена идёт по стандартным спецификациям. Другое дело, что подавляющее большинство робототехников являются любителями и не могут освоить промышленные протоколы для последовательных интерфейсов. От чего постоянно выдумывают велосипеды.
Россия навсегда!
Ответить