Arduino Server + Client

Тема в разделе "Проводная и беспроводная связь", создана пользователем BlackWarrior, 10 июн 2017.

Метки:
  1. BlackWarrior

    BlackWarrior Нерд

    Доброго всем дня!
    Столкнулся вот с чем: непонимаю как добиться одновременной работы EthernetServer и EthernetClient?
    Хочется иметь возможность управлять пинами и считывать их значения как через web-интерфейс, так и через get-запросы. Выходит либо одно, либо другое. Подскажите, пожалуйста, как это сделать и, если можно, покажите простенький скетч.
    Используется Arduino Uno + шилд W5100.
     
  2. BlackWarrior

    BlackWarrior Нерд

    апну тему
     
  3. BlackWarrior

    BlackWarrior Нерд

    Прилагаю свой скетч:
    Код (C++):
    #include <DHT.h>
    #include <SPI.h>
    #include <Ethernet.h>

    #define DHTTYPE DHT22
    #define DHTPIN 9
    DHT dht(DHTPIN, DHTTYPE);
    int dhtTemp; int dhtHum; int dhtHIC;

    /******************** НАСТРОЙКИ ETHERNET ********************/

    byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9 };// физический mac адрес
    byte ip[] = { 192, 168, 0, 9 };                     // ip в lan
    byte subnet[] = { 255, 255, 255, 0 };               // маска подсети
    byte gateway[] = { 192, 168, 0, 1 };                // шлюз по умолчанию
    EthernetServer server(80);                          // порт сервера


    void setup()
    {
      Ethernet.begin(mac,ip,gateway,subnet);  // инициализировать Ethernet устройства
      server.begin();                         // начать прослушивание клиентов
      dht.begin();
    }

    void loop()
    {
      dhtCheck();
      generateWebPage ();
    }

    void dhtCheck() {
      dhtTemp = dht.readTemperature();
      dhtHum = dht.readHumidity();
      dhtHIC = dht.computeHeatIndex(dhtTemp, dhtHum, false);
    }

    void generateWebPage () {
      EthernetClient client = server.available();    // искать клиента
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println("Connnection: close");
      client.println();
      client.println("<html>");
      client.println("<head>");
      client.println("<title>Lair module</title>");
      client.println("<meta http-equiv=\"refresh\" content=\"15\">");
      client.println("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>");
      client.println("</head>");
      client.println("<body>");
      client.println("<table>");
        client.println("<tr>");
         client.println("<td>");
          client.println("<center>"); client.println("<b>Климат</b>"); client.println("</center>");
         client.println("</td>");
        client.println("</tr>");
        client.println("<tr>");
         client.println("<td>");
          client.println("<b>Температура: </b>"); if (dhtHIC > 0) {client.print("+");} client.print(dhtHIC); client.println("°");
         client.println("</td>");
        client.println("</tr>");
        client.println("<tr>");
         client.println("<td>");
          client.println("<b>Влажность: </b>"); client.print(dhtHum); client.println("%");
         client.println("</td>");
        client.println("</tr>");
      client.println("</table>");
      /*
      client.println("<h2>Observing State Of Switch</h2>");

      client.print("<h2>Switch is:  </2>");

      if (digitalRead(8))
      {
        client.println("<h3>ON</h3>");
      }
      else
      {
        client.println("<h3>OFF</h3>");
      }
      */

      client.println("</body>");
      client.println("</html>");
      delay(1);         // даем время, чтобы принять данные
      client.stop();
    }
    // http://tehnopage.ru/ethernet-shield-w5100
    // http://radioprog.ru/post/109

    Как сделать, чтоб по-мимо отображения веб-страницы ещё проводилась отправка примерно такого get-запроса:
    Код (Text):
    http://192.168.0.251:80/objects/?script=tempupdated&temp=dhtTemp&hum=dhtHum
    каждую минуту или при изменении температуры?