Модуль мини-веб-сервера ENC28J60 Ethernet для Arduino Nano v3.0

Код:00811
Артикул:AN-3-WS
В наличии:есть
790 руб
1
Модуль мини-веб-сервера ENC28J60 Ethernet для Arduino Nano v3.0

ENC28J60 Ethernet Shield позволяет подключить плату Arduino Nano v3.0 к сети.
Ведущий компонент – микросхема ENC28J60, которая поддерживает стеки TCP и UDP в IP-сети. Плата имеет стандартный разъем RJ-45 со встроенным линейным трансформатором, обеспечивающий гальваническую развязку модуля от кабеля TCP\IP, и опцией PoE (Power over Ethernet) для получения питания от обычной витой пары 5 категории. На плате установлены 2 светодиода, свечение которых свидетельствует об обмене данными. Выведенные на плату ENC28J60 Ethernet_shield разъёмы типа "мама" с шагом 1 дюйм позволяют произвести подключение к ней платы Arduino Nano по модульному принципу, что значительно экономит место.

ENC28J60 Ethernet Shield V1.0 для Arduino Nano 3.0

Плата ENC28J60 Ethernet_shield управляется и получает/передает данные по SPI интерфейсу. При этом используются следующие выводы Arduino Nano:
D10 –  SS;
D11 –  MOSI;
D12 –  MISO;
D13 –  SCK;
D2 – выход прерывания. При приеме пакета импульс на этот выход – сигнал для Arduino срочно обрабатывать пакет. Или, как минимум, принять во внимание, что надо получать данные.

Характеристики
Питание
            напряжение 3,14 – 3,45 В;
            ток, мА
                        максимальный 250;
                        номинальный 170;
Интегрированный MAC и 10 Base-T PHY;
Полный и полудуплекс;
Поддержка одного 10 Base-T порта с автоопределением полярности и коррекцией;
Автовыравнивание генерации контрольной суммы;
Автоотброс ошибочных пакетов;
Программируемая функция повтора передачи при ошибке;
Программируемые функции Padding и генерирование CRC;
Программируемая функция фильтрации ошибочных пакетов;
Тактовая частота SPI до 20 МГц.
Для работы с ENC28J60 Ethernet_shield рекомендуем использовать Arduino-библиотеку UIPEthernet, которую можно скачать из репозитория . В отличие от множества других библиотек для ENC28J60, эта библиотека является полной заменой стандартной (включенной в Arduino IDE) библиотеки Ethernet.h. Библиотека обеспечивает полную поддержку постоянных (потоковых) TCP и UDP-соединений (клиент и сервер), ARP, ICMP, DHCP и DNS. Для ее использования заменяем строку
#include
на
#include
И используем вее функции стандартной библиотеки Ethernet.h.
 
Использование
 
Плата ENC28J60 Ethernet_shield позволяет Arduino получить доступ в Интернет, что делает возможность создавать на основе связки Arduino+ ENC28J60 Ethernet_shield устройств, реализующих концепцию Internet of Things ("Интернет вещей"), согласно которой доступ к данным датчиков или управление исполнительными устройствами может быть обеспечено из любой точки мира.
Рассмотрим самый простой пример отправки данных с фоторезистора (аналоговый датчик освещенности) на один из облачных сервисов.
Сайт «Народный мониторинг» (www.narodmon.ru) — проект по сбору и отображению на карте мира показаний температуры, давления, влажности и т. п. практически в реальном времени по фактическому их состоянию (а не на основе прогнозов) от различных датчиков среды, установленных как на улице для публичного доступа, так и в помещении для приватного, а также с веб-камер для частного или публичного доступа. Передавать показания датчиков на narodmon.ru можно посредством протоколов TCP/UDP или HTTP GET/POST. Минимальный интервал передачи показаний датчика — 5 минут (если передавать чаще, то возможна блокировка).
Чтобы стать участником проекта, необходимо зарегистрироваться: заходим на сайт www.narodmon.ru.
Для отображения показаний датчика (возьмем простейший датчик температуры LM335) на карте необходимо выполнить следующие действия:
  • Подключить устройство мониторинга (в нашем случае Arduino) к источнику питания и к сети Интернет (с помощью платы Ethernet shield).
  • Настроить передачу показаний на сайт narodmon.ru с интервалом 5–15 минут (напомню, если чаще, то возможна блокировка).
Схема подключения датчика

ENC28J60
 
И скетч отправки данных
 
#include
 
byte mac[] = {  0x94, 0xDE, 0x80, 0x3A, 0x90, 0xC9 }; //MAC-адрес Arduino
const unsigned long postingInterval = 600000;  // интервал между отправками
                                               // данных - 10 минут
// IP-адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 0, 119 };   
// IP-адрес, dns сервера:
byte sdns[] = { 192, 168, 1, 1 };   
// адрес шлюза:
byte gateway[] = { 192, 168, 0, 28 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };
 
IPAddress server(94,19,113,221); // IP сервера
//IPAddress server(91,122,49,168); // IP сервера
EthernetClient client;
unsigned long lastConnectionTime = 0;   // время последней передачи данных
boolean lastConnected = false;          // состояние подключения
char replyBuffer[160];
 
void setup()
  {
  Serial.begin(9600);
  // Ethernet connection:
  Ethernet.begin(mac,ip,sdns,gateway,subnet);
  // секунда для инициализации Ethernet
  delay(1000);
  //первое соединение через 15 секунд после запуска
  lastConnectionTime = millis()-postingInterval+15000;
}
 
void loop()
  {
  //если не подключены, и прошло определенное время, то делаем замер,
  //переподключаемся и отправляем данные
  if (!client.connected() && (millis() - lastConnectionTime > postingInterval))
    {
    //формирование HTTP-запроса
    memset(replyBuffer, 0, sizeof(replyBuffer));
    strcpy(replyBuffer,"ID=");
    //Конвертируем MAC-адрес
    for (int k=0; k<6; k++)
      {
      int b1=mac[k]/16;
      int b2=mac[k]%16;
      char c1[2],c2[2];
 
      if (b1>9) c1[0]=(char)(b1-10)+'A';
      else c1[0] = (char)(b1) + '0';
      if (b2>9) c2[0]=(char)(b2-10)+'A';
      else c2[0] = (char)(b2) + '0';
 
      c1[1]='\0';
      c2[1]='\0';
 
      strcat(replyBuffer,c1);
      strcat(replyBuffer,c2);
      }
   strcat(replyBuffer,"&");
   strcat(replyBuffer,"3351C4BA0200003B");
   strcat(replyBuffer,"=");
   char temp[3];
   double tmpd=(analogRead(A0)*5.0/1024)*100-273.15;
   int tmpi=int(tmpd);
   itos(tmpi,temp);
   strcat(replyBuffer,temp);
   strcat(replyBuffer,'\0');
   //отправляем запрос
   httpRequest();
   }
  //храним последнее состояние подключения
  lastConnected = client.connected();
  }
// функция отправки запроса
void httpRequest() {
  if (client.connect(server, 80))
    {
    // send the HTTP POST request:
    client.println("POST http://narodmon.ru/post.php HTTP/1.0");
    client.println("Host: narodmon.ru");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(len(replyBuffer));
    client.println();
    client.println(replyBuffer);
    client.println();
    lastConnectionTime = millis();
    }
  else
    {
    client.stop();
    }
  }
 
// размер данных
int len(char *buf)
{
  int i=0;
  do
    {
    i++;
    } while (buf[i]!='\0');
  return i;
}
// функция int to string
void itos(int n, char bufp[3]) //
{
  char buf[3]={'0','0','\0'};
  int i = 1;
  while (n > 0)
    {
    buf[i] = (n % 10)+48;
    i--;
    n /= 10;
    }
  for (i=0; i<3; i++)
    bufp[i]=buf[i];
  }
 
Для передачи данных на сайт «Народный мониторинг» мы используем резервный протокол передачи HTTP POST/GET на URL: http://narodmon.ru/post.php.
При этом HTTP-заголовки для POST будут следующими:
POST http://narodmon.ru/post.php HTTP/1.0\r\n
Host: narodmon.ru\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: NN(кол-во байт в строке данных ниже)\r\n
\r\n
ID=MAC&mac1=value1&...&macN=valueN[&time=UnixTime][&name=NAME][&lat=LAT][&lng=LNG]
Скетч запускает Ethernet-соединение, плата получает IP-адрес в Сети, один раз в 5 минут считываются данные с датчика температуры, формируется строка с данными для отправки на сервер «Народный мониторинг», и данные отправляются с использованием протокола HTTP POST.
Теперь авторизуемся на сайте, используя логин и пароль, выбираем команду меню Датчики | Мои Датчики | Добавить устройство и вводим MAC-адрес нашего устройства. Если данные уже были отправлены на сайт, устройство будет добавлено.

ENC28J60 Ethernet Shield V1.0 для Arduino Nano 3.0

Затем выбираем  тип данных для нашего датчика (температура), устанавливаем доступ к показаниям (приватный), указываем название устройства и выполняем привязку к карте устройства мониторинга, указав полный адрес щелчком по строке с адресом. После чего выбираем опцию показать на карте  и в случае необходимости корректируем положение на карте с помощью плавающего меню

ENC28J60

Через некоторое время мы можем посмотреть временной график изменения данных датчика на нашем устройстве. Для этого выбираем команду меню Профиль | Мои Датчики и значок графика для выбранного датчика.

ENC28J60




 
Вверх