ENC28J60 NANO SHIELD — удобный способ подключения Arduino к сети

С каждым годом платы Arduino применяется во все более сложных проектах, и это связано не с самими платами, а в значительной степени с модулями и чипами, совместимыми с 8-битными процессорами.

Сегодня мы более подробно рассмотрим шилд (shield), то есть плату расширение для Arduino Nano. Этот шилд оснащен чипом ENC28J60, который занимается обработкой данных отправляемых в сеть. При правильном использовании он станет настоящим сетевым комбайном, который будет способен предоставлять данные с датчиков или собирать и выполнять пользовательские рекомендации для всех пользователей целевой сети

Подключение модуля ENC28J60 к плате Ардуино и сети

Подключить шилд ENC28J60 к Arduino чрезвычайно просто. Мы должны установить нашу Arduino Nano в разъем шилда. На фото ниже показано правильное подключение модуля ENC28J60 к плате Arduino Nano.

Библиотеки и необходимые материалы

Для запуска модуля ENC28J60 и начала успешного сотрудничества с платой нам понадобится библиотека. Воспользуемся библиотекой EtherCard. Помимо EtherCard, мы можем найти в сети еще несколько библиотек, но, на наш взгляд, эта самая простая в использовании. Предлагаемых в ней функций достаточно для большинства задач.

Библиотеку можно скачать по этой ссылке. Конечно, скаченную библиотеку в IDE Arduino придется установить вручную.

Поэтому проще будет использовать программу установки. Для этого в Arduino IDE перейдите по пути Эскиз/Include Library/Manage libraries, в поле поиска введите EtherCard и нажмите Install для установки библиотеки.

Arduino NANO
16 МГц Nano v3.0 ATMEGA328P/168 P

Модуль Wiznet W5500
Высокоскоростной SPI интерфейс 80 МГц...

SHIELD ENC28J60 Ethernet V1.0 для Аrduino
Совместимый с Nano 3,0 RJ45, модуль веб-сервера...

Мы начнем тестировать модуль с загрузки примера backSoon, измененного под наши требования. Данный пример предназначен для подключения к сети и настройки простого веб-сайта, который будет отображать текст. Скетч представлен ​​ниже:

#include <EtherCard.h>
#define STATIC 1
#if STATIC
static byte myip[] = { 192,168,1,200 };// IP-адрес, мы можем выбрать его произвольно
static byte gwip[] = { 192,168,1,1 };// адрес по умолчанию, в нашем случае маршрутизатор
#endif
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; //indywidualny adres mac płytki
byte Ethernet::buffer[500]; // tcp/ip буфер отправки и приема

const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
 "<head><title>"
 " Добро пожаловать на вашу первую страницу "
 "</title></head>"
 "<body>"
 "<h3> На основе этой страницы мы можем создать сайт в локальной сети </h3>"
 "<h2> Ввод текста очень прост, достаточно знать основы HTML </h2>"
 "</body>"
"</html>";// здесь мы определяем, какая страница будет отображаться

void setup(){
 Serial.begin(57600);
 Serial.println("\n[backSoon]");
 if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
 Serial.println( "Failed to access Ethernet controller");
#if STATIC
 ether.staticSetup(myip, gwip);
#else
 if (!ether.dhcpSetup())
 Serial.println("DHCP failed");
#endif
 ether.printIp("IP: ", ether.myip);
 ether.printIp("GW: ", ether.gwip);
 ether.printIp("DNS: ", ether.dnsip);
}
void loop(){
 if (ether.packetLoop(ether.packetReceive())) {
 memcpy_P(ether.tcpOffset(), page, sizeof page);
 ether.httpServerReply(sizeof page - 1);
 }
}

Большинство элементов скетча объяснено с помощью комментариев к исходному коду, но стоит сосредоточиться не на самой программе, а на сетевых аспектах. Это может быть неочевидно для людей, которые не имеют ежедневного контакта с настройкой компьютерных сетей.

IP-адрес — это идентификационный номер устройства в сети. IP-адрес используется для правильной связи между другими устройствами. Каждое устройство в сети должно иметь свой индивидуальный IP-адрес, чтобы пересылка пакетов не мешала друг другу.

Если для Вас это совершенно новая тема, то вам нужно сначала определить адреса, используемые в сети. Самый простой способ — подключить компьютер к тому же маршрутизатору, к которому вы подключаете Arduino.

Даже если компьютер подключен к Wi-Fi, домашние маршрутизаторы обычно используют общую адресацию. Поэтому в Windows запустите команду cmd и введите команду ipconfig. Найдите среди результатов IPv4-адрес. Он, как правило, обычно имеет вид 192.168.1.100. Первые три числа обычно представляют собой сетевой адрес, а последнее — адрес устройства.

Мы использовали адрес 192.168.1.200, чтобы получить безопасное расстояние до других устройств в сети, но если у нас есть одно устройство, подключенное к сети, модуль Ethernet может иметь IP 192.168.1.3.

Здесь может возникнуть резонный вопрос, так как в сети всего два устройства, почему бы не дать модулю Ethernet адрес 192.168.1.2?

По одной очень простой причине — адрес 192.168.1.1 является адресом шлюза по умолчанию и назначается маршрутизатору, и этот адрес шлюза по умолчанию отмечен в программе как «gwip».

Последний элемент — это MAC-адрес, помеченный как «mymac», MAC-адрес — это индивидуальный адрес устройства, аналогично IP. Два одинаковых MAC-адреса в сети могут вызвать конфликт пакетов. Так-как у нас в сети только один модуль Ethernet, то нам не о чем беспокоиться.

После загрузки скетча в Arduino, стоит включить Serial Monitor, он будет отображать введенные нами данные. Скорость передачи данных в Serial Monitor должна быть изменена с 9600 на 57600 бод.

Когда модуль настроен в соответствии с предоставленными нами адресами, мы должны подключить кабель с разъемом RJ45 к нашему модулю, а другой разъем — к свободному разъему RJ45 в маршрутизаторе. После подключения подождите несколько секунд, затем вернитесь к компьютеру и введите IP-адрес нашего модуля в строке браузера, затем нажмите Enter. Мы должны увидеть страницу, которая выглядит так, как показано ниже:

 

Отображение показаний датчика DS18B20

Для проверки скорости работы программы подключим датчик температуры DS18B20 к контакту 4, благодаря чему мы сможем проверить, как работает отображение данных с датчиков. Датчик подключается к контакту 4. Не забудьте соединить контакт данных и VCC подтягивающим резистором 4,7 кОм. Макет должен быть построен согласно фото ниже:

После сборки системы мы можем перейти к программной части. Нам понадобятся библиотеки OneWire, DallasTemperature для поддержки датчика DS18B20 и пакет библиотеки ETHER_28J60 для упрощения работы с датчиком на нашем веб-сайте.

Почему мы используем две разные библиотеки? По одной простой причине — не имеет смысла усложнять себе работу. EtherCard гораздо лучше для использования в типичных сетевых приложениях, однако ETHER_28J60 — гораздо более удобный инструмент для записи разных типов данных на страницу, при этом код будет легче и понятнее.

Установив новый пакет библиотек, мы можем перейти к написанию программы, которая должна выглядеть, как показано ниже:

#include "etherShield.h"
#include "ETHER_28J60.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // определяем подключение датчика DS18B20
OneWire oneWire(ONE_WIRE_BUS); // запускаем OneWire
static uint8_t mac[6] = {0x74, 0x69, 0x69, 0x2D, 0x30, 0x31}; //adres MAC
static uint8_t ip[4] = {192, 168, 1, 200}; // адрес шлюза по умолчанию
static uint16_t port = 80; // порт данных, для HTML значение должно быть 80
ETHER_28J60 e;
DallasTemperature sensors(&oneWire); // назначаем датчик DS18B20 OneWire
void setup()
{
 sensors.begin();
 e.setup(mac, ip, port);
}
void loop()
{
 sensors.requestTemperatures(); // получаем данные о температуре от DS18B20
 float temp = sensors.getTempCByIndex(0); // создаем переменные для значений датчика
 if (e.serviceRequest())
 {
 e.print("<H3> Вот ваш первый сетевой датчик температуры! <H3><br/>");
 e.print("Температура ");
 e.print(temp);
 e.print(" *C");
 e.respond();
 }
 delay(100);
}

После загрузки программы мы должны увидеть следующее:

Мы уже ознакомились с основами этого модуля. Как видите, использование Arduino в сети не так сложно, как может показаться. Кстати, чип ENC28J60 считается самым сложным в программировании и адаптации для правильной работы, поскольку он официально не поддерживается Arduino. Но немного практики и использование соответствующих библиотек даст вам желаемый результат!

Добавить комментарий

Ваш электронный адрес не будет опубликован.


*