Web + реле

Тема в разделе "Arduino & Shields", создана пользователем jks123, 18 мар 2014.

  1. Alex19

    Alex19 Гуру

    Попробуйте скетч, в примере, файл WebRemote.pde. Нужно узнать, работает он или нет.
     
  2. jks123

    jks123 Нерд

    извини за глупость, как комманду через него слать
     
  3. Alex19

    Alex19 Гуру

  4. jks123

    jks123 Нерд

    волшебство. работает! через штатный скечт вебремот
     
  5. Alex19

    Alex19 Гуру

    Тогда попробуйте, вот такой

    Код (Text):

    // A simple web server that always just says "Hello World"

    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int outputPin = 6;

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};  // this just needs to be unique for your network,
                                                                    // so unless you have more than one of these boards
                                                                    // connected, you should be fine with this value.
                                                           
    static uint8_t ip[4] = {192, 168, 1, 15};                      // the IP address for your board. Check your home hub
                                                                    // to find an IP address not in use and pick that
                                                                    // this or 10.0.0.15 are likely formats for an address
                                                                    // that will work.

    static uint16_t port = 80;                                      // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(outputPin, OUTPUT);
    }

    void loop()
    {
      char* params;
      if (params = e.serviceRequest())
      {
        e.print("<H1>Web Remote</H1>");
        if (strcmp(params, "?cmd=on&pin=1") == 0)
        {
          digitalWrite(outputPin, HIGH);
          e.print("<A HREF='?cmd=off&pin=1'>Turn off</A>");
        }
        else if (strcmp(params, "?cmd=off&pin=1") == 0) // Modified -- 2011 12 15 # Ben Schueler
        {
          digitalWrite(outputPin, LOW);
          e.print("<A HREF='?cmd=on&pin=1'>Turn on</A>");
        }
        e.respond();
      }
    }
    http://192.168.0.150/?cmd=on&pin=1
    http://192.168.0.150/?cmd=off&pin=1

    1. Вкл
    2. Выкл
     
  6. jks123

    jks123 Нерд

    работает. Респект. А пример можешь показать с кнопкой в браузере с новым кодом? я расчитаюсь
     
  7. Alex19

    Alex19 Гуру

    Через мин 30-60, тут надо свои линейки забороть
     
  8. Alex19

    Alex19 Гуру

    Это не надо. Хотите отблагодарить - читайте книги по ардуине, растите в этом вопросе. И потом по возможности помогайте другим.

    Самому еще учится и учиться:), только вершки знаю.

    Код (Text):

    // A simple web server that always just says "Hello World"

    // A simple web server that always just says "Hello World"

    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int outputPin = 6;

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};  // this just needs to be unique for your network,
                                                                    // so unless you have more than one of these boards
                                                                    // connected, you should be fine with this value.
                                                         
    static uint8_t ip[4] = {192, 168, 1, 15};                      // the IP address for your board. Check your home hub
                                                                    // to find an IP address not in use and pick that
                                                                    // this or 10.0.0.15 are likely formats for an address
                                                                    // that will work.

    static uint16_t port = 80;                                      // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(outputPin, OUTPUT);
    }

    void loop()
    {
      e.print("<H1>Управление</H1>");
     
      char* params;
      if (params = e.serviceRequest())
      {    
        if (strcmp(params, "?cmd=on") == 0)
        {
          // Ссылка http://192.168.0.150/?cmd=on
          if (!digitalRead(outputPin))
          {
            digitalWrite(outputPin, HIGH);
          }
          // Подставляем кнопку вык.
          e.print("<a href='/?cmd=off'><input type='button' value='Led вык.' /></a><br/>");
        }
        else if (strcmp(params, "?cmd=off") == 0) // Modified -- 2011 12 15 # Ben Schueler
        {
          // Ссылка http://192.168.0.150/?cmd=off
          if (digitalRead(outputPin))
          {
            digitalWrite(outputPin, LOW);
          }
          // Подставляем кнопку вк.
          e.print("<a href='/?cmd=on'><input type='button' value='Led вк.' /></a><br/>");
        }
        e.respond();
      }
      else
      {
        // Просто http://192.168.0.150/
        if (digitalRead(outputPin))
        {
          // Если вкл. подставляем кнопку вык.
          e.print("<a href='/?cmd=off'><input type='button' value='Led вык.' /></a><br/>");
        }
        else
        {
          // Если вык. подставляем кнопку вк.
          e.print("<a href='/?cmd=on'><input type='button' value='Led вк.' /></a><br/>");
        }
      }
    }
     
    Вроде, так.

    UPD. Идея такая, просто вставить кнопку в ссылку.
    <a href='/?cmd=off'><input type='button' value='Led вык.' /></a>
    ?cmd=off, то что мы проверяем else if (strcmp(params, "?cmd=off") == 0)

    Увы свои дела надо поделать, буду вечером
     
  9. Alex19

    Alex19 Гуру

    Удалось разобраться?
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    Когда-то сайты немножко варганил, вот вспомнилось: можно сделать на странице 2 формы и в каждой из них скрытое поле ввода с нужным значением. Формы должны посылать данные методом GET. Мне кажется, это должно сработать.
     
  11. jks123

    jks123 Нерд

    моск кипит а косяк найти не могу с двумя выходами
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int anotherOutputPin = 7;
    int outputPin = 6;

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,
    // so unless you have more than one of these boards
    // connected, you should be fine with this value.

    static uint8_t ip[4] = {192, 168, 0, 150}; // the IP address for your board. Check your home hub
    // to find an IP address not in use and pick that
    // this or 10.0.0.15 are likely formats for an address
    // that will work.

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
    e.setup(mac, ip, port);
    pinMode(anotherOutputPin, OUTPUT);
    e.setup(mac, ip, port);
    pinMode(outputPin, OUTPUT);
    }

    void loop()
    {
    e.print("<H1>Управление</H1>");

    char* params;
    if (params = e.serviceRequest())
    {
    if (strcmp(params, "?cmd1=on") == 0)
    {
    // Ссылка http://192.168.0.150/?cmd1=on
    if (!digitalRead(anotherOutputPin))
    // Ссылка http://192.168.0.150/?cmd=on
    if (!digitalRead(outputPin))
    {
    digitalWrite(anotherOutputPin, HIGH);
    digitalWrite(outputPin, HIGH);
    }
    // Подставляем кнопку вык.
    e.print("<a href='/?cmd1=off'><input type='button' value='Led вык.' /></a><br/>");
    // Подставляем кнопку вык.
    e.print("<a href='/?cmd=off'><input type='button' value='Led1 вык.' /></a><br/>");
    }
    else if (strcmp(params, "?cmd1=off") == 0); // Modified -- 2011 12 15 # Ben Schueler
    else if (strcmp(params, "?cmd=off") == 0); // Modified -- 2011 12 15 # Ben Schueler
    {
    // Ссылка http://192.168.0.150/?cmd1=off
    if (digitalRead(anotherOutputPin))
    // Ссылка http://192.168.0.150/?cmd=off
    if (digitalRead(outputPin))
    {
    digitalWrite(anotherOutputPin, LOW);
    digitalWrite(outputPin, LOW);
    }
    // Подставляем кнопку вк.
    e.print("<a href='/?cmd1=on'><input type='button' value='Led вк.' /></a><br/>");
    // Подставляем кнопку вк.
    e.print("<a href='/?cmd=on'><input type='button' value='Led1 вк.' /></a><br/>");
    }
    e.respond();
    }
    else
    {
    // Просто http://192.168.0.150/
    if (digitalRead(anotherOutputPin))
    // Просто http://192.168.0.150/
    if (digitalRead(outputPin))
    {
    // Если вкл. подставляем кнопку вык.
    e.print("<a href='/?cmd1=off'><input type='button' value='Led вык.' /></a><br/>");
    // Если вкл. подставляем кнопку вык.
    e.print("<a href='/?cmd=off'><input type='button' value='Led1 вык.' /></a><br/>");
    }
    else
    {
    // Если вык. подставляем кнопку вк.
    e.print("<a href='/?cmd1=on'><input type='button' value='Led вк.' /></a><br/>");
    // Если вык. подставляем кнопку вк.
    e.print("<a href='/?cmd=on'><input type='button' value='Led1 вк.' /></a><br/>");
    }
    }
    }
     
  12. jks123

    jks123 Нерд

    я паятель, вот и туплю в этих делах
     
  13. Megakoteyka

    Megakoteyka Оракул Модератор

    Программисты тупят в схемотехнике, схемотехники тупят в программах :)
    Таких, кто одинаково хорошо шарит в обеих темах, по пальцам можно перечесть...
    Се ля ви :)
     
  14. Alex19

    Alex19 Гуру

    Учится и только учится. Я за последние 2-3 недели. Узнал, в разы больше чем раньше.
    Раньше думал, что толстый кабель это электричество, а тонкий электроника:).

    Сейчас код подкорректирую, раньше не было времени. Воевал со штангелем, увы пока не подключил.
     
  15. Megakoteyka

    Megakoteyka Оракул Модератор

    Ну на самом деле примерно так и есть :D
     
    acos нравится это.
  16. Alex19

    Alex19 Гуру

    Хорошо, что в программировании, немного больше.

    Вот код.
    Код (Text):

    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int anotherOutputPin = 7;
    int outputPin = 6;

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,
    // so unless you have more than one of these boards
    // connected, you should be fine with this value.

    static uint8_t ip[4] = {192, 168, 0, 150}; // the IP address for your board. Check your home hub
    // to find an IP address not in use and pick that
    // this or 10.0.0.15 are likely formats for an address
    // that will work.

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
      e.setup(mac, ip, port);
      pinMode(anotherOutputPin, OUTPUT);
      pinMode(outputPin, OUTPUT);
    }

    void loop()
    {
      e.print("<H1>Управление</H1>");

      char* params;
      if (params = e.serviceRequest())
      {
        if (strcmp(params, "?cmd1=on") == 0)
        {
          if (!digitalRead(outputPin))
          {
            digitalWrite(outputPin, HIGH);
          }
        }
        else if (strcmp(params, "?cmd2=on") == 0)
        {
          if (!digitalRead(anotherOutputPin))
          {
            digitalWrite(anotherOutputPin, HIGH);
          }
        }
        else if (strcmp(params, "?cmd1=off") == 0)// Modified -- 2011 12 15 # Ben Schueler
        {    
          if (digitalRead(outputPin))
          {
            digitalWrite(outputPin, LOW);
          }
        }
        else if (strcmp(params, "?cmd2=off") == 0) // Modified -- 2011 12 15 # Ben Schueler
        {    
          if (digitalRead(anotherOutputPin))
          {
            digitalWrite(anotherOutputPin, LOW);
          }
        }
      }

      if (digitalRead(outputPin))
      {
        // Если вкл. подставляем кнопку вык.
        e.print("<a href='/?cmd1=off'><input type='button' value='Led1 вык.' /></a><br/>");
      }
      else
      {
        // Если вык. подставляем кнопку вк.
        e.print("<a href='/?cmd1=on'><input type='button' value='Led1 вк.' /></a><br/>");
      }
      if (digitalRead(anotherOutputPin))
      {
         // Если вкл. подставляем кнопку вык.
        e.print("<a href='/?cmd2=off'><input type='button' value='Led2 вык.' /></a><br/>");
      }
      else
      {
        // Если вык. подставляем кнопку вк.
        e.print("<a href='/?cmd2=on'><input type='button' value='Led2 вк.' /></a><br/>");
      }
      e.respond();
    }
     
     
  17. jks123

    jks123 Нерд

    прописные истини. Походу моя ардуинка скоро испепелится сама от количества перезаливок
     
  18. Alex19

    Alex19 Гуру

    У меня в день иногда под сотню, нормально.

    Работает?
    Просто мне еще сложно писать без железа, не вижу, что будет.
     
  19. jks123

    jks123 Нерд

    вешается напрочь
     
  20. jks123

    jks123 Нерд

    щас этот пытаюсь победить пока с одной кнопкой работает
    #include "etherShield.h"
    #include "ETHER_28J60.h"

    int outputPin = 7;

    static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,

    static uint8_t ip[4] = {192, 168, 0, 150}; // IP address for the webserver

    static uint16_t port = 80; // Use port 80 - the standard for HTTP

    ETHER_28J60 e;

    void setup()
    {
    e.setup(mac, ip, port);
    pinMode(outputPin, OUTPUT);
    }

    void loop()
    {
    char* params;
    if (params = e.serviceRequest())
    {
    e.print("<h1><a href='/?led=off'>Arduino Web Remote</a></h1>");
    if (strcmp(params, "?led=on") == 0)
    {
    digitalWrite(outputPin, HIGH);
    e.print("<a href='?led=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED IS ON</button></a>");
    }
    else if (strcmp(params, "?led=off") == 0)
    {
    digitalWrite(outputPin, LOW);
    e.print("<a href='?led=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED IS OFF</button></a>");
    }
    e.respond();
    }
    }