Server + Client

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

Доброго всем дня!

Столкнулся вот с чем: непонимаю как добиться одновременной работы EthernetServer и EthernetClient?

Хочется иметь возможность управлять пинами и считывать их значения как через web-интерфейс, так и через get-запросы. Выходит либо одно, либо другое. Подскажите, пожалуйста, как это сделать и, если можно, покажите простенький скетч.

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

Забыл указать, что используется шилд W5100

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

Прилагаю свой скетч:

#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-запроса:

каждую минуту или при изменении температуры?

 
dmitron1036
Offline
Зарегистрирован: 10.01.2016
void loop()
27 {
28   dhtCheck();
29   generateWebPage ();
30 }

Фантастика....работает?

BlackWarrior
Offline
Зарегистрирован: 07.09.2013

да, работает