скетч для управления arduino mega 2560, 16-канальным модуль-реле через ethernet

goliv
Offline
Зарегистрирован: 05.01.2014

Помогите новеску!!! Нужен скетч управления arduino mega 2560, 16-канальным модуль-реле через ethernet

goliv
Offline
Зарегистрирован: 05.01.2014

Сори за грамматику!!! новечку!!!

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Я тут для развлечения писал скетч:

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,100);
#define R1 22
#define R2 23
#define R3 24
#define R4 25

/* This creates an instance of the webserver.  By specifying a prefix
 * of "", all pages will be at the root of the server. */
#define WEBDUINO_SERVER_HEADER "Server: Test/"
#define WEBDUINO_AUTH_REALM "Analog data"
#define PREFIX ""
#include <WebServer.h>
WebServer webserver(PREFIX, 80);
P(relay_form) = 
"<form>"
"<label for=\"r1\">Relay 1</label><select name=\"r1\"><option>on</option><option>off</option></select><br>"
"<label for=\"r2\">Relay 2</label><select name=\"r2\"><option>on</option><option>off</option></select><br>"
"<label for=\"r3\">Relay 3</label><select name=\"r3\"><option>on</option><option>off</option></select><br>"
"<label for=\"r4\">Relay 4</label><select name=\"r4\"><option>on</option><option>off</option></select><br>"
"<input type=\"submit\" value=\"Set\">"
"</form>"
;

//CRC
static PROGMEM prog_uint32_t crc_table[16] = {
    0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
    0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
    0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
    0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};

unsigned long crc_update(unsigned long crc, byte data)
{
    byte tbl_idx;
    tbl_idx = crc ^ (data >> (0 * 4));
    crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
    tbl_idx = crc ^ (data >> (1 * 4));
    crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
    return crc;
}

unsigned long crc32(char *s)
{
  unsigned long crc = ~0L;
  while (*s)
    crc = crc_update(crc, *s++);
  crc = ~crc;
  return crc;
}

void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  server.httpSuccess();
  if (type != WebServer::HEAD)
  {
    P(helloMsg) = "<h1>Hello, World!</h1><a href=\"private.html\">Private page</a>";
    server.printP(helloMsg);
    server.println("<pre>");
    File dataFile = SD.open("log.txt");
    if (dataFile) {
       while (dataFile.available()) {
           server.print((char)dataFile.read());
       }
       dataFile.close();
    }  
    server.println("</pre>");
  }
}

void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  /* if the user has requested this page using the following credentials
   * username = user
   * password = user
   * display a page saying "Hello User"
   *
   * the credentials have to be concatenated with a colon like
   * username:password
   * and encoded using Base64 - this should be done outside of your Arduino
   * to be easy on your resources
   *
   * in other words: "dXNlcjp1c2Vy" is the Base64 representation of "user:user"
   *
   * if you need to change the username/password dynamically please search
   * the web for a Base64 library */
  if (server.checkCredentials("dXNlcjp1c2Vy"))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello User</h1>";
      server.printP(helloMsg);
      // output the value of each analog input pin
      for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            server.print("analog input ");
            server.print(analogChannel);
            server.print(" is ");
            server.print(sensorReading);
            server.println("<br />");
      }
    }
  }
  /* if the user has requested this page using the following credentials
   * username = admin
   * password = admin
   * display a page saying "Hello Admin"
   *
   * in other words: "YWRtaW46YWRtaW4=" is the Base64 representation of "admin:admin" */
  else if (server.checkCredentials("YWRtaW46YWRtaW4="))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello Admin</h1>";
      server.printP(helloMsg);
    }
  }
  else
  {
    /* send a 401 error back causing the web browser to prompt the user for credentials */
    server.httpUnauthorized();
  }
}
void togle(uint8_t pin, char * state){
   switch(crc32(state)){
     case 0x9b629c8:
     case 0x9c320d6a:
     case 0xa75c2da2:
     case 0x83dcefb7:
     case 0xfdfc4c8d:
        digitalWrite(pin, LOW);
        break;
     case 0x2bbc5d43:
     case 0x13f11ba3:
     case 0xbd1b1fc9:
     case 0xf4dbdf21:
     case 0x2bcd6830:
        digitalWrite(pin, HIGH);
        break;
     
   }
}
uint8_t getpin(char * name){
  switch(crc32(name)){
    case 0xd0e09b1:
    case 0x988a2d13:
      return R1;
      break;
    case 0x9407580b:
    case 0x1837ca9:
      return R2;
      break;
    case 0xe300689d:
    case 0x76844c3f:
      return R3;
      break;
    case 0x7d64fd3e:
    case 0xe8e0d99c:
      return R4;
      break;
  }
}
#define NAMELEN 32
#define VALUELEN 32
void relay(WebServer &server, WebServer::ConnectionType type, char * url_tail, bool tail_complete){
  URLPARAM_RESULT rc;
  char name[NAMELEN];
  int  name_len;
  char value[VALUELEN];
  int value_len;
  server.httpSuccess();
  switch(type){
    case WebServer::HEAD:
      return;
      break;
    case WebServer::GET:
      while (strlen(url_tail)){
        rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
        if (rc != URLPARAM_EOS)
            togle(getpin(name),value);
      }
    default:
      server.printP(relay_form);
  }
}


void setup() {
  pinMode(R1,OUTPUT);
  pinMode(R2,OUTPUT);
  pinMode(R3,OUTPUT);
  pinMode(R4,OUTPUT);
  digitalWrite(R1,HIGH);
  digitalWrite(R2,HIGH);
  digitalWrite(R3,HIGH);
  digitalWrite(R4,HIGH);
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print("Initializing SD card...");
  pinMode(4, OUTPUT); 
  if (!SD.begin(4)) {
   Serial.println("failed!");
   lcd.println("SD not found!");
  }else{
   Serial.println("done.");
  }

  Serial.println("Initializing Eternet!");
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // using static ip:
    Ethernet.begin(mac, ip);
  }
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  webserver.setDefaultCommand(&defaultCmd);
  webserver.addCommand("index.html", &defaultCmd);
  webserver.addCommand("private.html", &privateCmd);
  webserver.addCommand("relay/", &relay);
  webserver.begin();

}

void loop() {
  char buff[64];
  int len = 64;

  /* process incoming connections one at a time forever */
  webserver.processConnection(buff, &len);

}

на 4 канальный - до 16 сами допишите. Или за отдельную плату могу дописать.

Работает так http://192.168.0.100/relay/?r1=1&r2=0&r3=1&r4=0

goliv
Offline
Зарегистрирован: 05.01.2014

Интересно!!! А сколько по цене??

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Ну я думаю рублей 500. Сохранение состояния, авторизация, на 16 релюх - установка логического состояния на заданных 16 входах посредством get запроса. Вобщем цена не окончательная. Старт 300 и до 1500 в зависимости от функционала.

Для себя планирую сделать управление по таймерам каждым реле. С сохранением расписания на SD. И управлением по WEB(HTTP).

goliv
Offline
Зарегистрирован: 05.01.2014

Я подготовлю техническое задание, что мне нужно!!! 

Кстати управление по таймерам каждым реле. С сохранением расписания на SD. И управлением по WEB(HTTP), неплохая задумка, еще бы привязать датчик температуры DHT 11.

 

goliv
Offline
Зарегистрирован: 05.01.2014

NeiroN напеши мне свою электронку, или скайп, есть предложение по работе!

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

skype:nxn_neiron?chat

Dardan
Offline
Зарегистрирован: 17.01.2014
NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Dardan пишет:
Делал для себя. Ниже ссылка на видео и исходники.

Классный проект. Немного отличается от видео на ютубе.

Игрался полвечера, при смене ip адреса отказался работать.

В том виде как выложено вами , кнопки не меняют своего состояния, не показывает время.

Можно попросить вас выложить именно тот проект - который на видео, и немного пояснить, что и как работает.

Dardan
Offline
Зарегистрирован: 17.01.2014

Видимо упаковал не ту папку для флешки. В понедельник проверю. Потерпите.

goliv
Offline
Зарегистрирован: 05.01.2014

Уважаемый Dardan, Вы можно попросить вас выложить именно тот проект!

kriss
Offline
Зарегистрирован: 24.01.2014

  NEIRON!  Добрый день! Хочется с Вами переговорить, но связь установить не удается.

Уточните пожлста логин.

goliv
Offline
Зарегистрирован: 05.01.2014

NeiroN, нужна помощь в работе, предлогаю связаться в скайпе!

 

Lordserdjo
Offline
Зарегистрирован: 25.06.2014

Добрый вечер. Вопрос наверное большей частью к NeiroN, но возможно мне еще кто нибудь поможет.

Три помощи строки:

     if (server.checkCredentials("dXNlcjp1c2Vy"))

мы подключаемся к ардуине как user, если код  другой, то как админ или еще много кого можно вписать. А как сделать кнопку выхода из под учетной записи??? Допустим для входа под другой учетной записью?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Вот тут предлогают отправлять клиенту 401 ответ для выхода.

P.S. Програмирование для меня хобби - так что не ждите какой либо помощи за деньги. Делаю только если мне интересно. И не нужно переносить обсуждение в ПМ - пусть все видят ваш уровень знаний.

Belgia_S
Offline
Зарегистрирован: 21.08.2014

Подскажите как запустить данный модуль программы. Не менял IP. Но в браузере пишет связ утяряна. Что я не так делаю. 

alexnik100
Offline
Зарегистрирован: 21.12.2015

Добрый день, Dardan!

С Новым Годом! С Рождеством!  

Счастья, здоровья, удачи!

Вы еще занимаетесь этим проектом?

Имеются вопросы. Могли бы посоветовать? За оплату.

С уважением, alexnik100

 

 

 

Dardan
Offline
Зарегистрирован: 17.01.2014

Проектик подрос и вошёл в более крупный... http://youtu.be/OE8l9Lf4ebI

По коммерческим вопросам обращайтесь сюда - www.gms-net.ru

 

С Новым Годом всех....

alexnik100
Offline
Зарегистрирован: 21.12.2015

Добрый день!

Пожалуйста. подскажите как вы запустили эту картинку с веб-сервера.

У меня не устанавливается адрес и соответственно я не могу выйти браузером на сервер.

МАС адрес также не устанавливается.

Пробовал вручную, но тоже не получается.

С уважением.

 

 

 

alexnik100
Offline
Зарегистрирован: 21.12.2015

Добрый день!

Пожалуйста. подскажите как вы запустили эту картинку с веб-сервера.

У меня не устанавливается адрес и соответственно я не могу выйти браузером на сервер.

МАС адрес также не устанавливается.

Пробовал вручную, но тоже не получается.

С уважением.

 

alexnik100
Offline
Зарегистрирован: 21.12.2015

Здравствуйте, Dardan!

Спасибо за поздравление.

Я пенсионер, ветеран труда, веду радиолюбительский кружок для детишек и инвалидов.

У нас своя локальная сеть. На ней учим занимающихся основам построения сетей Интернет.

У меня нет коммерческих вопросов.

Просто понравилось оформление Ваших кнопок и хотел сделать такие же для

устройства проверки связи и перезагрузки при зависаниях.

Хочется сделать подсвечивающиеся кнопки (изменяющие цвет). Пока не пойму как это сделать.

Могли бы посоветовать? Если напряженка со временем, я готов оплатить  консультацию.

С уважением, alexnik100

Dardan
Offline
Зарегистрирован: 17.01.2014

Если Вы про последний ролик, то интерфейс построен на скриптах. Это хитрый способ, но сложен для понимания его реализации. В двух словах не скажешь.

Если Вы о старом варианте, то за давностью я уже не помню что там и как, а возиться с архивами и разбираться нет времени... Простите уж...

Если есть желание повозиться с сетями, то лучше уж взять ESP8266, а для простоты и наглядности работать под Lua. Пол часа времени в интернете и Вы сможете с легкостью запустить первые скрипты.... Ещё пару дней и изучения и 'пожените' этот модуль с ардуинкой... Получается хороший симбиоз с широкими и перспективными возможностями...

alexnik100
Offline
Зарегистрирован: 21.12.2015

Здравствуйте, Dardan!

WI-FI роутер стоит сейчас недорого 800-1600 руб. со скоростью до 300 мбит/с, несколько входов 100 мбит/с, да и мощность у него повыше до 100 мВт, кроме того для них имеются усилители по 1-2 вт., поэтому  перспектив  с  ESP8266 пока не вижу. С роутерами работаю уже более 10 лет.

Я в свое время изучал еще 8080 и программировал на уровне ассемблера, потом Бейсик, затем СИ, многое правда забылось, но учитывая библиотеки для ARDUINO,  пока проблем нет.  Проблемы были в самом начале.

По языку    Lua почитаю, что нового придумали. 

Я запустил Ваш скетч,

https://www.dropbox.com/s/3ry17kj6coxgtvu/_WEB_server.zip

 

https://www.dropbox.com/s/ms415dp99yod5v5/Original%20version.zip

Кнопки работают, реле срабатывают, но  кнопки не меняют цвет.  

Жалко бросать, уж очень симпатичный веб-дизайн.

Остальное нам пока без надобности.

Проверил файл Index, вроде бы там картинки правильно подставляются. Вручную когда меняешь ссылку на картинки, цвета меняются.

Сомнения вот в этой функции, она должна переключать цвет кнопок, но не переключает.

И переменные ( lineIdx, val ) непонятно откуда берутся.

function UpdateRele( lineIdx, val )
{
  if( val == 1 )   
    document.all("Rele_Pic"+lineIdx ).src = 'R_Green.jpg';      
  else 
    document.all("Rele_Pic"+lineIdx ).src = 'R_Gray.jpg';
}
Может посмотрите, я готов предоставить все комплектующие: arduino mega 2560,  шилд Интернет W5100, реле, SD-карту, card reader, кабели, все скрипты загружены.  Все подключено, Вам только кабель USB в комп воткнуть.
 
Инвалид из нашего коллектива может привести Вам на дом или на работу в коробочке, чтобы провода не выскочили.
 
Все уже работает, кроме цвета.  Жалко бросать, уж очень симпатичный веб-дизайн!!!
 
Очень Вас прошу. Мы оплатим Вам консультацию.
 
Очень надеюсь на Вас.
 
С уважением, alexnik100
Dardan
Offline
Зарегистрирован: 17.01.2014

Вы очень настойчивы не по делу. Не стоит использовать ( далее подтекст...

Вернуться к старому проекту возможности нет. Прошу понять правильно.... Извините помочь не могу............

alexnik100
Offline
Зарегистрирован: 21.12.2015

Здравствуйте, Dardan!

Сегодня днем уже разместил тему в разделе  ""Ищу исполнителя".

Если надумаете помочь за оплату , пишите.

С уважением, alexnik100

 

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

.