На этой странице рассмотрим, как подключить модуль Ethernet HanRun HR911105A к Arduino. При проектировании автономных механизмов или создании системы «умный дом» многим может понадобиться подключить Arduino к сети Интернет через сетевой модуль ENC28J60 LAN / Ethernet. Это позволит управлять микроконтроллером Ардуино по локальной сети с помощью компьютера или смартфона (при наличии точки доступа WiFi).
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- ENC28J60 Ethernet LAN / Network Module
- светодиоды и резисторы
- макетная плата
- коннекторы
- библиотека EtherCard.h
Дополнительные материалы на эту тему:
HanRun HR911105A распиновка, характеристики

Характеристики HanRun HR91105A Arduino (datasheet)
- Источник питания: 3,3 / 5 В
- Сетевой интерфейс: HR911105A
- Кристаллический осциллятор 25 МГц
- Размер: 58 x 34 x 17 мм
Обратите внимание, что 10-контактный Ethernet-модуль ENC28J60 (HR911105A) питается от 3,3 Вольт, а 12-контактный модуль от 5 Вольт. Кроме того, обозначения разъемов на щите HanRun HR911105A могут быть изменены производителем, например, ST вместо SO. Подключение коннекторов к контактам модуля должно быть максимально качественным. Соединение с микроконтроллерами производится по шине данных SPI.
Как подключить модуль HanRun HR91105A к Arduino

| ENC28J60 | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| 5V / 3.3V | 5V / 3.3V | 5V / 3.3V | 5V / 3.3V |
| SCK | 13 (SCK) | 13 (SCK) | 52 (SCK) |
| SO | 12 (MISO) | 12 (MISO) | 50 (MISO) |
| ST | 11(MOSI) | 11 (MOSI) | 51 (MOSI) |
| CS | 10 (SS) | 10 (SS) | 53 (SS) |
Кроме сборки электрической схемы с микроконтроллером Ардуино и ENC28J60 Ethernet Shield Module, необходимо загрузить и установить библиотеку EtherCard.h. После того, как библиотека была установлена, соедините плату Arduino и модуль Ethernet HR911105A, как показано на изображении выше (порты подключения модуля к различным платам Ардуино дополнительно указаны в таблице) и загрузите следующую программу в плату.
Скетч для управления Arduino от HanRun ENC28J60
#include "EtherCard.h"
static byte mymac[] = {0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A }; // MAC Address
static byte myip[] = {192, 168, 1, 55 }; // IP адрес страницы
byte Ethernet::buffer[1200]; BufferFiller bfill;
int LedPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
boolean PinStatus[] = {1, 2, 3, 4, 5, 6, 7, 8};
const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";
const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";
const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";
// оформление Web страницы
void homePage() {
bfill.emit_p(PSTR("$F"
"<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"
"<meta name='viewport' content='width=device-width, initial-scale=1.0'>"
"<title>Управление Ардуино УНО</title>"
"<h1 style='color:#0ea6f2'>Управление Ардуино</h1>"
"<font size='3em'>"
"<font style='display:none;'>Светодиод 0: <a href='?ArduinoPIN1=$F'>$F</a></font>"
"Светодиод 1: <a href='?ArduinoPIN2=$F'>$F</a><br /><br />"
"Светодиод 2: <a href='?ArduinoPIN3=$F'>$F</a><br /><br />"
"Светодиод 3: <a href='?ArduinoPIN4=$F'>$F</a><br /><br />"
"</font>"),
http_OK,
PinStatus[1] ? PSTR("off") : PSTR("on"),
PinStatus[1] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
PinStatus[2] ? PSTR("off") : PSTR("on"),
PinStatus[2] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
PinStatus[3] ? PSTR("off") : PSTR("on"),
PinStatus[3] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
PinStatus[4] ? PSTR("off") : PSTR("on"),
PinStatus[4] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"));
}
void setup() {
Serial.begin(9600);
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0);
if (!ether.dhcpSetup());
// выводим на монитор порта IP, который присвоил роутер для Ардуино
ether.printIp("My Router IP: ", ether.myip);
// подменяем динамический IP на постоянный
ether.staticSetup(myip);
// выводим на монитор порта новый статический IP
ether.printIp("My SET IP: ", ether.myip);
for (int i = 2; i <= 5; i++) {
pinMode(LedPins[i], OUTPUT);
PinStatus[i] = false;
}
}
void loop() {
delay(1);
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) {
bfill = ether.tcpOffset();
char *data = (char *) Ethernet::buffer + pos;
if (strncmp("GET /", data, 5) != 0) {
bfill.emit_p(http_Unauthorized);
}
else {
data += 5;
if (data[0] == ' ') {
homePage(); // если обнаружены изменения на станице, запускаем функцию
for (int i = 2; i <= 5; i++) { digitalWrite(LedPins[i], PinStatus[i + 1]); }
}
// "16" = количество символов в строке "?ArduinoPIN1=on "
else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
PinStatus[1] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
PinStatus[2] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
PinStatus[3] = true;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
PinStatus[4] = true;
bfill.emit_p(http_Found);
}
// "17" = количество символов в строке "?ArduinoPIN1=off "
else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
PinStatus[1] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
PinStatus[2] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
PinStatus[3] = false;
bfill.emit_p(http_Found);
}
else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
PinStatus[4] = false;
bfill.emit_p(http_Found);
}
else { bfill.emit_p(http_Unauthorized); }
}
ether.httpServerReply(bfill.position());
}
}
Заключение. IP платы Arduino прописан в программе. Все основные функции в программе закомментированы, поэтому у вас не должно возникнуть проблем с настройкой программы. Зайдите на IP-адрес 192.168.1.55 через компьютер или телефон — должна открыться веб-страница, ее оформление выполнено с помощью HTML тэгов. Если модуль HanRun HR91105A / ENC28J60 не подключается, необходимо проверить настройки WiFi роутера.
