СОДЕРЖАНИЕ ►
При проектировании автономных механизмов или создании системы «Умный дом» у многих может возникнуть необходимость подключить платформу Arduino к ENC28J60 Ethernet LAN / Network Module. Это даст возможность управлять Arduino по локальной сети через компьютер или мобильное устройство (если есть точка доступа Wi-Fi). Рассмотрим в этой статье подключение HR911105A к Arduino Uno.
Как подключить Ethernet модуль к Arduino
Чтобы справиться с этой задачей мы подготовили пошаговую инструкцию по подключению Arduino Uno к модулю HR911105A 15/10. Вы узнаете к каким разъемам подключается порт и увидите видео с работающей схемой Ethernet модуля HanRun HR911105A и Arduino Uno. Итак, нам необходимо для занятия нам необходима плата Arduino, Ethernet порт HanRun и Wi-Fi роутер для организации локальной сети.

Следуйте пошаговой инструкции и вы сможете управлять включением светодиодов по локальной сети через компьютер. А если у роутера есть возможность создать точку доступа Wi-Fi, то управление может быть доступно через любое мобильное устройство (телефон или планшет). Схема подключения LAN модуля HanRun HR911105A и Arduino, а также работающий скетч управления Ардуино через Wi-Fi представлены ниже.
Подключение модуля HR911105A к Arduino Uno
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- Ethernet порт HanRun HR911105A 15/10;
- макетная плата;
- провода «папа-папа» и «папа-мама»;
- 3 светодиода;
- 3 резистора на 10 кОм;
- роутер и LAN-кабель.
Соедините плату Arduino Uno и HR911105A, как на фото ниже. Обратите внимание, что 10 контактный модуль Ethernet ENC28J60 Enternet HR911105A питается от разъема 3,3 V, а 12 контактный модуль от 5V. Кроме того, обозначения разъемов на HanRun HR911105A могут быть изменены производителем, например, ST — вместо SO. Соединение проводов с контактами должно быть качественным.

| 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) |
Далее собираем на макетной плате схему из трех светодиодов и резисторов. Светодиоды соединяются с разъемами 3, 4, 5 на плате Ардуино. При желании вы можете подключить RGB-светодиод к Ардуино или увеличить количество светодиодов, сделав при этом необходимые изменения в скетче для управления Ардуино через wifi.

После сборки электрической схемы необходимо загрузить библиотеку для работы с HanRun HR911105A. Библиотеки служат для облегчения кода. Это могут быть драйвера к дополнительному оборудованию или часто используемые функции. В программе Arduino IDE уже есть набор стандартных библиотек, которые часто используются. Но в нашем случае требуется загрузить новые библиотеки (скачать архив) с Google Диск.

Откройте программу Arduino IDE и проверьте установку библиотеки. Заходите в меню «Файл — Образцы», после стандартных библиотек должна появиться библиотека «ethercard». Очень часто библиотеки содержат в себе несколько готовых скетчей.

Из-за большого объема кода приведем лишь небольшой отрывок скетча. Для оформления интернет страницы в программе используются HTML тэги. Скачайте готовый скетч здесь и загрузите программу в микроконтроллер.
Счетч для Arduino и модуля HR911105A
#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()); } }
Пояснения к коду:
- этой строчкой
byte Ethernet::buffer[1200];мы освободили память в микроконтроллере для буфера обмена. При увеличении данных на Web странице необходимо увеличить буфер, чтобы не происходило «зависания»; - включение/выключение светодиодов происходит в зависимости от количества символов в строке «Светодиод 1: OFF»
ArduinoPIN4=onилиArduinoPIN1=off; - стиль и оформление web-страницы выполнено с помощью HTML тэгов.

Заключение. IP платы Arduino прописан в коде. Все основные функции в скетче прокомментированы, поэтому проблем в настройках программы возникнуть не должно. Зайдите через компьютер или телефон по IP адресу 192.168.1.55 — у вас должна открыться страница, как на фото. Если не удалось сделать подключение HanRun HR911105A 15/10, то следует проверить настройки Wi-Fi роутера.










Приветствую! сделал всё как тут описано, вот что получилось. При запуске ардуино светодиоды сразу загораются, хотя на сайте стоит OFF и на оборот, когда нажимаешь выключить, кнопочка превращается в ON и светодиод гаснет, второй светодиод управляет 4-ым пином а третий управляет 5-м пином, не пойму почему светодиоды сразу зажигаются?
Поменяйте местами ON/OFF и цвета переместите green/red в строчках:
PinStatus[1]?PSTR(«<font color=’green’><b>ON</b></font>»):PSTR(«<font color=’red’>OFF</font>»),
OFF — это не статус выключенных светодиодов, а требуемое значение при нажатии на кнопку. Т.е. при нажатии на OFF светодиоды выключаются.
Здравствуйте, а можно ли управлять, с помощью этого модуля, двигателями через l293d?
Можно, но лучше блютуз или радио модули — зачем использовать провода (http://роботехника18.рф/описание-радиомодуля-nrf24l01/)
Здравствуйте! Помогите , пожалуйста, скачать готовый скетч для Arduino Uno и модуля HR911105A.
HR911105A это название только (!) самого разъема RJ45 10/100, а не всего модуля