Ethernet Shield. Проблема просмотра через WIFI

alex_mouj
Offline
Зарегистрирован: 30.11.2015

Добрый день!

Возникла такая проблема. Есть такой скетч

=============================

#include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
 
 
IPAddress ip(192, 168, 0, 104);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
 
EthernetServer server(80);
 
int numPins = 16;
int pins[] = { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46 };    // Пины для реле
int pinState[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};  // Состояние пинов
 
 
 
void setup()
{
  // Изначально выключаем все реле
  for (int i = 0; i < numPins; i++)
  {
    pinMode(pins[i], OUTPUT);
    digitalWrite(pins[i], 1);
  }
  
  Serial.begin(9600);
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP()); 
}
 
void loop()
{
  EthernetClient client = server.available();
  if (client)
  {
    // Проверяем подключен ли клиент к серверу
    while (client.connected())
    {
      // Проверяем идет ли запрос к серверу
      int dataCount = client.available();
      if (dataCount > 0)
      {
        // Считываем данные передаваемые серверу с клиента (броузера)
        for (int i = 0; i < dataCount; i++)
        {
          char ch = client.read();
          // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P'
          if (i == 0 && ch != 'P')
            break;
          if (ch == '\n' && i < dataCount - 1)
          {
             // Находим строку, в которой содержатся передаваемые данные
             char chNext = client.read();
             // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле)
             if (chNext == 'r')
             {
               // Выключаем все реле
               pinState[0] = 0;
               pinState[1] = 0;
               pinState[2] = 0;
               pinState[3] = 0;
               pinState[4] = 0;
               pinState[5] = 0;
               pinState[6] = 0;
               pinState[7] = 0;
               pinState[8] = 0;
               pinState[9] = 0;
               pinState[10] = 0;
               pinState[11] = 0;
               pinState[12] = 0;
               pinState[13] = 0;
               pinState[14] = 0;
               pinState[15] = 0;
               
               // Считываем первый номер реле, который нужно включить
               char relayNum = client.read();
               pinState[relayNum-'0'] = 1;
               Serial.write(relayNum);
               
               // Считываем вспомогательную информацию (=on&)
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
               relayNum = client.read();
                
               // Пока есть данные об остальных реле, считываем и заносим в массив pinState
               while (relayNum != -1)
               {
                  relayNum = client.read();
                  relayNum = client.read();
                  pinState[relayNum-'0'] = 1;
                  Serial.write(relayNum);
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
                  relayNum = client.read();
               }
             } else
             {
                // Если не было передано данных, то выключаем все реле
                pinState[0] = 0;
                pinState[1] = 0;
                pinState[2] = 0;
                pinState[3] = 0;
                pinState[4] = 0;
               pinState[5] = 0;
               pinState[6] = 0;
               pinState[7] = 0;
               pinState[8] = 0;
               pinState[9] = 0;
               pinState[10] = 0;
               pinState[11] = 0;
               pinState[12] = 0;
               pinState[13] = 0;
               pinState[14] = 0;
               pinState[15] = 0;
             }
          }
        }
      }
      
      // В соответствие с переданными данными включаем реле
      for (int i = 0; i < 15; i++)
      {
         digitalWrite(pins[i], !pinState[i]);
      }
      
      // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println();
      client.println("<html>");
      client.println("<head>");
      client.println("<title>Zelectro. Relay + Ethernet shield.</title>");
      client.println("</head>");
      client.println("<body>");
      client.println("<h3>Квартира</h3>");
      client.println("<form method='post'>");
      
      client.print("<div>Кухня <input type='checkbox' ");
      if (pinState[0] == 1)
        client.print("checked");
      client.println(" name='r0'></div>");
      
      client.print("<div>Столовая <input type='checkbox' ");
      if (pinState[1] == 1)
        client.print("checked");
      client.println(" name='r1'></div>");
      
      client.print("<div>Спальня<input type='checkbox' ");
      if (pinState[2] == 1)
        client.print("checked");
      client.println(" name='r2'></div>");
      
      client.print("<div>Кинотеатр<input type='checkbox' ");
      if (pinState[3] == 1)
        client.print("checked");
      client.println(" name='r3'></div>");
      
      client.print("<div>Коридор<input type='checkbox' ");
      if (pinState[4] == 1)
        client.print("checked");
      client.println(" name='r4'></div>");
      
      client.print("<div>Ванная<input type='checkbox' ");
      if (pinState[5] == 1)
        client.print("checked");
      client.println(" name='r5'></div>");
      
      client.print("<div>Гардеробная<input type='checkbox' ");
      if (pinState[6] == 1)
        client.print("checked");
      client.println(" name='r6'></div>");
      
      client.print("<div>Детская<input type='checkbox' ");
      if (pinState[7] == 1)
        client.print("checked");
      client.println(" name='r7'></div>");
      
      client.println("<input type='submit' value='Refresh'>");
      client.println("</form>");
      client.println("</body>");
      client.println("</html>");
      client.stop(); 
    }
  }
}
 
===========================
 
Могу открывать страницу на компьютере, соединенным кабелем с роутером. Но через WIFI страница не открывается, причем на всех мобильных устройствах. Я не очень силен в сетевых настройках. Подозреваю, что проблема с масками подсети или еще каким-то шаманством. Кто-нибудь сталкивался?
ramzes.ru
Offline
Зарегистрирован: 19.11.2014

попробуй убрать gateway

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,241);
byte subnet[] = { 255, 255, 255, 0 }; //маска подсети