Arduino Mega Server

Модератор: Alex

Ultimo
Сообщения: 75
Зарегистрирован: Сб дек 24, 2016 4:09 am
Благодарил (а): 15 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение Ultimo » Сб янв 21, 2017 12:24 pm

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

Re: Arduino Mega Server

Сообщение nick7zmail » Сб янв 21, 2017 12:43 pm

Ultimo писал(а):Ребят а кто нибудь может написать скетч под мои задачи для arduino mega?
Задачи то озвучьте...и цену вопроса...тогда скажем - сможем/нет...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Ср янв 25, 2017 6:21 am

В общем есть мысли по доработке AMS в плане работы с портами:
Я имею делаю дело с промышленными контроллерами и постараюсь изложить технологию работы с портами ввода/вывода промышленных контроллеров

Пример настроек дискретного входа:
СпойлерПоказать
- Физические данные с каждого порта считываются пи складываются в переменную. DI_OUT
- Для каждого порта задается режим работы DI_MODE (0 - измерение, 1 - имитация)
- Переменная DI_IMIT лежит значение имитации
- Так же можно прикрутить и переменную в которой будет хранится время опроса канала (дребиск)
- Инверсия. Позволяет изменить входной сигнал 1 на 0. И наобарот.
- Также это позволит сохраняя данные а EEprom или на SD при перезагрузке контроллера загрузить данные во временную переменную DI_OUT
Алгоритм на словах выгледит следующим образом:
СпойлерПоказать
Считываем данные, проверяем режим и если режим измерения перекладываем данные в DI_OUT. Если режим имитации то считываемое значение отображаем, но для алгоритмов берем значение из переменной DI_IMIT. И проверяем и инверсию
Если Alex не против накидаю код. Только понадобиться помощь, чтобы не тратить время при интеграции в проект
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср янв 25, 2017 7:31 am

Если Alex не против накидаю код. Только понадобиться помощь, чтобы не тратить время при интеграции в проект
Почему Alex должен быть против? Разве я хоть раз кому-то запрещал что-то выдумывать и делиться кодом? Наоборот это всегда только приветствуется.

Другое дело, что я из вашего сообщения ни слова не понял и в дистрибутив это включать навряд ли буду. Но если вы выложите это решение на форуме, то возможно оно кому-то понадобится.

А вообще я жду (начиная с первой страницы) когда наступит тот момент, когда народ соберётся, запустит народный проект на Гитхаб, выберет координатора и сможет сам формировать дистрибутив так, как считает нужным.
vladragor
Сообщения: 27
Зарегистрирован: Пт янв 06, 2017 12:48 am
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Arduino Mega Server

Сообщение vladragor » Пт янв 27, 2017 2:59 pm

Вопрос по авторизации в АМС кто разобрался.
АМС в связке с МД
если заходишь на АМС в браузере все норм запросило пароль и все дальше работаем.....
Хм а как с МД??? не будешь же каждый раз авторизоваться отдельно
http://адрес амс сервера/?rele4=1 к примеру стандартная команда включения реле....
по идее тут же нужно прикрутить имя и пароль что бы команда прошла...но где....
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пт янв 27, 2017 4:38 pm

Вопрос по авторизации в АМС кто разобрался.
АМС в связке с МД
если заходишь на АМС в браузере все норм запросило пароль и все дальше работаем.....
Хм а как с МД??? не будешь же каждый раз авторизоваться отдельно
http://адрес амс сервера/?rele4=1 к примеру стандартная команда включения реле....
по идее тут же нужно прикрутить имя и пароль что бы команда прошла...но где....
В связи с неактуальностью MajorDoMo :) ничего не могу сказать по этому поводу. Но теоретически на стороне MajorDoMo нужно формировать запросы, содержащие строку авторизации. Я с этим не экспериментировал — может быть кто-то другой подскажет.
vladragor
Сообщения: 27
Зарегистрирован: Пт янв 06, 2017 12:48 am
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Re: Arduino Mega Server

Сообщение vladragor » Пт янв 27, 2017 11:56 pm

В связи с неактуальностью MajorDoMo :) ничего не могу сказать по этому поводу. Но теоретически на стороне MajorDoMo нужно формировать запросы, содержащие строку авторизации. Я с этим не экспериментировал — может быть кто-то другой подскажет.
Но тут дело даже не в МД...По идее оставлять открытым АМС нежелательно и даже дусю если прикручивать в качестве голосового управления то нужны запросы содержащие строку авторизации....
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вс янв 29, 2017 2:44 pm

Нашел небольшую незначительную ошибку.
При включении модуля дискретных входов

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

#define CONTACTS_FEATURE         
не работал вход D31.
Перекопал весь проект!!! Но нашел.
Вкладка 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         
За это сообщение автора ser009 поблагодарил:
serghei (Чт мар 23, 2017 9:52 am)
Рейтинг: 1.16%
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 » Вс фев 05, 2017 3:03 pm

Доброго времени суток.
(Ох чувствую закидают меня камнями...)
Небольшая предыстория
Решили мы всей группой делать курсовые и дипломные проекты на arduino. До этого дел никаких не имели мы с программированием во всех смыслах этого термина.
Но что уж тут поделать? <<Если решили, то будем делать.">> - подумал я и закупил себе мегу, шилд 5100 и пару датчиков. Но вот пришла пора решать что именно мы будем делать. И пока мой комплект ехал ко мне из столицы, все простые проекты разобрали. <<Но да ладно, оно так даже интереснее!>> - решил я и стал думать, что можно собрать из горочки всех, доселе невиданных, мне вещей. Начал писать обычную web-страницу, ну... Не писать конечно же, а собирать по крупицам из интернета, попутно уча C/C++. Но в один прекрасный момент преподаватель сказал: <<Посмотри Arduino Mega Server. Там ты что-то интереснее обычной страницы с показаниями датчиков сделаешь.>> Ну я и посмотрел... На энтузиазме скачал. Попытался запустить. Но ams упирался до последнего. :D (Видимо даже он понял, что мне лучше сюда не лезть) Спустя неделю я всё же победил IDE и запустил сервер. И тут-то началось самое интересное :D
<<Куда мне писать код для своих датчиков? Как это всё вывести на сервер? Как вообще поменять внешний вид сайта?>> Ох и завлекла же меня вся эта тема...
Нужно сказать спасибо автору. Потому что я уже хоть что-то понимаю в 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
На главной вкладке AMS опять же прописал (я не знаю как это правильно называть... Наверное, объявил, да?)
СпойлерПоказать
//#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
Т.е. я по сути просто заменил rtemp своим dtemp и на dash-панели, как я думал, должна была появится температура с моего датчика. Но IDE опять хорошенечко так меня пнула.
Помогите пожалуйста понять нулю в программирование, что это за ошибка.
СпойлерПоказать
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

Ошибка компиляции.
IDE 1.6.5 скачана на сайте AMS.
Надеюсь тапками бить не будете.
><
U.P.D.
Проблема решена.
Исправил
void getDTemperature(byte n)
на
void getTemperature(byte n)
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 05, 2017 4:00 pm

попробуйте поместите функцию getDTemperature перед вызовом dtempWorks
Ответить