Arduino Mega Server
Модератор: Alex
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Arduino Mega Server
Задачи то озвучьте...и цену вопроса...тогда скажем - сможем/нет...Ultimo писал(а):Ребят а кто нибудь может написать скетч под мои задачи для arduino mega?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".

>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Arduino Mega Server
В общем есть мысли по доработке AMS в плане работы с портами:
Я имею делаю дело с промышленными контроллерами и постараюсь изложить технологию работы с портами ввода/вывода промышленных контроллеров
Пример настроек дискретного входа:
Алгоритм на словах выгледит следующим образом:
Если Alex не против накидаю код. Только понадобиться помощь, чтобы не тратить время при интеграции в проект
Я имею делаю дело с промышленными контроллерами и постараюсь изложить технологию работы с портами ввода/вывода промышленных контроллеров
Пример настроек дискретного входа:
СпойлерПоказать
- Физические данные с каждого порта считываются пи складываются в переменную. DI_OUT
- Для каждого порта задается режим работы DI_MODE (0 - измерение, 1 - имитация)
- Переменная DI_IMIT лежит значение имитации
- Так же можно прикрутить и переменную в которой будет хранится время опроса канала (дребиск)
- Инверсия. Позволяет изменить входной сигнал 1 на 0. И наобарот.
- Также это позволит сохраняя данные а EEprom или на SD при перезагрузке контроллера загрузить данные во временную переменную DI_OUT
- Для каждого порта задается режим работы DI_MODE (0 - измерение, 1 - имитация)
- Переменная DI_IMIT лежит значение имитации
- Так же можно прикрутить и переменную в которой будет хранится время опроса канала (дребиск)
- Инверсия. Позволяет изменить входной сигнал 1 на 0. И наобарот.
- Также это позволит сохраняя данные а EEprom или на SD при перезагрузке контроллера загрузить данные во временную переменную DI_OUT
СпойлерПоказать
Считываем данные, проверяем режим и если режим измерения перекладываем данные в DI_OUT. Если режим имитации то считываемое значение отображаем, но для алгоритмов берем значение из переменной DI_IMIT. И проверяем и инверсию
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Почему Alex должен быть против? Разве я хоть раз кому-то запрещал что-то выдумывать и делиться кодом? Наоборот это всегда только приветствуется.Если Alex не против накидаю код. Только понадобиться помощь, чтобы не тратить время при интеграции в проект
Другое дело, что я из вашего сообщения ни слова не понял и в дистрибутив это включать навряд ли буду. Но если вы выложите это решение на форуме, то возможно оно кому-то понадобится.
А вообще я жду (начиная с первой страницы) когда наступит тот момент, когда народ соберётся, запустит народный проект на Гитхаб, выберет координатора и сможет сам формировать дистрибутив так, как считает нужным.
-
- Сообщения: 27
- Зарегистрирован: Пт янв 06, 2017 12:48 am
- Благодарил (а): 4 раза
- Поблагодарили: 2 раза
Re: Arduino Mega Server
Вопрос по авторизации в АМС кто разобрался.
АМС в связке с МД
если заходишь на АМС в браузере все норм запросило пароль и все дальше работаем.....
Хм а как с МД??? не будешь же каждый раз авторизоваться отдельно
http://адрес амс сервера/?rele4=1 к примеру стандартная команда включения реле....
по идее тут же нужно прикрутить имя и пароль что бы команда прошла...но где....
АМС в связке с МД
если заходишь на АМС в браузере все норм запросило пароль и все дальше работаем.....
Хм а как с МД??? не будешь же каждый раз авторизоваться отдельно
http://адрес амс сервера/?rele4=1 к примеру стандартная команда включения реле....
по идее тут же нужно прикрутить имя и пароль что бы команда прошла...но где....
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
В связи с неактуальностью MajorDoMoВопрос по авторизации в АМС кто разобрался.
АМС в связке с МД
если заходишь на АМС в браузере все норм запросило пароль и все дальше работаем.....
Хм а как с МД??? не будешь же каждый раз авторизоваться отдельно
http://адрес амс сервера/?rele4=1 к примеру стандартная команда включения реле....
по идее тут же нужно прикрутить имя и пароль что бы команда прошла...но где....

-
- Сообщения: 27
- Зарегистрирован: Пт янв 06, 2017 12:48 am
- Благодарил (а): 4 раза
- Поблагодарили: 2 раза
Re: Arduino Mega Server
Но тут дело даже не в МД...По идее оставлять открытым АМС нежелательно и даже дусю если прикручивать в качестве голосового управления то нужны запросы содержащие строку авторизации....В связи с неактуальностью MajorDoMoничего не могу сказать по этому поводу. Но теоретически на стороне MajorDoMo нужно формировать запросы, содержащие строку авторизации. Я с этим не экспериментировал — может быть кто-то другой подскажет.
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Arduino Mega Server
Нашел небольшую незначительную ошибку.
При включении модуля дискретных входов не работал вход D31.
Перекопал весь проект!!! Но нашел.
Вкладка contacts
Вот исправленный код.
При включении модуля дискретных входов
Код: Выделить всё
#define CONTACTS_FEATURE
Перекопал весь проект!!! Но нашел.
Вкладка contacts
Вот исправленный код.
СпойлерПоказать
Код: Выделить всё
/*
Modul Contacts
part of Arduino Mega Server project
*/
#ifdef CONTACTS_FEATURE
#define cont1pin 27 // HOM
#define cont2pin 31 // CLO
#define OPEN 1
#define CLOSE 0
char cont1object[] = "contHOM";
char cont2object[] = "contCLO";
char cont1openMess[] = "Open"; char cont1closeMess[] = "Closed";
char cont2openMess[] = "Open"; char cont2closeMess[] = "Closed";
// states
// 0 - open
// 1 - close
// 2 - not defined
// 3 - not defined and not contXstatus
byte cont1state = 2; byte old_cont1state = 3; byte cont1objectState = 2;
byte cont2state = 2; byte old_cont2state = 3; byte cont2objectState = 2;
void contactsInit() {
pinMode(cont1pin, INPUT);
pinMode(cont2pin, INPUT);
modulContacts = MODUL_ENABLE;
started("Contacts", true);
}
void printAndSend(char obj[], char mess[]) {
#ifdef EVENTS_CONTACTS
timeStamp();
Serial.print(obj);
Serial.print(": ");
Serial.println(mess);
#endif
}
void contactsWorks() {
// cont1 (HOM)
cont1state = digitalRead(cont1pin);
if (cont1state != old_cont1state) {
old_cont1state = cont1state;
if (cont1state == 0) {
cont1objectState = OPEN;
printAndSend(cont1object, cont1openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, OPEN);
#endif
} else {
cont1objectState = CLOSE;
printAndSend(cont1object, cont1closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, CLOSE);
#endif
}
}
if (cycle1m) {
old_cont1state = cont1state;
if (cont1state == 0) {
printAndSend(cont1object, cont1openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, OPEN);
#endif
} else {
printAndSend(cont1object, cont1closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont1object, CLOSE);
#endif
}
}
// cont2 (CLO)
cont2state = digitalRead(cont2pin);
if (cont2state != old_cont2state) {
old_cont2state = cont2state;
if (cont2state == 0) {
cont2objectState = OPEN;
printAndSend(cont2object, cont2openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, OPEN);
#endif
} else {
cont2objectState = CLOSE;
printAndSend(cont2object, cont2closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, CLOSE);
#endif
}
}
if (cycle1m) {
old_cont2state = cont2state;
if (cont1state == 0) {
printAndSend(cont2object, cont2openMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, OPEN);
#endif
} else {
printAndSend(cont2object, cont2closeMess);
#ifdef MAJORDOMO_FEATURE
sendRequestM(cont2object, CLOSE);
#endif
}
}
}
#endif // CONTACTS_FEATURE
- Рейтинг: 1.16%
-
- Сообщения: 18
- Зарегистрирован: Вс фев 05, 2017 2:19 pm
- Благодарил (а): 2 раза
- Поблагодарили: 2 раза
- Контактная информация:
Re: Arduino Mega Server
Доброго времени суток.
(Ох чувствую закидают меня камнями...)
Небольшая предыстория
Решили мы всей группой делать курсовые и дипломные проекты на arduino. До этого дел никаких не имели мы с программированием во всех смыслах этого термина.
Но что уж тут поделать? <<Если решили, то будем делать.">> - подумал я и закупил себе мегу, шилд 5100 и пару датчиков. Но вот пришла пора решать что именно мы будем делать. И пока мой комплект ехал ко мне из столицы, все простые проекты разобрали. <<Но да ладно, оно так даже интереснее!>> - решил я и стал думать, что можно собрать из горочки всех, доселе невиданных, мне вещей. Начал писать обычную web-страницу, ну... Не писать конечно же, а собирать по крупицам из интернета, попутно уча C/C++. Но в один прекрасный момент преподаватель сказал: <<Посмотри Arduino Mega Server. Там ты что-то интереснее обычной страницы с показаниями датчиков сделаешь.>> Ну я и посмотрел... На энтузиазме скачал. Попытался запустить. Но ams упирался до последнего.
(Видимо даже он понял, что мне лучше сюда не лезть) Спустя неделю я всё же победил IDE и запустил сервер. И тут-то началось самое интересное 
<<Куда мне писать код для своих датчиков? Как это всё вывести на сервер? Как вообще поменять внешний вид сайта?>> Ох и завлекла же меня вся эта тема...
Нужно сказать спасибо автору. Потому что я уже хоть что-то понимаю в C/C++, HTML,CSS. СПАСИБО АВТОР^^
Но не всё так "лампово"...
Проблемы.
Решил вывести показания температуры на Dash-панель.
На руках имеется AM2320-trema. Вот даже картиночка данного датчика^^
Рассмотрев модуль rtemp примерно понял что и как писать. Ну и набросал модуль по образу и подобию готового.
На главной вкладке AMS опять же прописал (я не знаю как это правильно называть... Наверное, объявил, да?)
Т.е. я по сути просто заменил rtemp своим dtemp и на dash-панели, как я думал, должна была появится температура с моего датчика. Но IDE опять хорошенечко так меня пнула.
Помогите пожалуйста понять нулю в программирование, что это за ошибка.
IDE 1.6.5 скачана на сайте AMS.
Надеюсь тапками бить не будете.
><
U.P.D.
Проблема решена.
Исправил
void getDTemperature(byte n)
на
void getTemperature(byte n)
(Ох чувствую закидают меня камнями...)
Небольшая предыстория
Решили мы всей группой делать курсовые и дипломные проекты на arduino. До этого дел никаких не имели мы с программированием во всех смыслах этого термина.
Но что уж тут поделать? <<Если решили, то будем делать.">> - подумал я и закупил себе мегу, шилд 5100 и пару датчиков. Но вот пришла пора решать что именно мы будем делать. И пока мой комплект ехал ко мне из столицы, все простые проекты разобрали. <<Но да ладно, оно так даже интереснее!>> - решил я и стал думать, что можно собрать из горочки всех, доселе невиданных, мне вещей. Начал писать обычную web-страницу, ну... Не писать конечно же, а собирать по крупицам из интернета, попутно уча C/C++. Но в один прекрасный момент преподаватель сказал: <<Посмотри Arduino Mega Server. Там ты что-то интереснее обычной страницы с показаниями датчиков сделаешь.>> Ну я и посмотрел... На энтузиазме скачал. Попытался запустить. Но ams упирался до последнего.


<<Куда мне писать код для своих датчиков? Как это всё вывести на сервер? Как вообще поменять внешний вид сайта?>> Ох и завлекла же меня вся эта тема...
Нужно сказать спасибо автору. Потому что я уже хоть что-то понимаю в C/C++, HTML,CSS. СПАСИБО АВТОР^^
Но не всё так "лампово"...
Проблемы.
Решил вывести показания температуры на Dash-панель.
На руках имеется AM2320-trema. Вот даже картиночка данного датчика^^

Рассмотрев модуль rtemp примерно понял что и как писать. Ну и набросал модуль по образу и подобию готового.
СпойлерПоказать
#ifdef DTEMP_FEATURE
#include <Wire.h>//I2C
#include <iarduino_AM2320.h> //датчик температуры и влажности
iarduino_AM2320 sensor;
byte const MAX_TEMP_SENSORS = 1;
char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR",};
float current_temp[MAX_TEMP_SENSORS];
float temp_[MAX_TEMP_SENSORS];
void dtempInit(){
sensor.begin();
Serial.print("Module AM2320 \n" );
}
void dtempWorks() {
sensor.read();
temp_[0]=sensor.tem;
temp_[1]=sensor.hum;
Serial.println(temp_[0]);
getTemperature(0);
}
void getDTemperature(byte n) {
current_temp[n] = temp_[n];
if (!isnan(current_temp[n])) {
Serial.print(objSens[n]);
Serial.print(": ");
Serial.println(current_temp[n]);
}
}
#endif
#include <Wire.h>//I2C
#include <iarduino_AM2320.h> //датчик температуры и влажности
iarduino_AM2320 sensor;
byte const MAX_TEMP_SENSORS = 1;
char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR",};
float current_temp[MAX_TEMP_SENSORS];
float temp_[MAX_TEMP_SENSORS];
void dtempInit(){
sensor.begin();
Serial.print("Module AM2320 \n" );
}
void dtempWorks() {
sensor.read();
temp_[0]=sensor.tem;
temp_[1]=sensor.hum;
Serial.println(temp_[0]);
getTemperature(0);
}
void getDTemperature(byte n) {
current_temp[n] = temp_[n];
if (!isnan(current_temp[n])) {
Serial.print(objSens[n]);
Serial.print(": ");
Serial.println(current_temp[n]);
}
}
#endif
СпойлерПоказать
//#define TEMP_FEATURE
#define DTEMP_FEATURE
.
.
.
#ifdef TEMP_FEATURE
tempInit();
#endif
#ifdef DTEMP_FEATURE
dtempInit();
#endif
.
.
.
#ifdef TEMP_FEATURE
if (cycle5m) {
tempWorks();
}
#endif
#ifdef DTEMP_FEATURE
if (cycle5m) {
dtempWorks();
}
#endif
#define DTEMP_FEATURE
.
.
.
#ifdef TEMP_FEATURE
tempInit();
#endif
#ifdef DTEMP_FEATURE
dtempInit();
#endif
.
.
.
#ifdef TEMP_FEATURE
if (cycle5m) {
tempWorks();
}
#endif
#ifdef DTEMP_FEATURE
if (cycle5m) {
dtempWorks();
}
#endif
Помогите пожалуйста понять нулю в программирование, что это за ошибка.
СпойлерПоказать
Arduino: 1.6.5 (Windows 8.1), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
arduino_mega_server.cpp.o: In function `dtempWorks()':
E:\Arduino/rtemp.ino:26: undefined reference to `getTemperature(unsigned char)'
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
arduino_mega_server.cpp.o: In function `dtempWorks()':
E:\Arduino/rtemp.ino:26: undefined reference to `getTemperature(unsigned char)'
collect2.exe: error: ld returned 1 exit status
Ошибка компиляции.
Надеюсь тапками бить не будете.
><
U.P.D.
Проблема решена.
Исправил
void getDTemperature(byte n)
на
void getTemperature(byte n)
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5
Уровень знаний: Пещерный человек
Windows 10
IDE 1.6.5
Уровень знаний: Пещерный человек
-
- Сообщения: 792
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза