Перейти к содержанию

Модуль HanRun HR91105A Arduino, подключение

Модуль HanRun HR91105A Arduino, подключение

На этой странице рассмотрим, как подключить модуль Ethernet HanRun HR911105A к Arduino. При проектировании автономных механизмов или создании системы «умный дом» многим может понадобиться подключить Arduino к сети Интернет через сетевой модуль ENC28J60 LAN / Ethernet. Это позволит управлять микроконтроллером Ардуино по локальной сети с помощью компьютера или смартфона (при наличии точки доступа WiFi).

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • ENC28J60 Ethernet LAN / Network Module
  • светодиоды и резисторы
  • макетная плата
  • коннекторы
  • библиотека EtherCard.h

Дополнительные материалы на эту тему:

  1. Подключение WiFi модуля ESP-12E к Ардуино
  2. Подключение WiFi модуля ESP-01 к Ардуино
  3. Как подключить модуль RFID RC522 к Ардуино

HanRun HR911105A распиновка, характеристики

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

Как подключить модуль 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 роутера.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜