Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср май 25, 2016 5:05 pm

3.В данном варианте реально видеть медленно изменяющиеся процессы. динамичные процессы(напряжения ,токи,мощности..)-
пока сомневаюсь.
Это и не разрабатывалось для особо динамических процессов. Типовой сценарий — температура передаётся редко, только когда изменения превышают половину градуса, в случае резкого повышения — шлётся аларм. «Резкость» можно изменить в скетче.
4 Опять же АМС_контроллер занимает 60 процентов памяти ,но оставляет почти полтора кило оперативы. Для "тяжелых"
сенсоров наверное придется использовать Мегу. Жестко(всмысле габаритов), но очень автономно. У нас продают Мегу в форм-факторе uno и разведены все 74 !!! цифровых выхода.
Стек nRF24 занимает 10 килобайт из 30. С одной стороны многовато, с другой — для большинства применений 20 КБ достаточно. Может быть кому-то удастся оптимизировать код и сделать стек меньше.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Ср май 25, 2016 5:11 pm

Сейчас всё это работает.Попробую поиграть с upload от alexsis_76.Посмотрю как заливаются файлы на CD.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Ср май 25, 2016 10:00 pm

alexsis_76 писал(а):serghei попробуй вот это
Загрузил в дую. Версия 1.7.9 Винда 7.Слабенький нетбук аналог малины. Это новая версия Сериала1 ? Если да, то пишет -не могу открыть порт. Если просто переключение страниц
то не успеваю сказать " раз " ,полноэкранное демо открывается за "раз и чуть-чуть")))
Вообще чума! Обязательно напиши как пользоваться!!
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Чт май 26, 2016 4:33 am

Вообще чума! Обязательно напиши как пользоваться!!
Нет это не сериал, это кеширование страниц в действии, призвано сделать работу более уверенной, смысл в том что мы отдаем браузеру команду кешировать содержимое сайта, в результате чесная загрузка происходит только при первом обращении, потом браузер загружает локальные копии
строки
void sendHtmlAnswer(EthernetClient cl)
{write_p(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnnection: close\r\nCache-Control: private, max-age=86400*365,must-revalidate\r\n\r\n"),cl);}

void sendCssAnswer(EthernetClient cl)
{write_p(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/css\r\nConnnection: close\r\nCache-Control: private, max-age=86400*365,must-revalidate\r\n\r\n"),cl);}

void sendJsAnswer(EthernetClient cl)
{write_p(PSTR("HTTP/1.1 200 OK\r\nContent-Type: application/javascript\r\nConnnection: close\r\n\r\n"),cl);}

void sendImgAnswer(EthernetClient cl)
{write_p(PSTR("HTTP/1.1 200 OK\r\nContent-Type: image/png\r\nConnnection: close\r\nCache-Control: private, max-age=86400*365,must-revalidate\r\n\r\n"),cl);}

void sendXmlAnswer(EthernetClient cl)
{write_p(PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nConnnection: close\r\n\r\n"),cl);}
управляют процессом кеширования, число после max-age время в секундах в течении которого будет валиден кеш.
еще одна полезная функция это
void write_p(const char *progmem_s,EthernetClient cl){
char c;
char Buf[512];
uint8_t Count=0;
while ((c = pgm_read_byte_near(progmem_s++))) {
Buf[Count]=c;
Count++;
}
cl.write(Buf,Count);
}
позволяет читать константы из памяти программ, существенно экономя оперативку(строка
PSTR("HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\nConnnection: close\r\n\r\n находится в памяти программ) также можно хранить в памяти небольшую веб страницу, write_p позволяет зараз прочитать 512 байт, поместив ее в цикл можно прочитать любое количество байт.
попробуй эти файлы, при отсутствии SD карты будет выплевывать
File ne nayden,proverte SD karty
после внесения изменений не забудь сбрасывать кеш ;)
Вложения
11.rar
(7.37 КБ) 178 скачиваний
За это сообщение автора alexsis_76 поблагодарил:
serghei (Чт май 26, 2016 8:36 am)
Рейтинг: 1.16%
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Чт май 26, 2016 7:55 am

Разница конечно огромная. Дуя вообще то и так быстрая,а тут загрузки вообще не замечаешь- переключается мгновенно.
Придет второй 5100 попробую на меге. Осталось выяснить какие будут подводные камни.Насколько я понял посещенные страницы АМС висят в браузере какое то время.А потом все таки обновляются сами? Не будет ситуации через неделю при запущенном браузере что мы попадем во "вчерашний день"? У меня сейчас жизненно важные цифры выводятся на экран,браузер
открываю полюбоваться на картинки(ну и конечно же похвастаться))))
Давай все таки вернемся к Сериалу -сейчас буду адаптировать файлы под себя,надо будет постоянно их переписывать.
Выложи еще раз правильные файлы.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Чт май 26, 2016 8:05 am

Придет второй 5100 попробую на меге
в этом случае мега практически не будет отставать от дуи
.Насколько я понял посещенные страницы АМС висят в браузере какое то время.А потом все таки обновляются сами? Не будет ситуации через неделю при запущенном браузере что мы попадем во "вчерашний день
они находятся в кеше браузера,как только время валидации кончится, данные снова будут загружены с устройства,если что то меняешь нужно почистить кеш, а так все работает, стрелочки двигаются, диодики мигают, кешируются только скрипты и картинки, результаты работы скрипта не кешируются.
Давай все таки вернемся к Сериалу -сейчас буду адаптировать файлы под себя,надо будет постоянно их переписывать.
Выложи еще раз правильные файлы.
что именно тебя интересует,после последнего выкладывания я к ним не прикасался.там у тебя вроде порт не цепляется, если хочешь добавлю вывод кода ошибки, посмотрим что ему там не нравится?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Чт май 26, 2016 8:34 am

Да,очень тяжело находит порт.Последний раз ты выложил версию где есть вкладка arduino.h . Не хочется менять что то в IDE.
Просто надо заливать файлы.Скорость не важна.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Чт май 26, 2016 8:47 am

сейчас нагребу,тут у меня куча всяких сериалов ;)
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: Arduino Mega Server

Сообщение ipz » Сб май 28, 2016 9:22 pm

Установил AMS для целей обучения)))
Прикрутил Livolo, чтоб не простаивал почем зря.

Есть предложение пересмотреть формат команд (на усмотрение Алекса). Сейчас команды сервер воспринимает в формате

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

http://MEGA_IP/&rele4=1 
Если мега будет управлять более сложными процессами - я бы предпочел передавать отдельно команду, отдельно параметры. В моем случае это могла бы быть строка

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

http://MEGA_IP/livolo?id=xxxxx&key=Y 

Тогда парсинг бы выглядел следующим образом:

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

void parseCommands(EthernetClient cl) {
  int posBegin;
  int posEnd;
  int posParam;

  if (request.indexOf("/") >= 0) {
    posBegin = request.indexOf("/")+1;
    posEnd = request.indexOf("HTTP");

    if (request.indexOf("?") >= 0) {
       posParam = request.indexOf("?");
       command = request.substring(posBegin, posParam);              
       parameter = request.substring(posParam + 1, posEnd - 1);              
    } else {
        command = request.substring(posBegin, posEnd - 1);              
        parameter = "";
      }

    Serialprint("command: "); Serial.println(command);
    Serialprint("parameter: "); Serial.println(parameter);
          
    setKey();
    
    #ifdef LEDS_FEATURE
      setNightLed();
      setColorLed();
    #endif

    #ifdef LIVOLO_FEATURE
      livolo_switch();
    #endif
    
    // erase request
    request = "";
  } // if (url.indexOf("?") >= 0)
} // parseCommands
 
В результате в переменной command будем иметь livolo, а в переменной parameter id=xxxxx&key=Y. Вторая переменная будет уже парсится в соответствующей функции, если команда соответствует.

Я переделаю, конечно, свой модуль, чтобы он работал с парсингом из стандартной поставки. Но душа не лежит)))
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: Arduino Mega Server

Сообщение ipz » Сб май 28, 2016 10:30 pm

Как-то так.
В версии AMS 0.15 пин 8 занят модулем NRF24. Надо задать любой свободный (перечислены на закладке doc) в строке

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

Livolo livolo(8) 
PS: Проблема оказалась в том, что разные браузеры отправляют запрос по 3 - 5 раз в промежуток времени до 4 секунд. Для livolo это критично, т.к. одна и та же кнопка key=8 работает как переключатель. Поэтому свет включался/выключался по нескольку раз.
Пришлось запоминать для каждого id время, когда ему отправлялась какая-нибудь команда.
Массив идентификаторов предполагает 4 значения (можно поменять)
Задержка, в течении которой новая команда не будет отправлена, установлена в 4 секунды, т.к. мой SmartTV пойман на том, что отправлял 5-й запрос на 3899 миллисекунде.

UPD: Мне кажется, что клиенту нужно что-то отвечать после обработки команды, чтоб он не бомбил запросами, но что отвечать не знаю))
Вложения
livolo.7z
(1.45 КБ) 183 скачивания
Ответить