Arduino Mega Server

Модератор: Alex

Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Вт май 03, 2016 7:02 pm

Как пользоваться таймерами:

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

      if (cycle5m) {
      } 
Таймер раз в 5 минут. Так же и остальные...
На счет по расписанию - удобнее из МД команды посылать, если есть установленная система. Если нет - то так же, условиями задать. Благодаря модулю rtc доступны

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

year()
month()
day()
hour()
minute()
second() 
За это сообщение автора nick7zmail поблагодарил:
serghei (Вт май 03, 2016 8:45 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
selnik
Сообщения: 1
Зарегистрирован: Сб май 07, 2016 3:26 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение selnik » Сб май 07, 2016 3:58 pm

Уважаемый Алекс!
Да, проект, на мой взгляд, многообещающий. На первый взгляд, все хорошо продумано.
Хотелось поскорее попробовать - а как оно на самом деле. Я загрузил проект с сайта,
но столкнулся с несколькими трудностями при загрузке в плату Arduino DUE.
По-правде говоря,я совершил ошибку - загрузил версию arduino IDE 1.6.8.
В ней проект при компиляции выдал кучу ошибок.
Тогда я решил откомпилировать проект в среде arduino IDE 1.6.5 r5, т.к в Вашем исходнике
была ссылка на 1.6.5 r2.

Но и здесь начались трудности - ошибка компиляции в файле DallasTemperature.cpp.
Как оказалось - не определена функция max в строке bitResolution = max(bitResolution, getResolution(deviceAddress));
(при том, что все библиотеки из папки проекта libraries я скопировал (с заменой) в одноименную папку arduino ide)
Попробовал решить проблему, подставив в начале cpp строку #define max(a,b) ((a)>(b)?(a):(b)).
Ошибка больше не появлялась, но при линковке выдалась ошибка:
не найден файл C:\Windows\Temp\Build...\core\syscalls_cortexm3.c.o (извиняюсь, что привожу название файла не точно-память подводит), но файл на самом деле присутствовал в папке Build... , а вложенной папки core не было. Пришлось ее создать
и скопировать в нее требуемый файл.
После этого загрузка в плату прошла успешно.
Но, я прочитал буквально файл readme.txt про копирование файлов на SD карту:

Quick start:
------------
1. Files from archive microSD.zip - to microSD card

а при распаковке архива создается папка microSD, которую я и скопировал на карту памяти, а надо было все
файлы из папки скопировать на карту памяти.

И только после этого у меня УРА! загрузилась страница (на самом деле пришлосьеще один раз RESET нажать на плате W5100).
Да, сайт бесспорно красивый. Пока не понял как его дальше настраивать и как пользоваться SerialCommander.

У меня предложение. Про сложности с компиляцией в разных версиях Arduino IDE уже писали.
Может в архив проекта включать arduino ide с которой он нормально компилируется? Чтобы новичкам проще было стартануть.
Где можно почитать про настройку AMS?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Сб май 07, 2016 4:03 pm

В АМС разбирался методом тыка...начал с того, что отключил почти все модули кроме жизненно-необходимых, удалил их из скетча...меньше кода - меньше разбираться)) Тоже попался на эту фишку с microsd)) как потом выяснилось - есть неплохая документация чуть ли не по каждому файлу http://hi-lab.ru/arduino-mega-server/do ... ch/modules
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вт май 10, 2016 4:14 pm

Уважаемый Алекс!
Вы совершили кучу ошибок и действовали совершенно «не по инструкции». В частности, вы перезаписали библиотеку в среде Ардуино, чего делать не нужно ни в коем случае. При таком подходе нормальной работы АМС и быть не может.

Соответственно, прежде чем приступать к работе с АМС изучите документацию

http://hi-lab.ru/arduino-mega-server/documentation

там есть ответы на большинство вопросов. При грамотном подходе (в соответствии с документацией) АМС работает прекрасно, что подтверждено уже около 1 500 инсталляций 0.14 версии.
Анатолий
Сообщения: 4
Зарегистрирован: Вс апр 17, 2016 10:50 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Анатолий » Вт май 10, 2016 5:05 pm

А кто реализовал подключение датчика BME280 в скетче АМS??? При подключении одного скетча процессор грузится у меня на 100%, а при подключении другого вообще виснет...

Вот код второго скетча
СпойлерПоказать
/*
Modul BME280 (Датчик температуры, влажности и атмосферного давления)
part of Arduino Mega Server project
*/
#ifdef BME280_FEATURE
#include <BME280.h>
#include <Wire.h> // Needed for legacy versions of Arduino.
#define SERIAL_BAUD 9600

BME280 bme; // Default : forced mode, standby time = 1000 ms
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
bool metric = false;

/* === Print a message to stream with the temp, humidity and pressure. === */
void printBME280Data(Stream * client);
/* === Print a message to stream with the altitude, and dew point. === */
void printBME280CalculatedData(Stream* client);

void BME280Init() {
Serial.begin(SERIAL_BAUD);
while(!Serial) {} // Wait
while(!bme.begin()){
Serial.println("Could not find BME280 sensor!");
delay(1000);
}
}
void BME280Works() {
printBME280Data(&Serial);
printBME280CalculatedData(&Serial);
delay(500);
}

void printBME280Data(Stream* client){
float temp280(NAN), hum(NAN), pres(NAN);
uint8_t pressureUnit(3); // unit: B000 = Pa, B001 = hPa, B010 = Hg, B011 = atm, B100 = bar, B101 = torr, B110 = N/m^2, B111 = psi
bme.ReadData(pres, temp280, hum, metric, pressureUnit); // Parameters: (float& pressure, float& temp, float& humidity, bool celsius = false, uint8_t pressureUnit = 0x0)
/* Alternatives to ReadData():
float ReadTemperature(bool celsius = false);
float ReadPressure(uint8_t unit = 0);
float ReadHumidity();

Keep in mind the temperature is used for humidity and
pressure calculations. So it is more effcient to read
temperature, humidity and pressure all together.
*/
client->print("Temp280: ");
client->print(temp280);
client->print("°"+ String(metric ? 'C' :'F'));
client->print("\t\tHumidity: ");
client->print(hum);
client->print("% RH");
client->print("\t\tPressure: ");
client->print(pres);
client->print(" atm");
}
void printBME280CalculatedData(Stream* client){
float altitude = bme.CalculateAltitude(metric);
float dewPoint = bme.CalculateDewPoint(metric);
client->print("\t\tAltitude: ");
client->print(altitude);
client->print((metric ? "m" : "ft"));
client->print("\t\tDew point: ");
client->print(dewPoint);
client->println("°"+ String(metric ? 'C' :'F'));
}
#endif // BME280_FEATURE
Извините. Я в программировании очень далек....
Что я сделал не так? Подскажите!
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Ср май 11, 2016 10:15 am

Анатолий писал(а):А кто реализовал подключение датчика BME280 в скетче АМS??? При подключении одного скетча процессор грузится у меня на 100%, а при подключении другого вообще виснет...

Вот код второго скетча

Извините. Я в программировании очень далек....
Что я сделал не так? Подскажите!
Честно говоря - не совсем понимаю что вы пытаетесь сделать. Если вы пишите отдельный скетч - то тут явно не хватает кода. Если пытаетесь подключить к АМС - конструкции типа

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

  client->print("\t\tAltitude: ");
  client->print(altitude);
  client->print((metric ? "m" : "ft"));
  client->print("\t\tDew point: ");
  client->print(dewPoint);
  client->println("°"+ String(metric ? 'C' :'F')); 
Тут явно лишние. АМС просто не может понять что вы от него хотите. Он грузит странички с sd-карты, а тут в него пытаются прямо в клиент впихнуть еще какие-то данные. Делайте по примеру скетча с DS (модуль rtemp). Создайте массив с названием датчиков, массив с данными датчиков. Соответствующие <div> на страничке sd-карты, и отправляйте туда данные через sever-ajax. И кстати - зачем вам delay-и я не понял. В Init'е цикл while (как мне кажется) тоже не нужен, как и delay...хотя я не работал с i2c. Init запускается разово, думаю ничего страшного не произойдет, если он не будет ждать секунду...весь сервер стартует порядка 4 секунд, этого будет достаточно чтобы обнаружить датчик, если он подключен...если его нет - то уже обработку в теле программы проводите, а не в ините...возможно из-за этого и виснет ваш скетч, то что он не может обнаружить датчик, и соотв. не может пройти стадию инита. А BME280Works() вызывайте по таймеру, по примеру того же rtemp, к примеру раз в 4 секунды, если вам нужно столь частое обновление, а delay тоже убирайте.

Если что-то опять не получится - приводите лог монитора порта помимо кода скетча, чтобы понять - на каком этапе стопорится АМС.

PS: Прикольный датчик, возможно закажу себе такой же на улицу)). Изначально хотел весить DHT22. А тут еще и давление - прям метеостанция)
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Анатолий
Сообщения: 4
Зарегистрирован: Вс апр 17, 2016 10:50 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Анатолий » Ср май 11, 2016 4:02 pm

nick7zmail писал(а):
Анатолий писал(а):А кто реализовал подключение датчика BME280 в скетче АМS??? При подключении одного скетча процессор грузится у меня на 100%, а при подключении другого вообще виснет...

Вот код второго скетча

Извините. Я в программировании очень далек....
Что я сделал не так? Подскажите!
Честно говоря - не совсем понимаю что вы пытаетесь сделать. Если вы пишите отдельный скетч - то тут явно не хватает кода. Если пытаетесь подключить к АМС - конструкции типа

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

  client->print("\t\tAltitude: ");
  client->print(altitude);
  client->print((metric ? "m" : "ft"));
  client->print("\t\tDew point: ");
  client->print(dewPoint);
  client->println("°"+ String(metric ? 'C' :'F'));
Тут явно лишние. АМС просто не может понять что вы от него хотите. Он грузит странички с sd-карты, а тут в него пытаются прямо в клиент впихнуть еще какие-то данные. Делайте по примеру скетча с DS (модуль rtemp). Создайте массив с названием датчиков, массив с данными датчиков. Соответствующие <div> на страничке sd-карты, и отправляйте туда данные через sever-ajax. И кстати - зачем вам delay-и я не понял. В Init'е цикл while (как мне кажется) тоже не нужен, как и delay...хотя я не работал с i2c. Init запускается разово, думаю ничего страшного не произойдет, если он не будет ждать секунду...весь сервер стартует порядка 4 секунд, этого будет достаточно чтобы обнаружить датчик, если он подключен...если его нет - то уже обработку в теле программы проводите, а не в ините...возможно из-за этого и виснет ваш скетч, то что он не может обнаружить датчик, и соотв. не может пройти стадию инита. А BME280Works() вызывайте по таймеру, по примеру того же rtemp, к примеру раз в 4 секунды, если вам нужно столь частое обновление, а delay тоже убирайте.

Если что-то опять не получится - приводите лог монитора порта помимо кода скетча, чтобы понять - на каком этапе стопорится АМС.

PS: Прикольный датчик, возможно закажу себе такой же на улицу)). Изначально хотел весить DHT22. А тут еще и давление - прям метеостанция)
Спасибо за ответ! Попробую сделать на примере модуля rtemp.
А датчик BME280 действительно интересный, его размеры еще меньше чем у DHT22.
Olymp
Сообщения: 22
Зарегистрирован: Пт фев 19, 2016 10:17 am
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Arduino Mega Server

Сообщение Olymp » Чт май 12, 2016 5:05 am

nick7zmail писал(а):PS: Прикольный датчик, возможно закажу себе такой же на улицу)). Изначально хотел весить DHT22. А тут еще и давление - прям метеостанция)
Я не рискнул его на улицу, в его мелком корпусе махонькое отверстие, как и в bmp180, думаю на улице через это отверстие в датчик попадет влага, что врятли положительно скажется на его показаниях, возможно я не прав. Есть еще SI7021, у него это отверстие чем то заклеено, возможно его можно на улицу, но он в отличии от bme280 измеряет только температуру и влажность, диапазон температур -40-85, но рекомендованная 10-60, думаю для зимы не покатит, опять же от вашего региона зависит. Давление, опять же мое мнение, нужно измерять в помещении а не на улице, т.к. при изменении температуры изменятся показания давления, bme280 не плохо компенсирует показания, в отличии от bmp180, наблюдения при открывании окна для проветривания.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Mega Server

Сообщение nick7zmail » Чт май 12, 2016 10:09 am

Olymp писал(а):
nick7zmail писал(а):PS: Прикольный датчик, возможно закажу себе такой же на улицу)). Изначально хотел весить DHT22. А тут еще и давление - прям метеостанция)
Я не рискнул его на улицу, в его мелком корпусе махонькое отверстие, как и в bmp180, думаю на улице через это отверстие в датчик попадет влага, что врятли положительно скажется на его показаниях, возможно я не прав. Есть еще SI7021, у него это отверстие чем то заклеено, возможно его можно на улицу, но он в отличии от bme280 измеряет только температуру и влажность, диапазон температур -40-85, но рекомендованная 10-60, думаю для зимы не покатит, опять же от вашего региона зависит. Давление, опять же мое мнение, нужно измерять в помещении а не на улице, т.к. при изменении температуры изменятся показания давления, bme280 не плохо компенсирует показания, в отличии от bmp180, наблюдения при открывании окна для проветривания.
Его махонький корпус, как правило, на плате (по крайней мере я хотел с платой заказать. Отверстие - для замера давления/влажности. Если будет все герметично - как до воздуха добраться?)) Если его весить на улицу - понятное дело нужно городить корпус водонепроницаемый. Берем маленькую распредкоробку IP57-68, крепим плату с датчиком вверху, снизу сверлим отверстия. Можно немного отверстий по-бокам, дабы воздух не застаивался, и датчик не врал с температурой (ну либо весим в постоянную тень). Какой-то такой план был =D. А ваш вариант - по-моему аналог DHT22. Только температура и влажность.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Olymp
Сообщения: 22
Зарегистрирован: Пт фев 19, 2016 10:17 am
Благодарил (а): 1 раз
Поблагодарили: 2 раза

Re: Arduino Mega Server

Сообщение Olymp » Пт май 13, 2016 6:36 am

nick7zmail писал(а):А ваш вариант - по-моему аналог DHT22. Только температура и влажность.
Ни в коем случае не настаивал ни на каком варианте, сам в поиске более оптимального решения. Про SI7021 рассказал для информации, может кому окажется интересно. У самого имеются
SI7021, bmp180, bme280, dht22, на сегодня (не окончательно) все же склоняюсь к следующему варианту, dht22 на улицу, давление измерять в помещении, т.к. не знаю, как bme280 поведет себя на улице в морозы, думаю в какую коробку его не помести, конденсат все равно эту махонькую дырдочку найдет, плюс в помещении температура более стабильна, а значит показания давления тоже будут более стабильны. Скорее всего, по мимо измерения температуры, влажности и давления на улице вы захотите знать температуру и влажность в помещении, от сюда следует, что проверенный сообществом dht22 на улицу, bmp280 в помещение. Но это всего лишь мое личное, теоретическое мнение, хотелось бы конечно узнать мнение практиков.
Ответить