Arduino Server + Client

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Arduino Server + Client

Сообщение Amarok » Вт июн 13, 2017 8:22 am

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

Код: Выделить всё

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

Код: Выделить всё

http://192.168.0.251:80/objects/?script=tempupdated&temp=dhtTemp&hum=dhtHum 
каждую минуту или при изменении температуры?
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Server + Client

Сообщение nick7zmail » Вт июн 13, 2017 8:24 am

Ams отлично с этим справляется...но там по-моему переписанная библиотека Ethernet

Отправлено с моего Xperia Z через Tapatalk
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Arduino Server + Client

Сообщение Amarok » Вт июн 13, 2017 8:26 am

nick7zmail писал(а):Ams отлично с этим справляется...но там по-моему переписанная библиотека Ethernet

Отправлено с моего Xperia Z через Tapatalk
амс мне не нужен. он только на мегу вливается
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Server + Client

Сообщение nick7zmail » Вт июн 13, 2017 9:23 am

Ну во-первых не только на мегу)) https://hi-lab.ru/arduino-mega-server/details/download
Во-вторых я и не предлагал взять амс...я лишь сказал, что там библиотека ethernet переписанная (на сколько я знаю) под эти нужды...можно взять её, и примеры использования подглядеть в амс. А именно выдернуть один из циклов, и на него всё завязать.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Arduino Server + Client

Сообщение Amarok » Вт июн 13, 2017 9:52 am

nick7zmail писал(а):Ну во-первых не только на мегу)) https://hi-lab.ru/arduino-mega-server/details/download
На uno не вливается(
Моя Алиска живёт на Proxmox в Debian 12
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Server + Client

Сообщение serghei » Вт июн 13, 2017 9:55 am

Скорее всего тут либо сервер , либо клиент. В первом случае ардуина делает все сама - отсылает состояное и данные , а так же получает команды из МД. Если вырезать Веб , то в UNO может и влезет, но смысла в этом нет. Библиотека переписана.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Arduino Server + Client

Сообщение Amarok » Сб июн 17, 2017 1:03 pm

Дело в том, что я хочу реализовать связку arduino + свой сервер (Majordomo). Ардуинка мониторит подключенные к ней датчики (температура, влажность, освещенность, движение и т.д.), выполняет какие либо действия при изменении значений датчиков и выводит состояния подключенных сенсоров на свою веб страницу (в примере за это отвечает функция generateWebPage). При этом, ардуинка должна с какой либо периодичностью (к примеру: каждые 3 минуты) или по событию (сработал датчик движения) скидывать значения датчиков на мой сервер.

Также нужно научить Arduino ПРИНИМАТЬ команды (к примеру зажигать или гасить светодиод) от основного сервера.

Установить Arduino Mega Server на Arduino UNO нет возможности, а опыта для "кастрации" AMS пока ещё не имею. Конечно, можно воспользоваться WiFiGate из соответствующей темы, но и тут неприятности:
1) частенько WiFiGate высылает Алисе "мусор"
2) приём команд банально не работает
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Arduino Server + Client

Сообщение nick7zmail » Сб июн 17, 2017 5:01 pm

А его не надо кастрировать)) вы что, он хочет жить и размножаться)))
Я предложил лишь наглым образом стырить оттуда измененную библиотеку ethernet, и делать проект с ней...

И даже если со стандартной библиотекой, если вы хотите страничку - можно же не использовать функцию клинта...и не посылать данные на МД, а заставить МД самого забирать данные со странички через скрипт...и тогда библиотека клиента не понадобится, поправьте, если не прав...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Arduino Server + Client

Сообщение Amarok » Вс июн 18, 2017 8:05 am

nick7zmail писал(а):И даже если со стандартной библиотекой, если вы хотите страничку - можно же не использовать функцию клинта...и не посылать данные на МД, а заставить МД самого забирать данные со странички через скрипт...и тогда библиотека клиента не понадобится, поправьте, если не прав...
На данном этапе так и сделано - Алиса раз в минуту опрашивает ардуинку, вытаскивает значения и раскладывает их по полочкам, но хочется именно отправку значений датчиков по событию (к примеру: сработал датчик движения)
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Arduino Server + Client

Сообщение xor » Вс июн 18, 2017 9:04 am

А разве не так делается:
контроллер как сервер - слушает и исполняет внешние команды
если надо что-то сказать, переключается в режим клиента, говорит и возвращается в режим сервера?
Ответить